Установите учетные данные службы wcf в файле конфигурации для службы с конечными точками, созданными в коде - PullRequest
1 голос
/ 25 января 2012

Я хочу иметь возможность установить 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>  

Редактировать: для потомков я обновил вопрос и ответ, чтобы охватить как уровень сообщений, так и уровень транспорта, так как мне нужно учитывать оба.

1 Ответ

0 голосов
/ 25 января 2012

Для безопасности сообщений это поведение службы должно дать вам то, что вам нужно

<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

...