我写了以下服务:

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/

10-11 03:07