Доступ к службе WCF из клиентского приложения, когда пользователь находится за прокси - PullRequest
6 голосов
/ 17 февраля 2011

У меня есть служба WCF, размещенная на сервере.Клиентское приложение обращается к службе на компьютере с Windows 7.На Windows 7 есть два пользователя.Приложение Windows устанавливается через Clickonce, поэтому отдельный экземпляр будет доступен для двух пользователей.

Когда пользователь A обращается к службе через приложение Winforms, она работает нормально, но когда пользователь B на той же машине пытается получить к нему доступ, выдает следующее исключение: Исключение связи: удаленный сервер возвратил неожиданный ответ: (417) Ожидание не удалось.

Server stack trace: 
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Myapp.ServiceProxy.IMyAPIService.GetData(String userName, String passWord)

Что может быть причиной работы для одного пользователя, а не для другого?Я что-то упускаю?

ОБНОВЛЕНИЕ : Хотя я нашел решение (см. Мой ответ ниже) для этой проблемы, но все же хотел знать, что следует делать в этом сценарии.Как говорится в MSDN article , пользователь блокирует отправку большого объема данных на сервер, но не упоминает о каком-либо ограничении в этом?

Какое ограничение может отправлять клиент данных?сервер?Есть ли лучший подход для подключения службы WCF от клиента, который находится за прокси?

1 Ответ

10 голосов
/ 18 февраля 2011

Наконец я взломал его.Это происходит потому, что пользователь находится за прокси.

Следующие настройки в app.config решили проблему:

<system.net>
   <settings>
      <servicePointManager expect100Continue="false" />
   </settings>
</system.net>

Но это по-прежнему проблема для загрузки большого файла, сейчас нужно найти решение для того же.

Подробнее об этом в MSDN , статья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...