- Я знаю, как использовать [FaultException] и бросать Customized [DataContract] в WCF
- Я знаю, как вернуть мыльное сообщение с настраиваемыми заголовками и тегами тела, используя [MessageContract]
Однако я собираюсь спросить: как создать [FaultException] в WCF с настроенными заголовками и телом? Потому что, когда я использую [FaultException] для создания [MessageContract], он всегда заключает мои заголовки и теги тела в тег тела.
Это не то, чего я хочу. Большинство клиентов SOAP не понимают WCF [FaultException].
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring xml:lang="en-CH" />
<detail>
<CustomizedError xmlns="http://schemas.datacontract.org/2004/07/PlayWcfFault" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<BodyTag1>Hello BodyTag1</BodyTag1>
<HeaderTag1>Hello HeaderTag1</HeaderTag1>
</CustomizedError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
[MessageContract]
public class CustomizedError
{
[MessageHeader] public string HeaderTag1;
[MessageBodyMember] public string BodyTag1;
}
[ServiceContract]
public interface IService1
{
[OperationContract]
[FaultContract(typeof(CustomizedError))]
CustomizedError GetData();
}
public class Service1 : IService1
{
public CustomizedError GetData()
{
CustomizedError fault = new CustomizedError
{
HeaderTag1 = "Hello HeaderTag1",
BodyTag1 = "Hello BodyTag1",
};
throw new FaultException<CustomizedError>(fault, "");
// return fault;
}
}
Мыльное сообщение, которое я хочу, это
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<HeaderTag1>Hello HeaderTag1</HeaderTag1>
</s:Header >
<s:Body>
<s:Fault>
<BodyTag1>Hello BodyTag1</BodyTag1>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>