我要添加另一个答案,只是为了保持什么不会在这个问题上的工作历史。
这就是说,我终于通过customBinding工作。这次我已经三重检查了IIS是否需要客户端证书:)
它涉及在一个BizTalk应用程序的接收位置和另一个BizTalk应用程序的发送端口上创建自定义绑定,为什么?因为我们的项目涉及一个Biztalk应用程序发送给另一个。
所以,把一切工作,我只好:
接收位置(接收应用程序)
- 使用Visual Studio中的WCF发布向导使用重新发布接收应用程序“WCF-CustomIsolated”。我想要一个新的开始,并希望让BizTalk/Visual Studio做他们的事情而不是猜测。

- 我去,并在在BizTalk管理控制台编辑的接收位置。
- 设置textMessageEncoding messageVersion属性Soap11,因为这是我们一直在使用什么
- 去除的
httpTransport
绑定元素,因为如果你不这样做,你不能添加httpsTransport
元素,它需要
- 添加了
security
元素。在这一点上,它看起来像这样(的元素事项顺序)

- 的
security
元件具有称为authenticationMode
的属性将其切换到UserNameOverTransport。尽管名称,这是允许用户名与消息一起发送。在security
其他一切留下了默认

- 的
httpsTransport
有一个名为requireClientCertificate
此设置为“真”一切留下了默认值的属性。

- 然后加到这是非常简单的,之后,接收位置做我们所要求的行为。
发送端口(发送应用程序)
这是几乎相同的接收,但只是在发送的,而不是接收位置端口。
- 在绑定选项卡,我再说一遍所概述的接收位置的具体步骤
- 行为标签,我添加行为扩展名为
clientCredentials
并成立了以下值则ClientCertificate元素,它只是抢客户端证书位于当前用户存储中,用于您的发送端口以运行的服务帐户。
- 凭证选项卡我输入了先前在WCF-BasicHttp适配器发送端口的安全选项卡中输入的用户名凭据。

一旦这些全部完成,2个应用程序现在应该能够同时使用客户端证书和用户名,身份验证来相互交谈。
看到我对这个问题的回答,这基本上转化为非BizTalk WCF服务。 How to supply both UserName and Client Certificate in WCF client (why does this example work)?
并且不要忘记重新启动主机实例。
编辑 - 红利如果你最终导出/部署到不同的服务器,即使您导出和导入/单独安装web目录,你可能会得到一个IIS说,它不能找到端点MyService/Myservice.svc认为接收端口/位置被禁用。但是,这是因为它现在是一个WCF-CustomIsolated。解决方案:打开已发布服务的.svc文件,并将Factory
属性从BasicHttpWebServiceHostFactory
更改为CustomWebServiceHostFactory
您必须创建自定义行为才能实现此目的。在这里看到一篇关于双层认证的文章(非BizTalk),可以帮助http://blogs.msdn.com/b/saurabs/archive/2013/05/05/10349529.aspx – Dijkgraaf
我仍然试图得到这个加工。在非Biztalk环境中,您的评论有效。基本上,它归结为与像这样一个customBinding配置所述接收位置: <绑定名称= “CustomCDARequestEndpointBinding”> <安全authenticationMode = “UserNameOverTransport”/> < httpsTransport requireClientCertificate =“真” /> customBinding>但是,BizTalk的customBinding配置,没有'httpsTransport'绑定元素扩展 –
Bensonius
那么现在,你怎么在BizTalk端口允许'httpsTransport'绑定元素扩展,是让这个工作的关键? – Bensonius