構成ファイルでセキュリティ動作の構成を設定しながら、コードでサービスエンドポイントのURIを設定できるようにしたい。
以下は私にいくつかの方法を教えてくれます、サービスは正しいバインディング構成を使用します-しかし私は証明書構成を構成ファイルに移動する方法を見つけることができません。
編集:ここでいくつかの混乱があったことに注意してください-設定ファイルはメッセージレベルのセキュリティの証明書を構成し、SSLポートはトランスポートレベルの証明書を制御します-リチャードブルーエットの答えによると
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>
編集:後世のために、メッセージレベルとトランスポートレベルの両方に対応する必要があるため、質問と回答を更新してメッセージレベルとトランスポートレベルの両方をカバーしました。