2009-02-19 5 views
2

У меня есть пользовательская реализация ClientCredentials в WCF. Двумя базовыми свойствами ClientCredentials являются ClientCertificate и ServiceCertificate, как видно из here (MSDN).Сертификаты WCF не установлены на пользовательских учетных данных

В моей конфигурации, я поставил мои пользовательские ClientCredentials, и оба сертификата определены:

 <endpointBehaviors> 
      <behavior name="MyCustomEndpointBehavior"> 
       <clientCredentials type="MyApp.Security.CentralAuthClientCredentials, MyApp"> 
        <clientCertificate findValue="localhost" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My" /> 
        <serviceCertificate> 
         <defaultCertificate findValue="localhost" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My" /> 
         <authentication certificateValidationMode="None" revocationMode="NoCheck" /> 
        </serviceCertificate> 
       </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 

Эта конфигурация была полностью 100% работы с аутентификацией UserName. Он использовал сертификаты для шифрования имени пользователя и пароля для сообщения. Затем я перешел на свой пользовательский ClientCredentials.

Во время выполнения, вот свойство, которые установлены на моих CentralAuthClientCredentials:

this.ClientCertificate = System.ServiceModel.Security.X509CertificateInitiatorClientCredential 
this.ClientCertificate.Certificate = null 
this.ServiceCertificate = System.ServiceModel.Security.X509CertificateRecipientClientCredential 
this.ServiceCertificate.DefaultCertificate = null 

Итак, почему клиент и служба сертификат по умолчанию, которые определены в конфигурации не установленных на фактическом реализованным объекте? Похоже, что WCF полностью игнорирует теги XML!

Есть ли какой-нибудь код, который я могу использовать, может быть, в конструкторе учетных данных, чтобы получить эти сертификаты из конфигурации вручную?

Спасибо за помощь!


Update

Я идиот. Я понял. WCF на самом деле создать свой экземпляр правильно с набором сертификатов, но в моем ФОС клиента, я имел следующий удалить/добавить ряд, что я думаю я скопировал из примера MSDN:

this.ChannelFactory.Endpoint.Behaviors.Remove<ClientCredentials>(); 
this.ChannelFactory.Endpoint.Behaviors.Add(new CentralAuthClientCredentials()); 
return base.Channel.MyServiceMethod(); 

Чтобы удалить старый учетные данные и добавить свои собственные. Однако это создало новый экземпляр, у которого не было установленных сертификатов! упс!

+0

Можете ли вы показать привязку, которая используется? –

+0

Не могли бы вы разместить свое решение ответа и принять его, чтобы он не отображался в неотвеченных вопросах? –

ответ

1

Так что я могу отметить это как ответил, я добавляю свое собственное решение, которое должно было удалить этот код от клиента, что делает новый верительных:

this.ChannelFactory.Endpoint.Behaviors.Remove<ClientCredentials>(); 
this.ChannelFactory.Endpoint.Behaviors.Add(new CentralAuthClientCredentials()); 

и использовать один уже установленный WCF вместо вызова Remove() на нем.

 Смежные вопросы

  • Нет связанных вопросов^_^