4

是否可以通过 Soap 将我自己开发的异常发送到使用 http.sys 的客户端?

4

3 回答 3

1

不幸的是,据我所知,答案是否定的。您不能在服务器端构建自己的自定义异常并期望通过 WSE 在客户端使用它们。我不能提供太多技术背景来解释原因(比如为什么 WSE 不允许这样做),但我确信我的答案,因为我对此进行了测试。

您可以使用提供的链接中描述的方法返回从 System.Web.Services.Protocols.SoapException 继承的自定义异常,但是您必须在客户端将异常捕获为 SoapException,因为您将无法捕获它作为自定义异常类型:http: //msdn.microsoft.com/en-us/library/ms229064.aspx

要重新创建测试以供您自己确认,请执行以下操作:

  1. 创建一个测试异常类,随意调用它,并确保它遵循我上面提供的链接中描述的模式(提供了代码示例)。
  2. 创建一个显式返回测试异常的 Web 方法,如下所示:

    'This is in VB.Net
    <WebMethod()> _
    Public Function ThrowTestSoapException() As TestSoapException
        Return New TestSoapException()
    End Function
    
  3. 尝试重新生成客户端的 WSE 库(使用 WseWsdl3.exe),您应该会收到类似这样的错误消息:“错误:服务器不可用,请稍后再试

这是我在尝试创建自己的可转移自定义异常时所能得到的。同样,我唯一能做的就是返回一个继承自 SoapException 类的自定义异常,并在客户端将其作为 SoapException 捕获。这与上面“CheGueVerra”指出的链接中描述的方法相同。

回应 John Saunders 的上述评论:是的,如果可能的话,转到 WCF,WSE 确实已经过时了。由于这与我和其他提出这些问题的人有关,因此从 WSE 转变为 WCF 需要管理层的批准——所以我们中的一些人不能轻易地做出这些改变——即使我们非常想这样做。

于 2012-02-16T22:27:31.750 回答
0

是的,您可以抛出自己的异常。任何不是从 SoapException 派生的未捕获异常都将被 .NET 框架限制为 SoapException。如果您想控制 SoapException 的某些部分是如何形成的(例如,故障和细节部分),您可以从 SoapException 派生。

于 2008-11-19T19:57:57.483 回答
0

与它所基于的 ASMX 服务一样,WSE 几乎不支持 SOAP 故障。您可以返回它们(设置了 Detail 属性的 SoapException),但它们不会出现在 WSDL 中。如果由 WSE 客户端接收,它们将显示为 SoapException,而不是自定义异常类型。

WCF 确实完全支持客户端和服务器端的 SOAP 错误。

于 2012-02-17T01:06:32.953 回答