C# 将故障异常上的命名空间移动到信封WCF服务

C# 将故障异常上的命名空间移动到信封WCF服务,c#,wcf,soap,xmlvend,C#,Wcf,Soap,Xmlvend,我在挣扎。我试图在WCF中实现一个自定义错误 我想将名称空间从Fault Contract类移动到信封 目前: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <s:Fault> <faultcode>s:Client</faultcode> <faultstring xml:lang="en-ZA">Th

我在挣扎。我试图在WCF中实现一个自定义错误

我想将名称空间从Fault Contract类移动到信封

目前:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <s:Fault>
  <faultcode>s:Client</faultcode>
  <faultstring xml:lang="en-ZA">This meter has been blocked</faultstring>
  <detail>
    <xmlvendFaultResp xmlns="http://www.nrs.eskom.co.za/xmlvend/service/2.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:b="http://www.extended.net/AccountExtensions" 
xmlns:ns1="http://www.nrs.eskom.co.za/xmlvend/base/2.1/schema">
      <ns1:clientID xsi:type="ns1:EANDeviceID" ean="4466122376268"/>
      <ns1:serverID xsi:type="ns1:EANDeviceID" ean="6004708001998"/>
      <ns1:terminalID xsi:type="ns1:GenericDeviceID" id="1"/>
      <ns1:reqMsgID dateTime="20140506132252" uniqueNumber="100003"/>
      <ns1:respDateTime>2014-05-20T17:46:21.8611498+02:00</ns1:respDateTime>
      <ns1:dispHeader>This meter has been blocked</ns1:dispHeader>
      <ns1:operatorMsg>This meter has been blocked</ns1:operatorMsg>
      <ns1:custMsg>This meter has been blocked</ns1:custMsg>
      <ns1:fault xsi:type="ns1:BlockedMeterEx">
        <ns1:desc>This meter has been blocked</ns1:desc>
        </ns1:fault>
        </xmlvendFaultResp>
     </detail>
    </s:Fault>
  </s:Body>
</s:Envelope>

s:客户
这个仪表被阻塞了
2014-05-20T17:46:21.8611498+02:00
这个仪表被阻塞了
这个仪表被阻塞了
这个仪表被阻塞了
这个仪表被阻塞了
它应该是什么

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="http://www.nrs.eskom.co.za/xmlvend/base/2.1/schema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <s:Body>
    <s:Fault>
  <faultcode>s:Client</faultcode>
  <faultstring xml:lang="en-ZA">This meter has been blocked</faultstring>
  <detail>
    <ns1:xmlvendFaultResp>
      <ns1:clientID xsi:type="ns1:EANDeviceID" ean="4466122376268"/>
      <ns1:serverID xsi:type="ns1:EANDeviceID" ean="6004708001998"/>
      <ns1:terminalID xsi:type="ns1:GenericDeviceID" id="1"/>
      <ns1:reqMsgID dateTime="20140506132252" uniqueNumber="100003"/>
      <ns1:respDateTime>2014-05-20T17:46:21.8611498+02:00</ns1:respDateTime>
      <ns1:dispHeader>This meter has been blocked</ns1:dispHeader>
      <ns1:operatorMsg>This meter has been blocked</ns1:operatorMsg>
      <ns1:custMsg>This meter has been blocked</ns1:custMsg>
      <ns1:fault xsi:type="ns1:BlockedMeterEx">
        <ns1:desc>This meter has been blocked</ns1:desc>
        </ns1:fault>
        </xmlvendFaultResp>
     </detail>
    </s:Fault>
  </s:Body>
</s:Envelope>

s:客户
这个仪表被阻塞了
2014-05-20T17:46:21.8611498+02:00
这个仪表被阻塞了
这个仪表被阻塞了
这个仪表被阻塞了
这个仪表被阻塞了

有可能吗?如果有,我将如何做?

可以更改Soap信封(以及消息)中的名称空间或前缀,但这不是一个简单的配置。请看这里:


基本上,您必须编写自定义MessageFormatter或MessageEncoder。从Xml/SOAP的角度来看,名称空间在哪里或前缀是什么并不重要,但是如果您需要支持手动解析响应的一些旧客户端,您可能需要它。

非常感谢!我会试试这个,然后再打给你