WCF - 如何使用消息合同返回成功或失败消息

时间:2012-10-08 00:28:11

标签: c# xml wcf soap messagecontract

我使用SOAP / XML和MessageContracts,必须返回指定的格式,类似于以下内容:

如果验证成功:

<env:Envelope>
    <env:Body>
        <Success xmlns="http://tempuri.org"></Success>
    </env:Body>
</env:Envelope>

如果不成功:

<env:Envelope>
    <env:Body>
        <Failure xmlns="http://tempuri.org"></Failure>
    </env:Body>
</env:Envelope>

例如,采用以下方法。它返回一种MyResponse。那么如何定义MyResponse以返回成功或失败XML元素?

public MyResponse SaveMessage(MyRequest request) 
{            
     return new MyResponse();            
}

我可以很好地回复成功消息,就像这样。它已解包并具有Success的XML元素。但是我还需要能够返回一个失败的XML元素,而我不能使用相同的MyResponse类型。

[MessageContract(IsWrapped=false)]
public class MyResponse
{
    [MessageBodyMember(Namespace = "http://tempuri.org")]
    public Success Success { get; set; }

}

1 个答案:

答案 0 :(得分:0)

我最终使用无类型消息并返回如下消息(类似于失败):

MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes("<Success xmlns=\"http://tempuri.org\"></Success>"));

XmlDictionaryReader xdr = XmlDictionaryReader.CreateTextReader(stream,new XmlDictionaryReaderQuotas());

return Message.CreateMessage(MessageVersion.Soap11, "xxx/xxx/xxxResponse", xdr);