【问题标题】:Remove ActivityId from WCF Request从 WCF 请求中删除 ActivityId
【发布时间】:2012-01-25 14:24:09
【问题描述】:

我在 WCF 客户端和 Java Web 服务之间遇到了一个有趣的兼容性问题。简而言之,我发现生成标头的方式导致了问题 - 标头中的 ActivityId 和 Action 元素以及 WCF 对自定义标头的命名空间所做的操作导致了问题。我已经通过 wsdl.exe 成功使用了 WSDL,但 WCF 似乎正在以 Java Web 服务不喜欢的方式操作标头。有什么方法可以为 WCF 客户端设置绑定以不发送 ActivityId 和 Action 元素?

【问题讨论】:

  • 你能告诉我们客户端生成的配置吗?

标签: wcf web-services interop


【解决方案1】:

您是否在客户端中打开了跟踪?我认为这就是添加活动 ID 的原因,因为它试图将跟踪活动流向服务以进行端到端跟踪。关闭活动跟踪标志,它应该会消失 - 请参阅我对操作标题的评论

【讨论】:

  • 是添加这些元素的追踪;禁用跟踪有助于解决问题。 Java Web 服务没有很好地解释 SOAP 消息(某种奇怪的命名空间问题)。
  • 如何关闭它?它在哪里关闭?
  • @irperez 我已经缩小了需要停用以删除 ActivityId SOAP 标头的设置。
【解决方案2】:

当 WCF 客户端尝试连接到非 WCF 服务器时,通常会出现此问题,例如JAX-WS、Websphere 等

只是为了添加 Richard 的救命稻草答案并解决 @irperez 的评论,需要禁用以防止 WCF 诊断在 WCF 诊断跟踪期间添加 ActivityId 的实际设置:

  • switchvalue 中删除ActivityTracing
  • propagateActivity 设置为false

即改变

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing"
            propagateActivity="true">
    <listeners>
      <add name="xml"/>
    </listeners>
  </source>
...

收件人:

<source name="System.ServiceModel" switchValue="Information" 
        propagateActivity="false">
  <listeners>
    <add name="xml"/>
  </listeners>

如果启用了ActivityId,它会将以下内容注入到 SOAP 标头中,这可能会破坏毫无戒心的服务器:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <ActivityId CorrelationId="5de75017-da08-4ac2-84f2-5374953cc2a1" 
         xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">
      9f076849-e76e-4675-84c1-5026b1c2eb1a
    </ActivityId>
  </s:Header>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多