c# - 处理不正确的 HTTP header 正文大小值?

标签 c# web-services magento http-headers

使用 C# ASP.NET MVC,在 Magento 网站上调用网络服务时:

有时 Magento 站点会发送错误的 HTTP header ,特别是 body-size header ,表示正文比实际大。例如,它可能说 body-size=1000,但正文仅包含 999 个字节。尽管 header 不正确,但正文是正确的,所以我仍然希望能够处理它。

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

最佳答案

我不知道这是否可行,但您是否尝试过将代码放在 try/catch block 中并忽略异常? 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");
}

关于c# - 处理不正确的 HTTP header 正文大小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943733/

相关文章:

c# - 从 React Native 访问 ASP.NET Core 2.1 Web API 时“无法验证 HTTPS 连接”

asp.net - 为 Web 服务配置 SSL

git - 防止将某些提交/代码 merge 到 master 中

magento - bundle 产品作为单独的订单项添加到购物车

c# - 通过正则表达式替换查询字符串中的连字符

c# - XML 数据库与 SQL Server 数据库

c# - 是否可以将 Debug.Assert 设置为只抛出异常而不是在 C# 中弹出窗口?

c# - 关于 web service 和 asp.net 的问题

web-services - Angular2 发布到 Web 服务

php - 保存后 Magento 配置没有改变