我正在将旧版Web服务转换为WCF服务。此服务目前正由前端应用程序使用。但截至目前,前端有意使用新的WCF服务,因此我们计划将请求从IIS重新路由到我们的新服务。这里的问题是新的WCF服务应该能够处理旧的输入请求,并且应该能够以完全相同的格式发回响应。
我在处理输入请求时没有遇到任何问题,但我遇到了尝试以旧格式返回消息的问题。我当前的服务以下面的格式返回SoapResponse(我没有使用任何消息契约/ DataContracts,因为我使用旧遗留代码中使用的相同返回类型和输入参数):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserCheckResponse xmlns="Abc.SomeNamespace">
<UserCheckResult a:Direction="Response" a:Purpose="UserCheck" xmlns:a="Abc.SomeNamespace">
<a:KV a:Key="TraceID" a:Value="546546565" />
<a:KV a:Key="Response" a:Value="78954" />
<a:KV a:Key="UserVerified" a:Value="N" />
<a:KV a:Key="TryAgain" a:Value="Y" />
<a:KV a:Key="DataSource" a:Value="NA" />
</UserCheckResult>
</UserCheckResponse>
我希望它看起来如下(我不想在响应中使用UserCheckResult节点,而是直接在UserCheckResponse节点下想要键值对):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserCheckResponse a:Direction="Response" a:Purpose="UserCheck" xmlns:a="Abc.SomeNamespace">
<a:KV a:Key="TraceID" a:Value="546546565" />
<a:KV a:Key="Response" a:Value="78954" />
<a:KV a:Key="UserVerified" a:Value="N" />
<a:KV a:Key="TryAgain" a:Value="Y" />
<a:KV a:Key="DataSource" a:Value="NA" />
</UserCheckResponse>
答案 0 :(得分:2)
我会说使用
XMLSerialize
代替
DataContractSerializer
(WCF的默认值)。
为您的操作添加“[System.ServiceModel.XmlSerializerFormatAttribute()]
”。然后使用XmlElementAttribute
作为响应节点。
当我不忙的时候,我会给一些样品。因为我目前正在进行遗留Web服务调用,并使用遗留请求调用WCF服务返回遗留响应。