Я создаю 2 службы для проекта, над которым я сейчас работаю.
1) простая служба запросов клиент-сервер, использующая basicHttpBinding
2) служба данных обратного вызова с использованием WSDualHttpBinding
с некоторым трюком я смог разместить как в IIS, так и в локальном браузере, а также на другом компьютере, который будет взаимодействовать с обоими сервисами: /Service.svc.
вот раздел app-config для службы данных обратного вызова
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="myBehavior">
<clientVia />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsDualHttpBinding>
<binding name="WSDualHttpBinding_IDataService">
<security mode="None">
<message negotiateServiceCredential="false" clientCredentialType="None" />
</security>
</binding>
</wsDualHttpBinding>
</bindings>
<client>
<endpoint address="http://<address>:50111/Service.svc/service"
binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IDataService" behaviorConfiguration="myBehavior"
contract="CallbackService.IDataService" name="WSDualHttpBinding_IDataService">
</endpoint>
</client>
</system.serviceModel>
basicHttpBinding выглядит очень похоже - только для другого порта
Я установил IIS для анонимной аутентификации. Пользователь IUSR, нет пароль ..
Первоначально он работал локально - но с удаленного компьютера я получил ошибки аутентификации ... поэтому я подправил еще немного - и теперь я получаю тайм-аут даже локально ... хотя Visual Studio взаимодействует со ссылкой на службу Обе службы просто отлично.
Как мне заставить службу "сотрудничать" снова
И я в своем уме - Любая помощь с благодарностью !?
Редактировать: первая проблема решена - локальная связь восстановлена
public ClientCallbacks myCallbacks=new ClientCallbacks();
public DuplexChannelFactory<IDataService> channelFactory { get; set; }
public IDataService channel;
public int connect() {
WSDualHttpBinding binding = new WSDualHttpBinding()
{ Name = "WSDualHttpBinding_IDataService" };
this.channelFactory = new DuplexChannelFactory<IDataService>(
mainForm.dbCommunication.myCallbacks,
binding,
new EndpointAddress("http://<address>:50111/Service.svc/service"));
this.channel = this.channelFactory.CreateChannel();
...
...
channel.AddListener(int-parameter); // announce new callback-partner
...
...
this.newListe = this.myCallbacks.receivedTaskList; //get Tasklist over callback
Это работает локально - но при удаленном вызове я получаю "новую" ошибку
System.ServiceModel.Security.SecurityNegotiationException:
The caller was not authenticated by the service. --->
System.ServiceModel.FaultException: The request for security token could not be satisfied
because authentication failed.
at System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault
(Message message, EndpointAddress target)
at System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody
(Message incomingMessage, SspiNegotiationTokenProviderState sspiState)
--- End of inner exception stack trace ---
И снова Я изо всех сил пытаюсь найти подсказку / решение. Я устанавливаю анонимную проверку подлинности IIS ... но кажется, что связь блокируется до того, как эта точка достигнута. Что мне нужно сделать, чтобы получить доступ к службе с удаленного компьютера?