JK.*_*JK. 5 c# web-services magento http-headers
在Magento站点上调用Web服务时,使用C#ASP.NET MVC:
有时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网站,或修复导致此问题的任何问题(它是第三方网络服务器).
有什么办法可以改变我自己的C#代码的行为吗?我希望能够以某种方式迫使它在到达身体末端时停止并且如果出现这种情况则忽略此异常
我不知道这是否可行,但是您是否尝试过将代码放在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");
}
| 归档时间: | 
 | 
| 查看次数: | 277 次 | 
| 最近记录: |