【问题标题】:Custom Headers in WCFWCF 中的自定义标头
【发布时间】:2009-08-07 18:57:14
【问题描述】:

我想在我的 wsdl 上为传入的肥皂消息添加特定的自定义标头,因此我已将所需的标签添加到 web.config 的标头节点中,如下所示:

 <headers>
   <Tag>Value</Tag>
 </headers>

但是,如果自定义标签中的“值”设置为“值”,当我更改此值时,服务会将其踢出并给出以下错误;

'DestinationUnreachable - 由于 EndpointDispatcher 的 AddressFilter 不匹配,收件人无法处理带有 To 'http://localhost:3537/Service1.svc' 的消息。检查发送方和接收方的 EndpointAddresses 是否一致。'

那么如何为标签之间的实际值指定变量值?就像在 url 模板中一样,即

 <headers>
   <Tag>{variable value here}</Tag>
 </headers>

有什么想法,或者我是否以错误的方式处理自定义标题?我不想使用 messageContract,因为我们使用 RPC 样式的 soap 而不是文档样式。

另外一个奇怪的事情是,要使消息有效,标题元素中定义的自定义必须指定带有 ws-addressing 命名空间的 'IsReferenceParameter="true"' 属性,否则会引发上述错误?

 <Tag a:IsReferenceParameter="true">Value</Tag>

谁能给我解释一下?

提前致谢

乔恩

【问题讨论】:

  • 请说明您是从哪里了解到的。我认为您可能误解了您阅读的内容。

标签: soap wcf wcf-binding


【解决方案1】:

我无法真正解释您的具体问题 - 但通常,您会在代码中向 WCF 调用添加自定义标头,通常使用行为,而不是从 web.config。不确定这是否有效,真的。

当然,您的自定义标头行为可以做的是读取其将从配置文件或数据库表或其他东西发送的值。

但是,如果您真的想在消息中强制使用 SOAP 标头,我认为您最好的选择确实是使用消息协定。为什么你不能或不想使用消息合约?这确实是消息契约的唯一目的:定义显式 SOAP 消息布局,包括自定义标头。

查看有关该主题的一些文章和博客文章:

这个blog post here 展示了如何将自定义 SOAP 标头注入到通过实现自定义“WsdlExporter”类生成的 WSDL 中 - 也许这就是你要走的路?

如果您只是在 google 上搜索,可以获得更多资源 - 这是一个非常常见的场景,很多人已经以多种方式实现了它,并提供了一些巧妙的解决方案,并在博客上发布了它 - 你应该没有很难找到所有的答案!

马克

【讨论】:

  • 我想在服务端需要一个自定义标头,并使用标头标记在 WSDL 文档中显示该标记。你知道为什么我不能在 web.config 的自定义标签中包含变量值吗?乔恩
  • 啊,好吧,抱歉,我没听懂“需要 WSDL 中的标头”部分。我不知道您如何将变量名指定为占位符,抱歉。而且恐怕我看到的在合同中描述 SOAP 标头的唯一解决方案确实是使用 MessageContract。这正是它的用途。
  • 嗨,对不起,我认为我没有很好地解释它,在自定义标签节点中我不想指定变量,我希望内容是我想要的任何内容不仅仅是“价值”。例如: somevalueanotherValue 当我尝试传递除“Value”以外的任何数据时,我得到了第一篇文章中定义的错误。
  • 您在 web.config 中的哪个位置指定了这些标头?
  • 在服务标签中 - Value
猜你喜欢
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多