【问题标题】:Custom binding c# WCF自定义绑定 c# WCF
【发布时间】:2015-09-10 14:51:37
【问题描述】:

我想向我的 WCF SOAP 消息添加一个安全标头,如下所示:

<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">URLWithAction</Action>
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
  <wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <wsse:Username>Username</wsse:Username>
    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password>
  </wsse:UsernameToken>
</Security>
</s:Header>

但是,我无法弄清楚这是否可以使用 basicHttpBinding 或其他标准方法来完成,或者我是否必须制作自定义的以及如何制作自定义的... 有人可以帮忙吗?

【问题讨论】:

  • 这是传出消息还是传入消息?是在客户端还是服务器端添加header?
  • 这是来自客户端的外发消息
  • 客户端是 C# 并且使用 WCF?如果是这样,下面的答案仍然有效。您可以使用 IClientMessageInspector。我会更新我的答案

标签: c# wcf wcf-binding


【解决方案1】:

事实证明,我必须在自定义绑定中更多地使用安全元素的属性。我添加了标签 includeTimestamp="false" 然后安全标头工作,即使操作元素未添加到标头。

自定义绑定的最终结果是:

<customBinding>
 <binding name="BasicHttpBinding_WebService">
  <textMessageEncoding messageVersion="Soap11" writeEncoding="utf-8" />
  <security authenticationMode="UserNameOverTransport" 
            includeTimestamp="false"/>
  <httpsTransport />
 </binding>
 <binding name="BasicHttpBinding_WebService1"/>
</customBinding>

【讨论】:

  • 这拯救了我的一天!我花了一整天的时间试图让它工作。终于找到了这个答案。谢谢!
【解决方案2】:

如果您想在服务器或客户端添加消息,请查看此答案How to add a custom HTTP header to every WCF call?

【讨论】:

  • 尽管它现在适用于配置更改,但这是在 WCF 中添加自定义标头标记的正确方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2010-11-29
  • 2019-11-21
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
相关资源
最近更新 更多