当出现故障时,我遇到了从WCF服务返回命名空间的问题。作为删除基于BizTalk的WCF服务的一部分,我试图使用vanilla C#WCF构建相同服务的精确副本。
在基于BizTalk的服务中,错误消息包含'xmlns="http://schemas.microsoft.com/2003/10/Serialization/'
部分中的命名空间<Detail>
。但是我的C#WCF服务错误消息它缺少这个命名空间
BizTalk服务错误消息
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header />
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:ValidationError</s:Value>
<s:Subcode>
<s:Value>s:ItineraryNameInvalid</s:Value>
</s:Subcode>
</s:Code>
<s:Reason>
<s:Text xml:lang="en-AU">'Itinerary Name 'EEE' is invalid.'</s:Text>
</s:Reason>
<s:Detail>
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">'Itinerary Name 'EEE' is invalid.'</string>
</s:Detail>
</s:Fault>
</s:Body>
</s:Envelope>
但是在基于C#的WCF服务命名空间中,用于&#34; <Detail><string missing namespace?>
&#34;不见了。
C#WCF错误消息
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header />
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:ValidationError</s:Value>
<s:Subcode>
<s:Value>s:ItineraryNameInvalid</s:Value>
</s:Subcode>
</s:Code>
<s:Reason>
<s:Text xml:lang="en-AU">'Itinerary Name 'EEEE' is invalid.'</s:Text>
</s:Reason>
<s:Detail>
<string>'Itinerary Name 'EEEE' is invalid.'</string>
</s:Detail>
</s:Fault>
</s:Body>
</s:Envelope>
代码
catch (ValidateException ex) {
string messsage = ex.Message;
var fcs = new FaultCode(ex.FaultSubCode);
var fc = new FaultCode(ex.FaultCode,fcs);
var fr = new FaultReason(messsage);
throw new FaultException<string>(messsage, fr, fc);
}
添加这个缺少的命名空间的任何线索或想法都会受到赞赏吗?