【问题标题】:WCF Soap Response - Remove "Result" node (Format WCF Response)WCF Soap 响应 - 删除“结果”节点(格式化 WCF 响应)
【发布时间】:2015-03-26 10:16:35
【问题描述】:

我正在将旧版 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>

【问题讨论】:

    标签: c# .net wcf soap idispatchmessageinspector


    【解决方案1】:

    我会说使用 XMLSerialize 而不是 DataContractSerializer(WCF 的默认值)。 为您的操作添加“[System.ServiceModel.XmlSerializerFormatAttribute()]”。然后为您的响应节点使用XmlElementAttribute。 当我不忙的时候,我会给一些样品。因为我目前正在处理旧版 Web 服务调用并使用旧版请求调用 WCF 服务返回旧版响应。

    【讨论】:

    • 我实际上已经解决了这个问题,方法是在我们将其发送回前端之前使用消息检查器修改响应格式。但更好的方法是使用消息合约。我无法定义消息契约,因为我的方法参数是遗留类型并且有很多复杂的依赖关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多