在wse中使用自己的异常,不仅仅是SoapException

时间:2008-09-26 09:33:53

标签: c# .net wse

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

3 个答案:

答案 0 :(得分: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),您应该收到如下错误消息:“错误:服务器不可用,请稍后再试

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

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

答案 1 :(得分:0)

是的,你可以抛出自己的例外。任何未从SoapException派生的未捕获异常都将被.NET框架装入SoapException。如果要控制SoapException的某些部分是如何形成的(例如,错误和详细信息部分),则可以从SoapException派生。

答案 2 :(得分:0)

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

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