Недавно мне потребовался доступ к веб-сервису, созданному с использованием SOAP :: Lite. Его действительно грязно использовать, так как WSDL отсутствует, он не возвращает разумные типы данных и т. Д., Поэтому я начал использовать предоставленный пример кода.
С самого начала у меня возникли проблемы, время запросов истекло. Иногда часто, иногда реже, но никогда не бывает полностью без проблем. После использования Fiddler для отслеживания трафика и поиска кажется, что в SOAP :: Lite была / была ошибка, которая испортила заголовок Content-Length при работе с данными в кодировке UTF-8. Это кажется разумным, поскольку мой анализ указывает на тайм-ауты, вызванные тем, что клиент ожидает большего количества данных (Content-Length), в то время как сервер говорит, что это было сделано (реальные данные).
Так что теперь мне нужен способ противостоять этому ошибочному полю заголовка и либо:
- Укажите правильную длину содержимого или
- Заполните полезную нагрузку в соответствии с Content-Length
Проблема в том, что у меня никогда не было возможности использовать SoapExtension или любую другую модификацию, поскольку Invoke () в конечном итоге выдает IoException или WebException перед началом анализа. Кроме того, я полагаю, что WS не мой и довольно неизменный.
Я также попытался переопределить SoapHttpClientProtocol.GetWebResponse () для выполнения асинхронного запроса, но это тоже не помогло, так как я не мог получить ResponseStream до вызова HttpWebRequest.EndGetResponse () и тот всегда вызывал исключение.
У кого-нибудь есть идеи, как я мог бы подойти к этому?
ОБНОВЛЕНИЕ: к настоящему времени я также попробовал WCF и наткнулся на этот пост на MSDN - ответ не очень обнадеживает. По сути, это происходит слишком глубоко в сантехнике, чтобы быть доступным для пользовательского кода. Теперь я считаю, что лучше всего использовать скрипт Fiddler для исправления заголовка Content-Length, возможно, нетривиального, поскольку этот WS доступен только HTTPS.
/ Dan