【问题标题】:Catching a SoapException thrown by a WebService捕获 WebService 抛出的 SoapException
【发布时间】:2011-06-27 16:18:29
【问题描述】:

我写了以下服务:

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 抛出的 SoapException,但我总是去 FaultException 捕捉块获取它作为消息:

System.Web.Services.Protocols.SoapException:消息 在 [...]WebService1\WebService1\Service1.asmx.cs:line 25 中的 WebService1.Service1.Test(String str) 处

我怎样才能捕捉到真正的SoapException,而不是FaultException? WebService 中有什么我想念的吗?

【问题讨论】:

    标签: c# exception asmx try-catch soapexception


    【解决方案1】:

    我认为主要的“问题”是您正在使用连接到 ASP.NET Web 服务 (.asmx) 的 WCF 服务引用。

    处理此问题的“最简单”方法可能是在客户端上使用 Web 引用而不是 WCF 服务引用。为此,您可以选择“添加服务引用”对话框底部的“高级”按钮,然后选择该屏幕底部的“添加 Web 引用”。我相信使用 Web Reference 应该会给您一个 SoapException。

    正确的方法(如果您想遵循 Microsoft 的建议)是发布 WCF 服务而不是 .asmx 服务。不过那是另外一章了..

    【讨论】:

    • -1:不一定要在客户端使用旧技术,因为服务端使用的是旧技术。
    • 没错,这当然没有必要。但是,将 WCF 和 ASMX 混合使用肯定会遇到麻烦。你有更好的解决方案吗?如果是这样,我相信 Sharpac 会很感兴趣,我也会...
    • 感谢 CodingInsomnia 成功了!我终于捕捉到了一个 SoapException。
    【解决方案2】:

    当 ASMX 服务抛出 SoapException 时,.NET 会返回 SOAP 错误消息。

    SOAP 错误作为FaultException 类型的异常返回给服务引用。所以你永远不会看到SoapException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2020-06-26
      • 1970-01-01
      相关资源
      最近更新 更多