2013-09-04 2 views
1

У меня есть служба WCF, которая предоставляет аутентификацию/авторизацию для другой службы WCF.WCF - Получение CommunicationException

Вот метод выборки:

public int AddCustomerStopInfo(CustomerStop stop) 
      { 
       var request = new AddCustomerStopInfoRequest(stop); 

       var service = new ChannelFactory<IAccountManagementChannel>("WSHttpBinding_IAccountManagement").CreateChannel(); 

       try 
       { 
        var response = service.AddCustomerStopInfo(request); 
        service.Close(); 

        return response.AddCustomerStopInfoResult; 
       } 
       catch (CommunicationException e) 
       { 
        service.Abort(); 
        throw; 
       } 

      } 

На вызове метода service.AddCustomerStopInfo(), создается исключение. В сообщении говорится:

Безопасный канал не может быть открыт, так как согласование безопасности с удаленной конечной точкой не удалось. Это может быть связано с отсутствием или неправильным значением EndpointIdentity в EndpointAddress, используемом для создания канала . Проверьте EndpointIdentity, указанную или подразумеваемую , EndpointAddress правильно идентифицирует удаленную конечную точку.

Сервер привязки для службы выглядит следующим образом:

<bindings> 
     <wsHttpBinding> 
     <binding name="WSHttpBinding_IAccountManagement" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferPoolSize="524288" maxReceivedMessageSize="100065536" 
      messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
      allowCookies="false"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <reliableSession ordered="true" inactivityTimeout="00:10:00" 
      enabled="false" /> 
      <security mode="None" /> 
     </binding> 

... 

<services> 
     <service behaviorConfiguration="ABCD.Service.Service1Behavior" 
     name="ABCD.Service.AccountManagement"> 
     <endpoint address="" behaviorConfiguration="ValidationBehavior" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAccountManagement" 
      name="WSHttpBinding_IAccountManagement" contract="ABCD.Service.IAccountManagement"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" behaviorConfiguration="" binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 
     </service> 

и на стороне клиента:

<client> 
    <endpoint address="[site location]/AccountManagement.svc" 
    binding="wsHttpBinding" 
    contract="IAccountManagement" name="WSHttpBinding_IAccountManagement"> 
    </endpoint> 
</client> 

Обе службы находятся на одном сервере. Я не понимаю, почему я получаю эту ошибку, если у другой службы есть <security mode="None">?

+0

У вас есть сертификат безопасности для сервера? Является ли это подписью? Вы указываете адрес 'https'? У вас есть правильное имя пользователя и пароль? – ChrisF

+0

Да, есть сертификат, и да его сам подписали. (Это в тестовой среде.) Я не указываю https. Позвольте мне попробовать их и вернуться к вам - я не думал, что это проблема. –

+0

У вас есть 'wsHttpBinding', поэтому вы должны использовать' https', хотя это необязательно. Если вы находитесь в тестовой среде, вам, вероятно, придется добавить код для разрешения разрешающего соединения с тестовым сервером. – ChrisF

ответ

1

Как вы пытаетесь использовать безопасное связывание через wsHttpBinding, вам нужно будет подключиться к серверу через https и использовать код отладки, чтобы разрешить разрешающее подключение к вашему тестовому серверу.

Это потому, что у вас будет только самоподписанный сертификат, и https действительно строг, когда дело доходит до сертификатов безопасности.

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