使用 C# ASP.NET MVC,在 Magento 站点上调用 Web 服务时:
有时,Magento 站点会发送错误的 HTTP 标头,特别是正文大小标头,表明正文比实际大小大。例如,它可能会说 body-size=1000,但主体仅包含 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# 代码的行为吗?我希望能够以某种方式强制它在到达主体末尾时停止,并在出现这种情况时忽略此异常