处理来自WCF的未知肥皂消息

时间:2012-01-18 19:39:31

标签: c# wcf soap wsdl soap-client

我在C#.net控制台应用程序中使用来自WSDL + XSD的SVCUTIL生成客户端。一切正常,但是出于某些逻辑错误处理的目的,客户端可能会收到响应消息,该消息未在WSDL中定义,因此反序列化&将失败但方法不会抛出异常但返回null。

是否存在处理这种情况的通用方法,或者我定义了错误/错误消息xsd(对于服务器返回的soap消息),如果是null响应,则处理/反序列化消息。

PS:我的远程服务无法为逻辑错误抛出错误。(是的,有点堵塞)。

1 个答案:

答案 0 :(得分:2)

WSDL是合同。它就像你有两个对象并在它们之间定义了接口一样。如果第一个对象调用第二个对象上的操作,则它需要接口定义的返回值。如果我们使用一些非强类型语言,第二个对象将能够返回不同类型的返回值,并且第一个对象将因意外错误而失败。

编程语言有解决这个问题的方法 - 在.NET的情况下,你会使用object类型作为返回值,你总是需要手动调查你收到的类型以及如何处理返回值。在WCF的情况下,我们也有这样的高级类型 - System.ServiceModel.Channels.Message,但你真的不想使用它,因为在这种情况下你必须手动构建SOAP请求并手动解析传入的响应。

作为Web服务的附注,单个请求类型始终具有单个响应类型和零个或多个错误类型(即SOAP错误)。如果您的服务在单个请求类型上返回不同的响应类型,则此类服务不是“有效”Web服务,并且WSDL无法描述。因此,它也不能以自动生成的WCF代理提供的强类型方式。