2010-06-24 3 views
0

유형 (foo)을 반환하는 함수가있는 webservice가 있습니다. 2.0에서 생성 된 프록시를 통해 .NET에서이 웹 서비스를 사용하면 생성 된 프록시에 foo라는 클래스가 생성됩니다. 만약 내가 그 클래스 (foo) webservice에 의해 사용되고 DLL을 포함하는 사용자 정의 프록시 클래스를 만드는 대신 클래스를 사용하는 방법이 무엇입니까? 나는 리모팅이하는 것과 비슷한 것을 찾고있다. 그러나 리모팅은 아니다.DLL을 통해 직접 webservice 유형 사용

답변

0

나는이 일을 3 가지 방법 본 적이 :

  1. 하는 비주얼 스튜디오는 프록시를 생성 한 후 손으로, DLL의 전체 클래스 이름에 프록시의 클래스를 변경하자를. 작동하지만 프록시를 업데이트 할 때마다 다시해야합니다. 게다가 정말 더러워 요, 그렇죠?
  2. 프록시의개체를 "실제"개체로 바로 복사하는 일반적인 클래스/메서드를 리플렉션을 사용하십시오. 작품,하지만 당신은 데이터 계약 (당신의 데이터 클래스)로 DLL을 참조하는 코드 세대 프록시를 만드는 그들에게 대신 을 사용할 수 있습니다
  3. 사용 WCF, offtrade 약간의 성능 물론 의.
0

여기 중요한 문제는 프록시를 생성하는 것입니다. 일반적으로 웹 서비스에 대한 두 가지 접근 방식을 사용했습니다.

1) 메서드를 노출하는 기존 서비스와 클라이언트는 메서드를 사용하기 위해 Visual Studio에서 프록시를 생성합니다.
2) 요청/응답 서비스. 노출 된 "서비스"가 더 많은 통과 및 수행되는 "작업"이 서비스와주고받는 개체에 캡슐화됩니다. 이러한 작업은 서버와 클라이언트 모두에있는 공유 라이브러리에 있습니다.

나는 이전에 종종 같은 문제를 겪었으며 실제로 솔루션이 있다고 생각하지 않습니다. 적어도 Visual Studio가 좋아할만한 것은 하나도 없습니다. 생성 된 프록시를 수동으로 수정하여 다른 클래스를 사용할 수도 있지만 다시 생성 할 때마다이 단계를 반복해야합니다. 반대로 Visual Studio 외부에서 CodeSmith (이전 버전은 무료이지만 .NET 1.1에 따라 다름)을 생성 할 수 있습니다. 프록시 용 템플릿을 만들고 IDE 외부에서 단계적으로 다시 생성해야합니다. 언제든지 업데이트해야합니다.

그러나 나는 후자에 대해 좋은 도구를 추천 할 수 있으며 이는 Agatha 프로젝트입니다. 그것은 수행되고있는 "행동"에서 "서비스"를 분리하는 접근법을 취하고 공유 라이브러리의 접근을 매우 쉽게 만듭니다. 이러한 재 구조화는 계획에 따라 작업중인 프로젝트에 대한 질문에서 벗어날 수 있지만 향후 프로젝트를 위해 반드시 탐색해야 할 사항입니다.

+0

Agatha 프로젝트는 흥미로운 내용이지만, 일반적인 방법으로 RequestData 및 ResponseData 클래스를 사용하여 처리해야했습니다 (webservice를 통하지 않아도 더 많은 의미가 있음) 그 모델의 팬이 아닙니다. –

0

자신 만의 프록시 클래스를 작성할 수도 있고 생성 된 Foo 클래스의 인스턴스를 가져 와서 데이터를 적절하게 복사하는 Foo 클래스의 생성자를 구현할 수도 있습니다.

+0

기본 DLL에 생성자를 추가하고 싶지는 않겠지 만 그렇게되는 것 같습니다. 불행히도이 메서드를 사용하면 해당 웹 서비스를 호출 한 모든 프로젝트에 대해 새로운 변환 함수 집합을 만들어야한다는 것을 의미합니다. –

+0

새 생성자를 추가하지 않으려면 기본 생성자를 사용하고 프록시 클래스의 데이터를 도메인 객체로 복사하는 확장 메서드를 구현할 수 있습니다. –

관련 문제