0

我有一个 WCF 方法,它当前返回一个字符串,如下所示:

string CreateDesign(string UID, string TemplateName)

重新生成的字符串是通过以下方法创建的:

string RequestProcessed(string status, string UID)
    {
        XDocument doc = new XDocument(
            new XElement("RequestProcessed",
                new XElement("Status", status),
                new XElement("UID", UID)));

        return doc.ToString();
    }

我使用 SOAPUI 得到的响应是这样的:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
  <CreateDesignResponse xmlns="http://tempuri.org/">
     <CreateDesignResult><![CDATA[<RequestProcessed>
       <Status>OK</Status>
       <UID>FolderName</UID>
     </RequestProcessed>]]></CreateStandardResult>
  </CreateStandardResponse>
 </s:Body>
 </s:Envelope>

客户期望它是这样的:

<soap:Body>
 <m:RequestProcessed xmlns:m=" ">
  <m:Status></m:Status>
  <m:UID></m:UID>
 </m: RequestProcessed >
</soap:Body>

我应该怎么做才能让 WCF 服务返回这样的响应?我已经为此苦苦挣扎了一段时间,感谢您的帮助。

问候。

4

1 回答 1

2

要完全控制您的 SOAP 消息体,您应该对输入和输出参数使用 MessageContract 属性。这是一篇很好的网络文章。 使用消息合约 希望它有所帮助!

编辑:
运营合同

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    RequestProcessed TestMethod(RequestInput tt);
}

请求已处理

[MessageContract]
public class RequestProcessed
{
    [MessageBodyMember]
    public string Status { get; set; }
    [MessageBodyMember]
    public Guid UID { get; set; }
}

SOAP 消息体

<s:Body>
   <RequestProcessed xmlns="http://tempuri.org/">
     <Status>OK</Status>
     <UID>ffd338ed-bca3-46c1-9ee3-3c92ba3b3acc</UID>
   </RequestProcessed>
</s:Body>
于 2013-01-18T08:14:14.210 回答