Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WCF сервис, создание клиента, консольный работает, а веб не получается 
V
    Опции темы
namespace
  Дата 6.10.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



коротко об инфраструктуре: ISA сервер с 3-я сетевухами (интернет, ДМЗ, внутренняя) в ДМЗ находится IIS 7
создан WCF сервис, который хостится в WPF приложении вот его конфиг:
Код

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="RS.RSBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="RS.RSBehavior"
                name="RS.RS">
                <endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding"
                    contract="RS.IRS">
                    <identity>
                        <dns value="r.t.ru" />
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://r.t.ru:80/" />
                    </baseAddresses>
                </host>
            </service>
        </services>
        <bindings>
            <wsHttpBinding>
                <binding name="wsHttpEndpointBinding">
                    <security mode="None">
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>        
    </system.serviceModel>
    
</configuration>

сам сервис работает во внутренней сети (на ISA для него есть соответствующее правило публикации протокола веб сервера)
есть тестовый консольный клиент вот его конфиг:
Код

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IRS" 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="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="false"
                    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">
                        <transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            algorithmSuite="Default" establishSecurityContext="true" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://r.t.ru/" binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_IRS" contract="RSReference.IRS"
                name="WSHttpBinding_IRS">
                <identity>
                    <dns value="r.t.ru" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
    
</configuration>

код его самый простой
Код

...
RSClient client = new RSClient();
client.Open();
RSResult result = client.WriteClient(lastName, firstName, middleName, sD, nD);
Console.WriteLine("\tсообщение: {0}", result.Message);
...


в таком варианте все прекрасно работает. Никак не могу сообразить как сделать веб-клиента для сайта. Сайт ASP.NET расположенный в ДМЗ (работает), кликаю на проекте веб сайта в солюшн эксплорер ПКМ -> Add Web Reference, указываю http://r.t.ru/ добаляю ссылку RSReference
на нужной странице:
Код

protected void Button1_Click(object sender, EventArgs e)
    {
        RSReference.RS client = new RSReference.RS();
        RSReference.RSResult serviceResult = client.WriteClient(TextBoxLastName.Text, TextBoxFirstName.Text, TextBoxMiddleName.Text, TextBoxSD.Text, TextBoxND.Text);
        TextBoxResult.Text = serviceResult.Message;
    }


получаю ошибку: Сбой запроса с состоянием HTTP 407: Proxy Authentication Required
т.е. насколько я понимаю веб клиент запускается на веб сервере ? в ДМЗ (IIS 7) и пытается соеденится с сервисом по http://r.t.ru/ а ISA его посылает ?, я добавил на ISA правило разрешаюшее обращатся из ДМЗ в интернет по адресу http://r.t.ru/, но картина таже, т.е. надо еще этого клиента научить работать через ISA ?
вот конфиг сайта
Код

<?xml version="1.0"?>
<!-- 
    Note: As an alternative to hand editing this file you can use the 
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments usually located in 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration>
    <appSettings>
    <add key="RSReference.RS" value="http://r.t.ru/"/>
    </appSettings>
    <connectionStrings/>
    <system.web>
        
        <compilation debug="false">
        </compilation>
        
        <authentication mode="Windows"/>
        
    </system.web>
</configuration>



PM MAIL   Вверх
mihryak
Дата 6.10.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



в клиентском binding'е попробуй изменить useDefaultWebProxy="false" на true
PM MAIL ICQ   Вверх
namespace
Дата 6.10.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



в консольном клиенте который работает стоит false т.к. установлен MSFirewall Client он сам все умеет делать (т.е. работают все проги без указания прокси), а вот веб клиенту тоже надо так сделать, а я незнаю куда воткнуть в файл web.config сайта?

Это сообщение отредактировал(а) namespace - 6.10.2009, 15:54
PM MAIL   Вверх
mihryak
Дата 6.10.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



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

попробуй тогда выставить в web.config'е сайта в ноде configuration, по-моему, студия будет использовать конфиг проекта для генерации
Код

<system.net>
  <defaultProxy
    useDefaultCredentials="true" >
  </defaultProxy>
</system.net>


если не поможет, попробуй ещё на самом сервисе настроить специальный binding для mex, у которого будет useDefaultWebProxy="true"

Добавлено через 3 минуты и 14 секунд
тут твоя проблема обсуждалась
PM MAIL ICQ   Вверх
namespace
Дата 6.10.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



чудеса оставил на работе работающий сервис, прихожу домой создаю новый простейший веб сайт Add Service Reference ввожу адрес все Ок, запускаю сайт в студии все работает
а теперь я думаю что дело в том что сайт на работе при создании был указан 2.0 фреймворк, в общем там в контекстном меню в солюшн эксплорере нет пункта Add Service Reference, а есть лишь Add Web Reference и создается какой то другой клиент, т.к. в нем нет например метода .Close()
PM MAIL   Вверх
namespace
Дата 8.10.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



на сегодняшний день имею следующее:
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 - 8.10.2009, 13:09
PM MAIL   Вверх
namespace
Дата 9.10.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



проблема найдена Network Service, а именно от его имени работают пулы приложений IIS7 не имеет доступа к интернету, соответственно когда я для пула ставлю пользователя, например, Администратор, то все работает, но безопасность...
в общем ищу решение...
PM MAIL   Вверх
namespace
Дата 9.10.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



может кто-нибудь уже сталкивался с такой проблемой? что такого противозаконного в соединении с удаленным WCF сервисом, что надо запускать пул от имени Администратора? smile 
PM MAIL   Вверх
namespace
Дата 12.10.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



проблема решена!!! это ISA сервер мозги пудрил, удалил его клиент и в ручную настроил байдинг
...proxyAddress="http://gateway:8080" useDefaultWebProxy="false"...
и все работает от стандартной Network Service
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.