Я хочу иметь возможность установить 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>
Редактировать: для потомков я обновил вопрос и ответ, чтобы охватить как уровень сообщений, так и уровень транспорта, так как мне нужно учитывать оба.