2008-09-25 4 views
2

타사 공급자가 호스팅하는 웹 서비스에 연결 중입니다. 내 프로젝트에서 웹 서비스에 서비스 참조를 추가했습니다. VS는 필요한 모든 참조 및 클래스를 생성했습니다. 나는 (익명 클라이언트 이름 및 방법)이 코드 조각을 연결하고있어Visual Studio 생성 서비스 참조에서 XML 네임 스페이스 문제가 발생했습니다.

는 :

:

using (var client = new Client()) 
{ 
    try 
    { 
     client.Open(); 
     var response = client.Method(...); 
     return response.Status; 
    } 
    catch (SoapException ex) 
    { 
     throw CreateServiceException(ex); 
    } 
    finally 
    { 
      client.Close(); 
    } 
} 

client.Open을()에 도달,이 메시지와 함께 예외가

네임 스페이스 '에서 상위 XML 요소'_return '이 고유 한 형식 을 참조합니다. System.Boolean 및 Service.Status. XML 속성을 사용하여 요소의 XML 이름 또는 네임 스페이스 또는 유형을 지정하십시오. 은 "_return"변수가

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)] 

로 장식되어

reference.cs에서, 나는 문제가 WSDL, 생성 된 서비스 참조 또는 내 코드에 있습니까 볼 수 있습니까?

업데이트 : 구식 웹 서비스로 서비스를 생성하면 문제가 해결됩니다. 나는 Sixto의 답을 지금 받아 들였다고 대답했지만, 문제를 일으킬 수있는 것이 무엇인지 그리고 서비스 생성기에 대한 매개 변수가 원래의 문제를 해결할 수 있는지 궁금합니다.

답변

1

서비스 참조를 만들 수 있었다면 WSDL이 유효합니다. 예외 메시지는 _return에 네임 스페이스/유형 모호성 문제가 있음을 알리는 것입니다. 생성 된 코드는 일부 컨텍스트에서는 부울로 사용되고 다른 컨텍스트에서는 Service.Status 유형으로 사용됩니다.

서비스 메서드를 호출하기 전에 ClientBase.Open 메서드를 호출하지 않습니다. 서비스 메서드를 호출 할 필요가 없기 때문에 호출하지 않습니다. 항상 Close & 메서드를 적절하게 호출합니다. Open 메서드는 기본적으로 클라이언트의 상태를 더 이상 구성 할 수 없도록 변경합니다. 상속 된 메서드이기 때문에 어떻게 생성 된 클래스에서 코드를 트리거하는지 모르겠습니다. 그 줄을 지우고 같은 예외가 생기는지 살펴 보겠습니다. 그렇지 않으면 아직 수행하지 않은 경우 _return이 사용 된 모든 장소에 대해 생성 된 코드를 검색하여 적절한 유형을 수동으로 정렬 할 수 있는지 확인하십시오. 각 컨텍스트마다 다른 이름이 필요할 수 있습니다.

WSDL 문제를 해결하는 또 다른 방법은 Web Reference (HTTP 기반 서비스라고 가정)를 생성하고 생성 코드가 예상대로 작동하는지 확인하는 것입니다. 제대로 작동하지 않으면 WCF 프록시 기능이 필요하지 않으면 ASMX 클라이언트로 이동하십시오.

관련 문제