2011-12-27 2 views
0

Я пытаюсь установить учетные данные в моем клиенте WCF, как показано ниже.Как настроить привязку WCF-клиента при использовании сертификата X509?

  ClientCredentials loginCredentials = new ClientCredentials(); 
      loginCredentials.UserName.UserName = this.UserId; 
      loginCredentials.UserName.Password = this.Password; 
      loginCredentials.ClientCertificate.Certificate = new X509Certificate2(this.Certificate); 

      var defaultCredentials = channelFactory.Endpoint.Behaviors.Find<ClientCredentials>(); 
      channelFactory.Endpoint.Behaviors.Remove(defaultCredentials); 
      channelFactory.Endpoint.Behaviors.Add(loginCredentials); 

У меня есть настройка привязки клиента wcf, как показано ниже.

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="PPWSApiOrderBinding" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://ws.test.globalgateway.com:443/wsapi/services" 
      binding="basicHttpBinding" bindingConfiguration="PPWSApiOrderBinding" 
      contract="PPWebService.PPWSApiOrder" name="PPWSApiOrderPort" /> 
    </client> 
</system.serviceModel> 

Я получаю сообщение об ошибке «Запрос HTTP является несанкционированным со схемой проверки подлинности клиента„анонимный“заголовком аутентификации, полученный от сервера был«Basic области = ...» Удаленный сервер возвратил ошибку: (401) Несанкционирован.

Любая помощь приветствуется. Я не уверен, что нужно изменить в разделе привязки моего файла app.config. Благодаря!

ответ

1

выглядит ваша ошибка может быть в узле транспортного

посмотреть на этой странице MSDN для справки

вот пример.

<wsHttpBinding> 
<binding name="TransportSecurity"> 
    <security mode="Transport" /> 
     <transport clientCredentialType = "Windows" /> 
    </security> 
</binding> 
</wsHttpBinding > 

или

<wsHttpBinding> 
<binding name="MessageSecurity"> 
    <security mode="Message" /> 
     <message clientCredentialType = "Certificate" /> 
    </security> 
</binding> 
</wsHttpBinding > 

HttpBinding MSDN

+0

Спасибо за ответ. Должен ли я всегда использовать защиту сообщений, если мне нужно использовать clientCredentialType = Certificate? Теперь я получаю другую ошибку после изменения ее безопасности Message. Ошибка: «Предоставленная схема URI« https »недействительна, ожидается« http ». Имя параметра: через«. Я не уверен, означает ли это, если вы получили более раннюю ошибку или это связано с безопасностью сообщений? Есть идеи? Спасибо. – Jyina

+0

Я верю, потому что по самому имени он подразумевает, что он ищет сертификат. Если возможно, попробуйте clientCredentialType = «Окно» не уверен, как ваша система безопасности настроена или должна быть или что их ожидания для разработчиков в отношении выполнения привязка http – MethodMan

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