Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / как запротоколировать обращения к web-сервису / 10 сообщений из 10, страница 1 из 1
17.09.2010, 00:48
    #36851454
как запротоколировать обращения к web-сервису
как на сайте, обращающемся к web-сервису - увидеть протокол вызова сервиса?

то есть сделать некое действие, подобное тому, какое делает wireshark - чтобы ТОЧНО увидеть свой сериализованный обьект?
мне нужно нечто, подобное событию prepender в ASP.NET, которое вызывается уже для полностью сформированной ASP.NET-странички перед отправкой ее на сервер

проблема в том, что web-сервис (к которому я обращаюсь) весьма сложен - ну это многие десятки полей - которые обязательны в трудноуловимых комбинациях плюс форматы данных под большим вопросом - ну допустим кодировки спецсимволов, количество нулей после запятой в числах и так далее - все это желательно было бы увидеть уже после SOAP-сериализатора

суппорт сервиса (в моем случае) отвечает на вопросы тоже только по предъявлению SOAP-протокола обращения к сервису

на локальной машине я бы мог запустить wireshark, но разработка ведется на одной машине, а показывать надо начальству на другой машине - когда сайт уже выложен на хостинг - и wireshark уже никак не запустить - с чужого хостинга идут запросы на чужой удаленный сервис
а начальство хочет видеть входные параметры забиваемые в мою софтину и когда происходит обращение к удаленному сервису - видеть протокол обращения к сервису (ну и проблема в том что в 99% случаев удаленный сервис отвечат - неверные параметры)

как увидеть мой SOAP обращения на моем сайте?
...
Рейтинг: 0 / 0
17.09.2010, 00:50
    #36851458
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запротоколировать обращения к web-сервису
вот, почти слово в слово
...
Рейтинг: 0 / 0
17.09.2010, 01:07
    #36851465
как запротоколировать обращения к web-сервису
спс, bured, разбираюсь

если не пойму - переспрошу
если не переспрошу - значит все получилось !
...
Рейтинг: 0 / 0
17.09.2010, 03:27
    #36851498
как запротоколировать обращения к web-сервису
ай, получилось отлично - спс за наколку bured
...
Рейтинг: 0 / 0
19.09.2010, 12:44
    #36854103
как запротоколировать обращения к web-сервису
Хм, однако в BeforeSendRequest все не настолько хорошо

общий шаблон кода для BeforeSendRequest я так и не подгадал нормальный
что-то мой код портит и уже возрата ответа от сервиса не происходит
может есть у кого-нибудь пример кода для BeforeSendRequest ?
...
Рейтинг: 0 / 0
20.09.2010, 10:07
    #36854771
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запротоколировать обращения к web-сервису
Быдло-Кодерможет есть у кого-нибудь пример кода для BeforeSendRequest ?
BeforeSendRequest демонстрирует подмену пользовательского значения параметра.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
public class <Инспектор> : IClientMessageInspector
{
    /// <summary>
    /// Модификация сообщения до запроса к серверу
    /// </summary>
    /// <param name="request"></param>
    /// <param name="channel"></param>
    /// <returns></returns>
    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
    {
        System.ServiceModel.Channels.Message newMessage = null;
    
        var msgbuf = request.CreateBufferedCopy(int.MaxValue);
        var tmpMessage = msgbuf.CreateMessage();
        var document = new XmlDocument();

        using (var dictreader = tmpMessage.GetReaderAtBodyContents())
        {
            document.Load(dictreader);
        }

        foreach (XmlElement node in document.ChildNodes)
        {
            foreach (XmlElement subnode in node.ChildNodes)
            {
                subnode.InnerText = int.MaxValue.ToString(); // Подменяем параметр запроса GetData(int)
            }
        }

        var stream = new MemoryStream();
        using (var writer = XmlWriter.Create(stream))
        {
            document.Save(writer);
            writer.Flush();
            stream.Position = 0;

            var reader = XmlReader.Create(stream);

            // Формирование нового сообщения
            newMessage = System.ServiceModel.Channels.Message.CreateMessage(request.Version, null, reader);
            newMessage.Headers.CopyHeadersFrom(request);
            newMessage.Properties.CopyProperties(request.Properties);
        }

        request = newMessage;
        return null;
    }
}
...
Рейтинг: 0 / 0
20.09.2010, 11:34
    #36854992
как запротоколировать обращения к web-сервису
спс за пример, буду пробовать применить его для своей ситуации
...
Рейтинг: 0 / 0
21.09.2010, 15:58
    #36858227
как запротоколировать обращения к web-сервису
сегодня продолжил заниматься этой задачей.
не понимаю, или я туплю или я копаю в другую строну

в примерах кода выше - я вижу обращения к сервисам ДО сериализации (или я чего-то не понимаю?) - а это мне вообще не нужно и не интересно

сериализатор настолько меняет мои параметры обращения, что на входе сериализатора мне вообще не интересно что-либо смотреть - мне требуется в поддержку передавать (и начальству показывать) ПОЛНОЕ обращение к сервису - в таком примерно виде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <SOAP-ENV:Body>
               <m:GetPaymentsResult ...
...
</SOAP-ENV
Можно ли в этих behavior получить полный протокол обращения к сервису (не только тело, но и конверт)?
...
Рейтинг: 0 / 0
21.09.2010, 16:49
    #36858481
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запротоколировать обращения к web-сервису
Быдло-Кодерв примерах кода выше - я вижу обращения к сервисам ДО сериализации (или я чего-то не понимаю?) - а это мне вообще не нужно и не интересно
Зачем тогда задавали вопрос:
Быдло-Кодерможет есть у кого-нибудь пример кода для BeforeSendRequest ?
Вы читали в справке, когда вообще выполняется IClientMessageInspector.BeforeSendRequest?

P.S. Читайте про IClientMessageInspector.AfterReceiveReply
...
Рейтинг: 0 / 0
21.09.2010, 19:58
    #36858846
как запротоколировать обращения к web-сервису
я подумал что в этих методах можно вычитать конверт
по ходу дела стало ясно, что наверное нельзя
тупо как-то - все говорят о трафик-инспекторе
такие же названия у методов
и bured так же ответил

какой же это инспектор?
это BodyInspector - но никак на TraficInspector
эти все методы никак не похожи на метод Prerender в ASP.NET
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / как запротоколировать обращения к web-сервису / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]