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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указать пространство имен, веб-служба 
:(
    Опции темы
WERITAS
Дата 27.1.2011, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



Добрый день. Пишу агента для веб-службы используя WCF. Когда на агенте выполняется метод GetProfiles, то в ответ приходит сообщение от веб-службы об ошибке. Я сравнил soap-запросы, которые отправляет мой агент и другой агент, который умеет с этой веб-службой работать.
Запрос моего агента:
Код

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">            
        <GetProfiles xmlns="http://www.onvif.org/ver10/media/wsdl"/>
    </s:Body>
</s:Envelope>


Запрос рабочего агента:
Код

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <GetProfiles xmlns="http://www.onvif.org/ver10/media/wsdl" />
    </s:Body>
</s:Envelope>


Отличается всего в одну строчку "<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">". 

Код моего агента совсем небольшой:
Код

            BasicHttpBinding binding = new BasicHttpBinding();
            EndpointAddress endPoint = new EndpointAddress("http://192.168.137.103:80/onvif/services");
            
            MediaClient mediaClient = new MediaClient(binding, endPoint);   // Здесь MediaClient - это прокси-класс для агента веб-службы.
            Profile[] profiles = mediaClient.GetProfiles();


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



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
jonie
Дата 27.1.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



у вас похоже используется SOAP 1.1 (basicHttpBinding по умолчанию), когда сервис ожидает SOAP 1.2 (wsHttpBinding  по умолчанию). Укажите wsHttpBinding как биндинг.

Это сообщение отредактировал(а) jonie - 27.1.2011, 16:36


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
WERITAS
Дата 28.1.2011, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



Поменял тип привязки, значение имени пространства имен изменилось, но "лучше" от этого не стало. Теперь агентом  отправляется сообщение:
Код

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" 
            xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
        <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action>
        <a:MessageID>urn:uuid:dd58ab63-c698-46f6-a097-4a2668f8c7bd</a:MessageID>
        <a:ReplyTo>
            <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
        </a:ReplyTo>
        <a:To s:mustUnderstand="1">http://192.168.137.103/onvif/services</a:To>
    </s:Header>
    <s:Body>
        <t:RequestSecurityToken Context="uuid-10b755c7-42ee-48d1-82af-f98f52be40f9-1" 
                                xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">
            <t:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</t:TokenType>
            <t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType>
            <t:KeySize>256</t:KeySize>
            <t:BinaryExchange ValueType="http://schemas.xmlsoap.org/ws/2005/02/trust/spnego" 
                              EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">TlRMTVNTUAABAAAAt4IY4gAAAAAAAAAAAAAAAAAAAAAGAbAdAAAADw==</t:BinaryExchange></t:RequestSecurityToken></s:Body></s:Envelope>


которое ничего общего не имеет с первым  smile 



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
jonie
Дата 28.1.2011, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



WERITAS, ну это не полное сообщение. Еще секьюрите поставьте в none, если вас это так напрягает (парсер на стороне сервера не должно - он должен пропускать что непонимает как мне помнится).


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
WERITAS
Дата 28.1.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



Проблему решил поставив вместо BasicHttpBinding  CustomBinding, осталось только последнее - как сделать так, чтобы в отправляемом POST-запросе добавлялся заголовок аутентификации типа "Authorization: Basic cm9vdDoxMjM0"?

Пробовал по-разному, ни пока не работает никак. Вот мой код:
Код

            HttpTransportBindingElement httpTransportBindingElement = new HttpTransportBindingElement();
            httpTransportBindingElement.AuthenticationScheme = AuthenticationSchemes.Basic;
            httpTransportBindingElement.KeepAliveEnabled = false;

            CustomBinding binding = new CustomBinding(httpTransportBindingElement);

            EndpointAddress endPointAddress = new EndpointAddress("http://192.168.137.103:80/onvif/services");
            
            MediaClient mediaClient = new MediaClient(binding, endPointAddress);
            mediaClient.ClientCredentials.UserName.UserName = "root";
            mediaClient.ClientCredentials.UserName.Password = "1234";

            try
            {
                Console.WriteLine("Sending 'GetProfiles'");
                
                Profile[] profiles = mediaClient.GetProfiles();
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
            }

            mediaClient.Close();



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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