| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Распределённые приложения и сеть > WCF сервис, создание клиента |
| Автор: namespace 6.10.2009, 12:19 | ||||||||||
| коротко об инфраструктуре: ISA сервер с 3-я сетевухами (интернет, ДМЗ, внутренняя) в ДМЗ находится IIS 7 создан WCF сервис, который хостится в WPF приложении вот его конфиг:
сам сервис работает во внутренней сети (на ISA для него есть соответствующее правило публикации протокола веб сервера) есть тестовый консольный клиент вот его конфиг:
код его самый простой
в таком варианте все прекрасно работает. Никак не могу сообразить как сделать веб-клиента для сайта. Сайт ASP.NET расположенный в ДМЗ (работает), кликаю на проекте веб сайта в солюшн эксплорер ПКМ -> Add Web Reference, указываю http://r.t.ru/ добаляю ссылку RSReference на нужной странице:
получаю ошибку: Сбой запроса с состоянием HTTP 407: Proxy Authentication Required т.е. насколько я понимаю веб клиент запускается на веб сервере ? в ДМЗ (IIS 7) и пытается соеденится с сервисом по http://r.t.ru/ а ISA его посылает ?, я добавил на ISA правило разрешаюшее обращатся из ДМЗ в интернет по адресу http://r.t.ru/, но картина таже, т.е. надо еще этого клиента научить работать через ISA ? вот конфиг сайта
|
| Автор: mihryak 6.10.2009, 15:24 |
| в клиентском binding'е попробуй изменить useDefaultWebProxy="false" на true |
| Автор: namespace 6.10.2009, 15:41 |
| в консольном клиенте который работает стоит false т.к. установлен MSFirewall Client он сам все умеет делать (т.е. работают все проги без указания прокси), а вот веб клиенту тоже надо так сделать, а я незнаю куда воткнуть в файл web.config сайта? |
| Автор: mihryak 6.10.2009, 16:34 | ||
| невнимательно прочитал получается, что студия не может создать для себя mex-клиента, чтобы сгенерировать классы для сервиса попробуй тогда выставить в web.config'е сайта в ноде configuration, по-моему, студия будет использовать конфиг проекта для генерации
если не поможет, попробуй ещё на самом сервисе настроить специальный binding для mex, у которого будет useDefaultWebProxy="true" Добавлено через 3 минуты и 14 секунд http://social.msdn.microsoft.com/forums/en-US/wcf/thread/83bafcd0-5bab-4cb9-96cf-a53ce132c7ab/ твоя проблема обсуждалась |
| Автор: namespace 6.10.2009, 21:01 |
| чудеса оставил на работе работающий сервис, прихожу домой создаю новый простейший веб сайт Add Service Reference ввожу адрес все Ок, запускаю сайт в студии все работает а теперь я думаю что дело в том что сайт на работе при создании был указан 2.0 фреймворк, в общем там в контекстном меню в солюшн эксплорере нет пункта Add Service Reference, а есть лишь Add Web Reference и создается какой то другой клиент, т.к. в нем нет например метода .Close() |
| Автор: namespace 8.10.2009, 13:08 |
| на сегодняшний день имею следующее: 1. консольный клиент запущенный на веб сервере - работает, 2. веб клиент расположеный на этом же компьютере где работает консольный клиент - не работает 3. при работе консольного клиента я в логах ISA вижу всю активность, однако когда работает веб клиент, то от сервера (на котором работает IIS7) нет исходящих запросов на http://r.t.ru/ есть ошибки в логах сервера: Последовательность событий: 20 Появление события: 1 Код подробностей события: 0 Сведения о приложении: Домен приложения: /LM/W3SVC/2/ROOT-1-128994687308225155 Уровень доверия: Full Виртуальный путь к приложению: / Путь к приложению: C:\www.t.ru\ Имя компьютера: DUB Сведения о процессе: Идентификатор процесса: 2928 Имя процесса: w3wp.exe Имя учетной записи: NT AUTHORITY\NETWORK SERVICE Сведения об исключении: Тип исключения: EndpointNotFoundException Сообщение об исключении: Прослушивание на http://r.t.ru/ не выполняла ни одна конечная точка, которая могла бы принять сообщение. Среди прочих причин это могло быть вызвано неправильным адресом или действием SOAP. Подробнее см. в описании InnerException (если имеется). Сведения о запросе: URL запроса: http://www.t.ru/RS.aspx Путь запроса: /RS.aspx Адрес узла пользователя: 192.168.1.1 Пользователь: Проверка подлинности: False Тип проверки подлинности: Имя учетной записи потока: NT AUTHORITY\NETWORK SERVICE Сведения о потоке: Идентификатор потока: 6 Имя учетной записи потока: NT AUTHORITY\NETWORK SERVICE Выполняется олицетворение: False Трассировка стека: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) в RSReference.IRS.WriteClient(String lastName, String firstName, String middleName, String seriesDoc, String numberDoc) в RSReference.RSClient.WriteClient(String lastName, String firstName, String middleName, String seriesDoc, String numberDoc) в RS.ButtonRSWrite_Click(Object sender, EventArgs e) в System.Web.UI.WebControls.Button.OnClick(EventArgs e) в System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) в System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) однако адрес http://r.t.ru/ пингуется, открывается стандартная страница о том что служба создана... я не понимаю как возникает EndpointNotFoundException когда я могу открыть данный юрл или консольный клиент с этой же машины прекрасно работает? и как IIS7 определяет недоступность конечной точки, когда даже не отправляет запрос на подключение (по логам ISA сервера)? |
| Автор: namespace 9.10.2009, 13:16 |
| проблема найдена Network Service, а именно от его имени работают пулы приложений IIS7 не имеет доступа к интернету, соответственно когда я для пула ставлю пользователя, например, Администратор, то все работает, но безопасность... в общем ищу решение... |
| Автор: namespace 9.10.2009, 21:15 |
| может кто-нибудь уже сталкивался с такой проблемой? что такого противозаконного в соединении с удаленным WCF сервисом, что надо запускать пул от имени Администратора? |
| Автор: namespace 12.10.2009, 08:23 |
| проблема решена!!! это ISA сервер мозги пудрил, удалил его клиент и в ручную настроил байдинг ...proxyAddress="http://gateway:8080" useDefaultWebProxy="false"... и все работает от стандартной Network Service |