У меня есть служба 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">
?
У вас есть сертификат безопасности для сервера? Является ли это подписью? Вы указываете адрес 'https'? У вас есть правильное имя пользователя и пароль? – ChrisF
Да, есть сертификат, и да его сам подписали. (Это в тестовой среде.) Я не указываю https. Позвольте мне попробовать их и вернуться к вам - я не думал, что это проблема. –
У вас есть 'wsHttpBinding', поэтому вы должны использовать' https', хотя это необязательно. Если вы находитесь в тестовой среде, вам, вероятно, придется добавить код для разрешения разрешающего соединения с тестовым сервером. – ChrisF