2009-03-05 3 views
0

.Net 3.5 ASMX 웹 서비스에 다음 요청을 보냅니다. ASMX WebServices 문제

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
     <Login xmlns="http://tempuri.org/" id="o0" SOAP-ENC:root="1"> 
      <password xsi:type="xsd:string">1234</password> 
      <userName xsi:type="xsd:string">Developer</userName> 
     </Login> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope>  
디버깅에


, 웹 서비스, 우리는 웹 방법 (로그인 및 방법)에 사용할 수있는 parametr 값이 null 것을 찾을 수 있습니다. 그러나 암호와 사용자 이름에서 xsi : type = "xsd : string"특성을 제거하면 모든 것이 작동합니다.
네임 스페이스 xsd는 http://www.w3.org/2001/XMLSchema을 가리키며 유효합니다.
.Net에서 응답을 deserialize 할 수없는 이유는 무엇입니까? 왜 예외를 던지지 않습니까? BTW : 서비스 정의 별칭이 http://www.w3.org/2001/XMLSchema이고 "s"입니다. 그게 문제가 될 수 있을까요?

친절한 답변,

+0

은 스택 오버플로에서 가독성을 위해 추가 된
태그이거나 봉투의 일부입니까? – RuudKok

+0

가독성을 위해 추가되었습니다. –

답변

1

.NET 직렬 변환기는 기본 스키마를 사용하여 항목을 deserialize합니다. xsi : type 속성을 지정하면 기본적으로 스키마 계약이 해제됩니다.

BTW. http://tempuri.org/을 사용하지 말고 직접 URI를 만드십시오.

+0

Thx. 그런데 왜 깨지는가? 우리는 http://www.w3.org/2001/XMLSchema를 가리키는 xsd를 지정했습니다. 그래서 이것은 유효해야합니다. –

+0

http://www.w3.org/2001/XMLSchema가 귀하의 스키마가 아니며, 직렬화가 이해해야합니다. 스키마는 기본 xmlns 아래에 있어야합니다 (http://tempuri.org/). – DreamSonic

1

ASMX 서비스가 [SoapRpcService] 속성으로 장식되어 있습니까? 그렇지 않으면 문서/리터럴 서비스이며 XML을 해당 형식으로 사용하지 않습니다.

이 XML은 어떻게 전송 되었습니까? 손으로 지었습니까? "service.asmx? WSDL"에서 파생 된 WSDL을 기반으로 작성된 Java 클라이언트가 전송 했습니까?

+0

예, k- 비누로 보내졌습니다. Apprently 우리는 잘못된 k-soap 빌드를 사용하고 최신 빌드를 사용하도록 코드를 업데이트했습니다. 이것은 문제를 해결했습니다. –