У меня есть пользовательская реализация 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();
Чтобы удалить старый учетные данные и добавить свои собственные. Однако это создало новый экземпляр, у которого не было установленных сертификатов! упс!
Можете ли вы показать привязку, которая используется? –
Не могли бы вы разместить свое решение ответа и принять его, чтобы он не отображался в неотвеченных вопросах? –