我希望能够在代码中设置服务终结点的 uri,同时在配置文件中设置安全行为的配置。
下面为我提供了一些方法,该服务使用正确的绑定配置 - 但我找不到将证书配置移动到配置文件中的方法。
编辑:请注意这里有一些混乱 - 配置文件为消息级安全性配置证书,SSL 端口控制传输级别的证书 - 根据 Richard Blewett 的回答
var svc = new ServiceHost( typeof (MyService), new Uri(s));
svc.Authorization.PrincipalPermissionMode =
PrincipalPermissionMode.UseWindowsGroups;
svc.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding("MyBinding"), "");
//svc.Credentials.ServiceCertificate.SetCertificate(
// StoreLocation.LocalMachine,
// StoreName.My,
// X509FindType.FindBySubjectName,
// "mycertname"
// );
注释掉的代码是我需要在配置文件中找到一些等效代码
的内容 <system.serviceModel>
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyBehavior">
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="MyBinding">
<security mode="Transport">
<transport clientCredentialType="Windows"/>
</security>
<!-- Or for message level security
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
-->
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
编辑:为了后代,我已经更新了问题和答案,以涵盖消息级别和传输级别,因为我需要同时满足两者。
对于消息安全性,此服务行为应满足您的需求
<behaviors>
<serviceBehaviors>
<behavior>
<serviceCredentials>
<serviceCertificate findValue="mycertname"
x509FindType="FindBySubjectName"
storeLocation="LocalMachine"
storeName="My"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
但是,您正在使用传输安全 - 换句话说,HTTPS与wsHttpBinding
。因此,证书由将证书绑定到端口的http.sys
配置定义。在 Windows 2008 上,您可以使用netsh.exe
来控制和查看此配置。在 Windows 2003 上,您使用的可用工具要少得多httpcfg.exe