>

다음 코드를 사용하여 C # 앱을 Magento 1.6 (Magento SOAP V2를 통해)에 연결하려고합니다.

using (Mage_Api_Model_Server_Wsi_HandlerPortTypeClient proxy = new Mage_Api_Model_Server_Wsi_HandlerPortTypeClient())
{
  string sessionId = proxy.login("XXXXXXX", "XXXXXXXXXXX");
  Console.WriteLine(sessionId);
}

그리고 다음과 같은 오류가 발생합니다 :

Error in deserializing body of reply message for operation 'login'.

Fiddler를 사용하여 전송을 검사 한 결과입니다.

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento">
<SOAP-ENV:Body>
<ns1:loginResponseParam>
<result>fc094df96480dbbcdXXXXXXXXXXXXXXX</result>
</ns1:loginResponseParam>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

사용하고 있습니다 :

  • 마 젠토 V 1.6
  • 마 젠토 SOAP V2
  • WS-I 준수 (예 : 시스템/구성/서비스/Magento Core API/WS-I 준수가 예로 설정 됨)
  • 콘텐츠 유형 수정 : 콘텐츠 유형 오류 소비 .Net의 Magento 1.5 웹 서비스
  • VS 2010
  • .Net 3.5

이 문제를 어떻게 해결 (또는 디버깅) 할 수있는 아이디어가 있습니까?


  • 답변 # 1

    이것은 실제로 고치기 매우 쉽다. magento에 연결하는 데 사용하는 응용 프로그램의 web.config/app.config를 엽니 다

    이 줄을 찾으십시오

    <client>
          <endpoint address="http://YourWeb.com/index.php/api/v2_soap/index/" binding="basicHttpBinding" bindingConfiguration="BasicBinding" contract="Webstore.Mage_Api_Model_Server_Wsi_HandlerPortType" name="Mage_Api_Model_Server_Wsi_HandlerPort" />
    </client>
    
    
    바인딩 구성 및 바인딩 유형을 기록하십시오. 위의 basicHttpBinding/BasicBinding에서

    다음 구성 섹션을 찾으십시오.

    <bindings>
      <basicHttpBinding>
          <binding name="BasicBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="999999" maxBufferPoolSize="999999" maxReceivedMessageSize="999999" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
              <readerQuotas maxDepth="999999" maxStringContentLength="999999" maxArrayLength="999999" maxBytesPerRead="999999" maxNameTableCharCount="999999" />
              <security mode="None" />
          </binding>
      </basicHttpBinding>
    </bindings>
    
    

    여기에서 중첩을 알립니다. 바인딩->바인딩 유형->이름으로 바인딩 요소

    Visual Studio가 프록시를 생성 할 때 리더 할당량에 제공되는 기본값은 모든 데이터를 보유 할만큼 크지 않습니다. 위의 예에서와 같이 단순히 모두 늘리십시오.

  • 답변 # 2

    위의 모든 답변을 시도했지만 문제가 해결되지 않았습니다. 특정 경우에는데이터 멤버라는 것을 알았습니다. DateTime 유형으로 인해 문제가 발생합니다. 이전에는 데이터를

    2015-07-21T13 : 55 : 30.5962405 + 05 : 30->작동하지 않음

    그런 다음
    2015-03-29T09 : 30 : 47->작업

    일자가 어떻게 직렬화 할 수 없었는지

  • 답변 # 3

    전체 "Web Services == Soap == WS- *"개발 스택에 대해 매우익숙하지 않습니다. Magento 1.6이 API에 "WS-I Compliance"라는 것을 소개했습니다. V2 비누 URL을 사용해야하며

    System -> Configuration -> Magento Core Api -> General Settings -> WS-I Compliance
    
    
    <예>(Magento 시스템 관리자에서). 이것은 마 젠토에게 soap_wsi 를 사용하도록 지시 할 것입니다   soap_v2 대신 핸들러  매니저.

    에서 Magento Soap 요청을 처리하는 컨트롤러를 볼 수 있습니다.
    app/code/core/Mage/Api/controllers/V2/SoapController.php
    
    

    이것이 도움이 될지 모르겠지만 포함 시켰습니다

    WS-I 준수

    그리고 단어가 일치하여 외부에서 도움이 될 것입니다.

  • 답변 # 4

    Solo tienes que agregar la etiqueta readQuoatas dentro de mtomMessage

관련 자료

  • 이전 kubectl - Kubernetes의 포드간에 영구 볼륨 공유
  • 다음 C에서 문자가 아닌 포인터를 할당 해제하기 위해 free 사용