5

使用 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# 代码的行为吗?我希望能够以某种方式强制它在到达身体末端时停止,如果出现这种情况,请忽略此异常

4

2 回答 2

0

我不知道这会起作用,但是您是否尝试过将代码放在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");
}
于 2013-01-02T20:33:21.997 回答
0

从这里尝试解决方案(将 API 端点更改为 api.php):stackoverflow.com/a/36200828/1936722

基本上将 API url 更改为:
domain.com/index.php/api/v2_soap/index/wsdl/1

至:

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

于 2016-03-24T13:19:20.037 回答