是否可以使用http.sys发送我自己开发的Soap异常到客户端
答案 0 :(得分:1)
据我所知,遗憾的是答案是否定的。您无法在服务器端构建自己的自定义异常,并希望通过WSE在客户端使用它们。我不能给出很多技术背景(为什么WSE不允许这样做),但我确信我的答案是因为我测试了这一点。
您可以使用提供的链接中描述的方法返回从System.Web.Services.Protocols.SoapException继承的自定义异常,但是您必须在客户端捕获异常作为SoapException,因为您不会能够将其捕获为自定义异常类型:http://msdn.microsoft.com/en-us/library/ms229064.aspx
要为您自己的确认重新创建测试,请执行以下操作:
创建一个显式返回测试异常的Web方法,如下所示:
'This is in VB.Net
<WebMethod()> _
Public Function ThrowTestSoapException() As TestSoapException
Return New TestSoapException()
End Function
尝试重新生成客户端的WSE库(使用WseWsdl3.exe),您应该收到如下错误消息:“错误:服务器不可用,请稍后再试”
这是我在尝试创建自己的可转移自定义例外时所能得到的。我唯一能做的就是返回一个继承自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故障。