Расширение SoapHttpClientProtocol для исправления неисправного сервера Content-Length - PullRequest
4 голосов
/ 04 февраля 2011

Недавно мне потребовался доступ к веб-сервису, созданному с использованием SOAP :: Lite. Его действительно грязно использовать, так как WSDL отсутствует, он не возвращает разумные типы данных и т. Д., Поэтому я начал использовать предоставленный пример кода.

С самого начала у меня возникли проблемы, время запросов истекло. Иногда часто, иногда реже, но никогда не бывает полностью без проблем. После использования Fiddler для отслеживания трафика и поиска кажется, что в SOAP :: Lite была / была ошибка, которая испортила заголовок Content-Length при работе с данными в кодировке UTF-8. Это кажется разумным, поскольку мой анализ указывает на тайм-ауты, вызванные тем, что клиент ожидает большего количества данных (Content-Length), в то время как сервер говорит, что это было сделано (реальные данные).

Так что теперь мне нужен способ противостоять этому ошибочному полю заголовка и либо:

  1. Укажите правильную длину содержимого или
  2. Заполните полезную нагрузку в соответствии с Content-Length

Проблема в том, что у меня никогда не было возможности использовать SoapExtension или любую другую модификацию, поскольку Invoke () в конечном итоге выдает IoException или WebException перед началом анализа. Кроме того, я полагаю, что WS не мой и довольно неизменный.

Я также попытался переопределить SoapHttpClientProtocol.GetWebResponse () для выполнения асинхронного запроса, но это тоже не помогло, так как я не мог получить ResponseStream до вызова HttpWebRequest.EndGetResponse () и тот всегда вызывал исключение.

У кого-нибудь есть идеи, как я мог бы подойти к этому?

ОБНОВЛЕНИЕ: к настоящему времени я также попробовал WCF и наткнулся на этот пост на MSDN - ответ не очень обнадеживает. По сути, это происходит слишком глубоко в сантехнике, чтобы быть доступным для пользовательского кода. Теперь я считаю, что лучше всего использовать скрипт Fiddler для исправления заголовка Content-Length, возможно, нетривиального, поскольку этот WS доступен только HTTPS.

/ Dan

...