бросает код ошибки («Получатель»), но отвечает «Сервер» - PullRequest
2 голосов
/ 14 сентября 2011

Я выбрасываю FaultCode of Receiver, но клиент возвращает «s: Server» в качестве кода ошибки ответа. Как получить ответ «s: Receiver»?

Мой код:

throw new FaultException<System.ApplicationException>(new System.ApplicationException("My application broke"), new FaultReason("because i said so"), new FaultCode("Receiver"));

Ответ:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <s:Fault>
         <faultcode>s:Server</faultcode>
         <faultstring xml:lang="en-US">because i said so</faultstring>
         <detail>
            <ApplicationException xmlns="http://schemas.datacontract.org/2004/07/System" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="http://www.w3.org/2001/XMLSchema">
               ...
            </ApplicationException>
         </detail>
      </s:Fault>
   </s:Body>
</s:Envelope>

1 Ответ

3 голосов
/ 14 сентября 2011

Попробуйте это:

throw new FaultException<System.ApplicationException>(
  new System.ApplicationException("My application broke"), 
  new FaultReason("because i said so"), 
  new FaultCode("Receiver", "http://schemas.microsoft.com/ws/2005/05/envelope/none"));

См. Принятый ответ на .NET WCF сбоев, порождающих неправильные значения кода ошибки SOAP 1.1

РЕДАКТИРОВАТЬ: Пространство имен http://schemas.xmlsoap.org/soap/envelope/ в сообщении об ошибке, которое вы опубликовали, указывает на то, что вы используете привязку на основе SOAP 1.1. SOAP 1.1 поддерживает только следующие коды ошибок: VersionMismatch, MustUnderstand, Client и Server. SOAP 1.2 поддерживает: VersionMismatch, MustUnderstand, DataEncodingUnknown, Sender и Receiver. Причина, по которой вы не можете указать код ошибки отправителя, может быть связана с привязкой. Попробуйте вместо этого указать код ошибки клиента. Я получил списки кодов неисправностей от http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcode.aspx. См. Раздел «Примечания».

...