문제

내 솔루션에 Windows Forms 프로젝트와 웹 서비스 프로젝트가 있고 웹 서비스를 호출하여 결과로 고객 개체를 반환하려고 합니다.문제는 반환 개체를 받으려고 할 때 변환할 수 없다는 오류가 발생한다는 것입니다.예를 들어, 내 웹 서비스의 서명은 다음과 같습니다.

Public Function GetDriverByID(ByVal DriverID As Integer) As Driver

그리고 이를 호출하는 데 사용하는 코드는 다음과 같습니다.

    Dim d As Driver = mywebserviceinstance.GetDriverByID(1)

하지만 다음과 같은 컴파일 시간 오류가 발생합니다(wsDrivers는 양식 프로젝트에 추가한 웹 참조의 이름입니다)."ProjectNamespace.Common.wsDrivers.Driver 유형의 값을 ProjectNamespace.Common.Driver로 변환할 수 없습니다."

이 "Common" 네임스페이스에는 Driver 클래스가 포함되어 있으며 웹 서비스의 반환 클래스가 왜 일반 "Driver"가 아니라 "wsDrivers.Driver"인지 잘 모르겠습니다. 다시.이 유형 불일치를 어떻게 처리할 수 있는지 아는 사람이 있나요?

편집하다:설명해주셔서 감사합니다. 실제로 무엇을 하는지 명확하게 보여줍니다.그러나 프록시 대신 실제 유형을 사용하도록 강제할 수 있는 방법이 있습니까(또는 "실제" 인스턴스와 "프록시" 인스턴스 간에 변환할 수 있는 방법이 있습니까), 아니면 그렇게 해야 합니까? 유선으로 속성을 보내기 전에 속성을 직렬화한 다음 반환 값을 수동으로 역직렬화하시겠습니까?

도움이 되었습니까?

해결책

이것은 실제로 매우 일반적입니다.무슨 일이 일어나고 있는지는 웹 서비스가 웹 서비스에서 사용되는 모든 유형의 정의를 정의했다는 것입니다.해당 웹 서비스에 대한 참조를 추가하면 네임스페이스의 하위 네임스페이스에 프록시 유형이 자동 생성됩니다.이것이 호출할 때 웹 서비스에 의해 반환되는 것입니다.

그러나 아마도 동일한 유형을 포함하는 웹 서비스가 별도로 수행하는 동일한 라이브러리를 참조하고 있을 수도 있습니다.그것은 Dim Driver를 사용할 때 예상되는 유형입니다.그렇기 때문에 불일치가 발생합니다.

다른 팁

VB.NET 또는 C# 프로젝트의 웹 서비스 참조는 참조할 수 있습니다. 어느 웹 서비스 유형이며 ASP.NET에서 제공하는 서비스에만 국한되지 않습니다.이것이 바로 Visual Studio가 웹 서비스에서 검색할 수 있는 각 개체에 대해 프록시 클래스를 만드는 이유입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top