문제

저는 아직 ASP.NET 세계에 익숙하지 않기 때문에 여기서는 크게 벗어나 있을 수 있지만 지금까지는 이것이 제가 아는 한 (제한된) 최선의 지식입니다!

표준 비즈니스 개체 "연락처"가 있다고 가정해 보겠습니다. 사업 네임스페이스.데이터베이스에서 연락처 정보를 검색하고 반환하는 웹 서비스를 작성합니다.그런 다음 해당 세부 정보를 요청하는 클라이언트 애플리케이션을 작성합니다.

이제 "Contact"를 가져와서 다음과 같은 마법을 수행하는 유틸리티 메서드도 만듭니다. Utils.BuyContactNewHat() 말하다.물론 Contact 유형을 취하는 것은 무엇입니까? Business.Contact.

그런 다음 클라이언트 애플리케이션으로 돌아가서 BuyContactNewHat 메서드에 대한 참조를 추가합니다. 유틸리티 네임스페이스가 있고 거기에 있습니다.그러나 다음과 같은 문제가 발생합니다.

Contact c = MyWebService.GetContact("Rob);
Utils.BuyContactNewHat(c); // << Error Here

반환 유형이 GetContact ~이다 MyWebService.Contact 그리고는 아니다 Business.Contact 예상대로.웹 서비스에 액세스할 때 실제로 WSDL에서 생성된 프록시 클래스에 대해 프로그래밍하기 때문에 이것이 왜 발생하는지 이해합니다.

그렇다면 이러한 유형의 불일치를 처리하는 "더 쉬운" 방법이 있습니까?나는 리플렉션을 사용하여 단순히 값을 한 개체에서 다른 개체로 전송하는 것보다 두 개체가 동일한 구조를 갖도록 하는 일반 변환기 클래스를 만드는 것을 고려하고 있었습니다.

도움이 되었습니까?

해결책

당신은 올바른 길을 가고 있습니다.프록시 개체의 데이터를 자신의 개체 중 하나로 다시 가져오려면 왼쪽-오른쪽 코드를 수행해야 합니다.즉.속성 값을 복사합니다.리플렉션을 사용하는 일반적인 방법이 이미 존재한다고 장담합니다.

어떤 사람들은 단지 네트워크를 통해 비즈니스 개체를 얻으려는 경우 웹 서비스(.net Remoting) 이외의 다른 것을 사용합니다.아니면 바이너리 직렬화를 사용할 것입니다.웹서비스를 이용하는 이유가 있을 것으로 예상되므로 속성 복사를 하셔야 할 것 같습니다.

다른 팁

실제로 WSDL이 제공하는 생성된 클래스를 사용할 필요는 없습니다.생성된 코드를 살펴보면 SOAP 요청을 제출하기 위해 일부 .NET 프레임워크 클래스를 호출하는 것뿐입니다.과거에는 해당 코드를 일반 .cs 파일에 복사하고 편집했습니다.특별히 이것을 시도하지는 않았지만 프록시 클래스 정의를 삭제하고 원래 클래스를 사용하여 SOAP 호출 결과를 수신할 수 없는 이유는 없습니다.이미 내부적으로 반사를 수행하고 있을 것입니다. 두 번 수행하는 것은 부끄러운 일인 것 같습니다.

프록시 코드 생성을 제어하는 ​​데 사용할 수 있는 Schema Importer Extension을 작성하는 것이 좋습니다.이 접근 방식을 사용하면 문제 없이 문제를 (예: 한 네임스페이스에서 다른 네임스페이스로 복사하거나 프록시 생성된 reference.cs 클래스를 수정하여 다음에 웹 참조를 업데이트할 때 대체하도록 하는 등) 문제를 (정상적으로) 해결할 수 있습니다.

주제에 대한 (매우) 좋은 튜토리얼은 다음과 같습니다.

http://www.microsoft.com/belux/msdn/nl/community/columns/jdruyts/wsproxy.mspx

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