【发布时间】:2012-12-19 00:27:47
【问题描述】:
使用 C# ASP.NET MVC,在 Magento 网站上调用 web 服务时:
有时 Magento 站点会发送错误的 HTTP 标头,特别是 body-size 标头表示正文比实际大。例如它可能会说 body-size=1000,但 body 只包含 999 个字节。尽管标题不正确,但正文是正确的,所以我仍然希望能够处理它。
现在,当我尝试在 C# 中读取该响应时
var invoiceInfo = _magentoService.salesOrderInvoiceInfo(sessionId, invoiceId);
抛出异常:
Connection closed by remote host
这是有道理的,因为它试图读取第 1000 个字节但它不存在。更糟糕的是,读取正文的代码深埋在 .NET 框架中,所以我无法更改:
[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 网站,或修复导致此问题的任何问题(它是第 3 方网络服务器)。
我可以做些什么来改变我自己的 C# 代码的行为吗?我希望能够以某种方式强制它在到达正文的末尾时停止,并在出现这种情况时忽略此异常
【问题讨论】:
-
这似乎是 Magento 核心团队需要解决的错误,而不是直接帮助您。相关:stackoverflow.com/questions/12792563/…
-
是的,它也是一个非常烦人的错误 - 我正在寻找一种方法来忽略这个问题并阅读正文
标签: c# web-services magento http-headers