使用C# ASP.NET MVC时,在调用Magento站点上的WebService时:
有时,Magento站点会发送错误的HTTP标头,特别是body-size标头,指示实际上比其实体大小更大。例如,它可能会说body-size = 1000,但实体仅由999个字节组成。尽管标头不正确,但实体是正确的,因此我仍然希望能够处理它。
现在,当我尝试在C#中读取该响应时:
我无法更改Magento网站,也无法修复由此引起的任何问题(这是第三方网络服务器)。
是否有什么我可以做以改变我的C#代码行为?我希望能够在它到达HTML body结束标签时强制其停止,并忽略这种情况下发生的异常。
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网站,也无法修复由此引起的任何问题(这是第三方网络服务器)。
是否有什么我可以做以改变我的C#代码行为?我希望能够在它到达HTML body结束标签时强制其停止,并忽略这种情况下发生的异常。