2012-12-19 5 views
5

Magento 사이트에서 webservice를 호출 할 때 C# ASP.NET MVC 사용 :잘못된 HTTP 헤더 본문 값 처리?

때때로 Magento 사이트에서 잘못된 HTTP 헤더, 특히 실제 크기보다 큰 몸체 크기 헤더가 전송됩니다. 예를 들어 body-size = 1000이라고 할 수 있지만 본문은 999 바이트로만 구성됩니다. 헤더가 부정확 함에도 불구하고 시체가 정확하므로 여전히 처리 할 수 ​​있기를 바랍니다.

Connection closed by remote host 

자사가 1000 바이트를 읽으려고하기 때문에, 벽돌 쌓는 의미가 있지만 거기 :

는 지금은 그것은 예외가 발생

var invoiceInfo = _magentoService.salesOrderInvoiceInfo(sessionId, invoiceId); 

C#에서 그 응답을 읽으려고 할 때 . 그리고 그것은 악화하는, 몸을 읽는 코드는 .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])); 
} 

나는 젠토 사이트를 변경할 수 없습니다, 또는이 원인이 어떤 문제 해결 (그것의 제 3 자 웹 서버).

내 C# 코드의 동작을 변경하려면 무엇이 있습니까? 어떻게 든이 코드가 본문의 끝에 도달하면이 예외가 발생하면이 예외를 무시하도록 강제 할 수 있기를 원합니다.

+0

이것은 Magento 핵심 팀이 직접 해결하는 버그가 아니라 직접적인 도움이됩니다. 관련 : http://stackoverflow.com/questions/12792563/magento-soap-api-v2-response-content-length-incorrect – benmarks

+0

그래, 그것도 정말 짜증나는 버그 - 난 그냥 문제를 무시하는 방법을 찾고 있어요 어쨌든 시체를 읽는다. –

답변

0

이 코드는 작동하지만 코드를 넣으려고 했습니까? a 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"); 
} 
0

보십시오 용액 (API 엔드 포인트를 변경하면 api.php합니다) :
domain.com/index.php/api/v2_soap/index/wsdl/1

에 : stackoverflow.com/a/36200828/1936722

기본적에서 API URL을 변경

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