2012-08-02 2 views
3

Visual Studio 2010의 생성 된 webservice 프록시 클래스를 사용하여 .net 2.0 클라이언트에서 웹 서비스에 액세스합니다.테스트 및 프로덕션 웹 서비스 용 C# 프록시 클래스

이 모든 것은 정상적으로 작동하지만 문제는 webservice에 테스트 시스템 용 wsdl과 프로덕션 시스템 용 wsdl이 있다는 것입니다.

웹 서비스는 구조적으로 완전히 동일하지만 XML 네임 스페이스는 동일하지 않습니다.

내 코드에서 웹 서비스의 서비스 URL을 설정할 수 있으며 통신이 작동합니다 (SOAP 메시지를 로그 파일에 덤프하기 위해 TraceExtension을 사용합니다).하지만 직렬화 해제와 관련하여 예외가 발생합니다.

[(네임 스페이스 = "여기 testservice의 URL") System.Xml.Serialization.SoapTypeAttribute] :

는 내가 테스트 시스템에서 WSDL 파일을 프록시 클래스를 생성하고이 같은 여러 속성을 추가하기 때문에이 생각

물론 프로젝트를 복사하여 웹 서비스를 프로덕션 서비스에 추가 할 수는 있지만 코드가 중복되어 미래의 두 프로젝트에서 향후 변경해야합니다. 물론 오류가 발생하기 쉽습니다. ,

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://PRODUCTION_SERVER_NAME/ProjectService"> 
    <SOAP-ENV:Body> 
     <ns1:loginResponse xmlns:ns1="http://TEST_SERVER_NAME/ProjectService"> 
      <login_result xsi:type="tns:LoginResult"> 
       <errorcode xsi:type="xsd:integer">0</errorcode> 
       <errortext xsi:type="xsd:string">Successfully logged in</errortext> 
       <logincode xsi:type="xsd:string">wOmdlZMkIXVL4H8uTGU69hgpNsK1Cz3Q</logincode> 
      </login_result> 
     </ns1:loginResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

당신이 볼 수 있듯이 :

여기
<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://TEST_SERVER_NAME/ProjectService"> 
    <SOAP-ENV:Body> 
     <ns1:loginResponse xmlns:ns1="http://TEST_SERVER_NAME/ProjectService"> 
      <login_result xsi:type="tns:LoginResult"> 
       <errorcode xsi:type="xsd:integer">0</errorcode> 
       <errortext xsi:type="xsd:string">Successfully logged in</errortext> 
       <logincode xsi:type="xsd:string">wF3N5vdPsueL0aYlp41i6B8VTZEJztqx</logincode> 
      </login_result> 
     </ns1:loginResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

가 생산 웹 서비스에서 동일한 응답입니다 :

다음은 테스트 시스템 서비스에 대한 로그인 메소드를 호출하기위한 작업 반응이다 xmlns : ns1 속성은 항상 http://TEST_SERVER_NAME/ProjectService 인 반면 xmlns : tns 속성은 두 응답 만 다릅니다 (테스트 시스템의 WSDL과 함께 생성 된 프록시 클래스에서 오는 것 같습니다). logincode는 인증 토큰이며 항상 다를 것입니다.

이 문제에 대한 다른 해결책이 있습니까?

+0

행운이 문제를 해결? – user324365

답변

1

리얼 파티에 늦게, 그러나 나는이 문제를 해결하기 위해 처리기 지시문을 사용 : 두 참조 웹 참조로 프로젝트에 추가되어 있는지 확인 및 변경

#define SANDBOX //Change from sandbox to production to switch between both systems. 

#if SANDBOX 
    using NetSuite.com.netsuite.sandbox.webservices; 
#endif 

#if PRODUCTION 
    using NetSuite.com.netsuite.webservices; 
#endif 

당신의 SANDBOX 생산 웹 서비스를 사용하기 위해 PRODUCTION에 샌드 박스의 경우 SANDBOX입니다.

이것은 아마도 가장 우아한 해결책은 아니지만 빠르고 빠르며 내가 필요한 것을 정확하게 수행합니다.

관련 문제