WCF客户端未从服务获取异常
我有一个WCF客户端未从服务获取异常,wcf,Wcf,我有一个WCF服务,它的includeExceptionDetailInFaults设置为true。在SOAP UI中测试服务时,我可以看到响应包含错误: <ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <HelpLink i:nil="tr
WCF
服务,它的includeExceptionDetailInFaults
设置为true。在SOAP UI
中测试服务时,我可以看到响应包含错误:
<ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HelpLink i:nil="true"/>
<InnerException i:nil="true"/>
<Message>Invalid Session Protocol</Message>
无效会话协议
然而,我的客户只是选择了一个非常乏味的问题
远程服务器返回意外响应:(400)错误请求
信息。因此,我必须在客户机中执行一些操作,以使其能够读取来自服务的响应
我的服务配置如下:
<system.serviceModel>
<client>
<endpoint
address="http://az00439/DRGDataService/StoreDataDotNet.svc"
binding="basicHttpBinding" bindingConfiguration=""
contract="DRGDataService.IStoreDataDotNet"
name="DotNetClient" kind="" endpointConfiguration="">
<identity>
<certificateReference storeName="My" storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName"/>
</identity>
</endpoint>
</client>
<bindings>
<basicHttpBinding>
<binding name="basicBinding">
<security mode="TransportCredentialOnly">
</security>
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="AspNetAjaxBehavior">
<enableWebScript/>
</behavior>
<behavior name="webEndpoint">
<webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json"
helpEnabled="true"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="StoreDataBehaviour">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="true"
httpsHelpPageUrl="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true"/>
<services>
<service behaviorConfiguration="StoreDataBehaviour" name="DRGDataLibrary.StoreData">
<host>
<baseAddresses>
<add baseAddress="https://az00439/DRGDataService/StoreData.svc"/>
</baseAddresses>
</host>
<endpoint name="StoreDatawebHTTPBindingEndpoint"
address=""
behaviorConfiguration="AspNetAjaxBehavior"
binding="webHttpBinding" bindingConfiguration="webBinding"
contract="DRGDataLibrary.StoreData" />
</service>
<service name="DRGDataLibrary.StoreDataDotNet"
behaviorConfiguration="StoreDataBehaviour" >
<host>
<baseAddresses>
<add baseAddress="https://az00439/DRGDataService/StoreDataDotNet.svc"/>
<add baseAddress="http://az00439/DRGDataService/StoreDataDotNet.svc"/>
</baseAddresses>
</host>
<endpoint name="StoreDataDotNetWebHttpEndpoint"
address=""
behaviorConfiguration="webEndpoint"
binding="webHttpBinding" bindingConfiguration="webBinding"
contract="DRGDataLibrary.IStoreDataDotNet" />
<endpoint name="StoreDataDotNetBasicHttpEndpoint"
address="http://az00439/DRGDataService/StoreDataDotNet.svc"
behaviorConfiguration=""
binding="basicHttpBinding" bindingConfiguration="basicBinding"
contract="DRGDataLibrary.IStoreDataDotNet" />
</service>
</services>
</system.serviceModel>
(在这个配置中有相当一部分内容,因为我使用SSL并对服务进行JS调用)
谢谢
尼克·赖特(Nick Wright)您捕获的异常类型是什么?如果它只是一个非通用的
故障异常
,则无法访问服务提供的任何特定于故障的详细信息
当您启用includeExceptionDetailInFaults
时,WCF似乎使用数据协定对您在SoapUI中看到的信息进行编码,这意味着您应该能够通过捕获FaultException
并检查异常的Detail
属性来获取它
综上所述,使用
includeExceptionDetailInFaults
仅用于调试,并且使用自定义故障契约和IErrorHandler
-因此您的客户是否应该依赖ExceptionDetail
中的信息是值得怀疑的。嗨-谢谢您的回答。我还没有机会回到这个话题上,但我会在我做的时候尝试你的建议。