我创建了一个使用 Unity/Unity.WCF/Unity.Interceptors 进行故障处理的 WCF 服务。
现在,如果我执行 SOAP 请求并且不在请求中包含所需的节点 - 服务方法执行 - 我抛出异常并且我的拦截器将其变成 SOAP 错误。
例子:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v10="http://services.....nl/.../Schemas/v10">
<soapenv:Header/>
<soapenv:Body>
<v10:TheRequestObject>
</v10:TheRequestObject>
</soapenv:Body>
</soapenv:Envelope>
我可以使用调试器单步执行服务调用 - 在验证请求对象时抛出异常,并且我的拦截器将其变成 SOAP 错误:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring xml:lang="nl-NL">Error msg</faultstring>
<detail> ...
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
现在 - 我们的测试人员为所需参数提供了一个空节点,如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v10="http://services.....nl/.../Schemas/v10">
<soapenv:Header/>
<soapenv:Body>
<v10:WagenlijstRequest>
<v10:RequiredInteger></v10:RequiredInteger>
</v10:WagenlijstRequest>
</soapenv:Body>
</soapenv:Envelope>
并且该服务返回以下错误消息:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
<faultstring xml:lang="nl-NL">The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
问题是 - 这个请求永远不会到达我的服务,所以我不能对这个错误消息做任何事情。我如何影响这里发生的事情?
这让我想起了 MVC 中的一些模型绑定——我可以影响绑定行为吗?