我写了以下服务:
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;
}
}
}
和一个基本的应用程序来对其进行测试(一个按钮在click事件上调用
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抛出的
SoapException
,但我总是转到FaultException
catch块,将其作为消息获取:我怎样才能捕捉到真正的
SoapException
而不是FaultException
? WebService中有什么我想念的吗? 最佳答案
我认为主要的“问题”是您正在使用连接到ASP.NET Web服务(.asmx)的WCF服务引用。
解决此问题的“最简单”方法可能是在客户端上使用Web引用而不是WCF服务引用。为此,请选择“添加服务引用”对话框底部的“高级”按钮,然后选择该屏幕底部的“添加Web引用”。我相信使用Web引用应该会给您SoapException。
正确的方法(如果要遵循Microsoft的建议)将是发布WCF服务而不是.asmx服务。那是整整一章。
关于c# - 捕获WebService抛出的SoapException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5005314/