我写了以下服务:
namespace WebService1
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string Test(string str)
{
if (string.IsNullOrEmpty(str))
throw new SoapException("message", SoapException.ClientFaultCode);
else
return str;
}
}
}以及测试它的基本应用程序(单击事件上调用Test方法的一个按钮):
private void button1_Click(object sender, EventArgs e)
{
ServiceReference1.Service1SoapClient ws = new WindowsFormsApplication1.ServiceReference1.Service1SoapClient();
try
{
ws.Test("");
}
catch (SoapException ex)
{
//I never go here
}
catch (FaultException ex)
{
//always go there
}
catch (Exception ex)
{
}
}我想捕捉WebService抛出的get,但我总是以消息的形式访问get catch块:
...WebService1\WebService1\Service1.asmx.cs:line 25中的
System.Web.Services.Protocols.SoapException: WebService1.Service1.Test(String )
我怎么能抓到真正的SoapException,而不是FaultException呢?在WebService里有什么我错过的吗?
发布于 2011-02-17 13:59:29
我认为主要的“问题”是,您正在使用连接到ASP.NET Web服务(.asmx)的WCF服务引用。
处理此问题的“最简单”方法可能是在客户端上使用Web引用而不是WCF服务引用。为此,您可以在对话框底部选择"Advanced“按钮,然后在屏幕底部选择Add引用。我相信使用网络参考应该会给你一个SoapException。
正确的方法(如果您想遵循Microsofts的建议)是发布一个WCF服务,而不是一个.asmx服务。不过那是另一章..。
发布于 2011-02-17 14:45:22
当ASMX服务抛出SoapException时,.NET返回SOAP故障消息。
SOAP错误作为FaultException类型的例外返回给服务引用。所以你永远不会看到一个SoapException。
https://stackoverflow.com/questions/5005314
复制相似问题