WedX - журнал о программировании и компьютерных науках

Работа с неправильными значениями размера тела заголовка HTTP?

Использование C# ASP.NET MVC при вызове веб-сервиса на сайте Magento:

Иногда сайт Magento отправляет неправильные заголовки HTTP, в частности, заголовок размера тела, говорящий о том, что тело больше, чем оно есть на самом деле. Например, может быть указано, что body-size=1000, но тело состоит только из 999 байт. Несмотря на неверный заголовок, тело правильное, поэтому я все же хотел бы иметь возможность его обработать.

Теперь, когда я пытаюсь прочитать этот ответ на С#

var invoiceInfo = _magentoService.salesOrderInvoiceInfo(sessionId, invoiceId);

Выдает исключение:

Connection closed by remote host

Что имеет смысл, потому что он пытается прочитать 1000-й байт, но его там нет. И, что еще хуже, код, который читает тело, скрыт глубоко внутри .NET framework, поэтому я не могу его изменить:

[System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:Mage_Api_Model_Server_V2_HandlerAction", RequestNamespace="urn:Magento", ResponseNamespace="urn:Magento")]
[return: System.Xml.Serialization.SoapElementAttribute("result")]
public salesOrderInvoiceEntity salesOrderInvoiceInfo(string sessionId, string invoiceIncrementId) {
    object[] results = this.Invoke("salesOrderInvoiceInfo", new object[] {
                sessionId,
                invoiceIncrementId}); // exception thrown here
    return ((salesOrderInvoiceEntity)(results[0]));
}

Я не могу изменить сайт Magento или исправить любую проблему, вызывающую это (это сторонний веб-сервер).

Могу ли я что-нибудь сделать, чтобы изменить поведение моего собственного кода C#? Я хотел бы иметь возможность каким-то образом заставить его остановиться, когда он достигнет конца тела, и игнорировать это исключение, если возникнет этот случай.


  • Это, безусловно, похоже на ошибку, которую должна решить основная команда Magento, а не то, что это поможет вам напрямую. Связанный: stackoverflow. ком/вопросы/12792563/ 19.12.2012
  • Да, это тоже очень раздражающая ошибка - я ищу способ просто игнорировать проблему и все равно читать тело. 20.12.2012

Ответы:


1

Я не знаю, сработает ли это, но пробовали ли вы поместить код в блок try/catch и игнорировать исключение? results == null?

Так:

[System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:Mage_Api_Model_Server_V2_HandlerAction", RequestNamespace="urn:Magento", ResponseNamespace="urn:Magento")]
[return: System.Xml.Serialization.SoapElementAttribute("result")]
public salesOrderInvoiceEntity salesOrderInvoiceInfo(string sessionId, string invoiceIncrementId) {
    try
    {
        object[] results = this.Invoke("salesOrderInvoiceInfo", new object[] {
                    sessionId,
                    invoiceIncrementId}); // exception thrown here
    }
    catch(Exception) {}

    if(results != null && results.Count() > 0) return ((salesOrderInvoiceEntity)(results[0]));

    throw new Exception("results is null");
}
02.01.2013

2

Попробуйте решение отсюда (изменив конечную точку API на api.php): stackoverflow.com/a/36200828/1936722

В основном измените URL-адрес API с:
domain.com/index.php/api/v2_soap/index/wsdl/1

to:

domain.com/api/v2_soap/?wsdl=1

24.03.2016
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]