2009-09-21 9 views
0

WCF가 관련된 서버 및 클라이언트 프로젝트에 필요한 지원 클래스 집합을 추가/포함/참조하는 방법을 혼동합니다. 내 C# 솔루션에서일반적인 WCF 개체 지원 클래스

내가 가진 :

  • 서버 프로젝트 서버 유형 물건
  • 네트워크
  • 은 WCF 도서관 포함하는 클래스 정의 데이터를 전달 GUI 형태의 물건을 클라이언트 프로젝트를하고는
  • 객체

서버 프로젝트는 WCF 라이브러리를 포함하기 위해 일반적인 참조를 사용합니다. 클라이언트 프로젝트는 WCF 라이브러리에 대한 서비스 참조를 사용합니다.

제 문제는 WCF 라이브러리에 포함 된 개체 정의를 사용하는 서버 및 클라이언트 프로젝트에 필요한 몇 가지 유틸리티 클래스가 있다는 것입니다. 나는 서버와 클라이언트 프로젝트에이 클래스들을 두 개 (동일한) 복사하고 싶지 않다. 나는 단지 하나의 복사본 만 유지하는 것을 선호한다. 클래스 라이브러리를 사용하는 것이 좋겠지 만 참조 작업은 어떻게됩니까? 이 새 클래스 라이브러리는 WCF 라이브러리에 대한 표준 참조를 가지며 서버 프로젝트와 클라이언트 프로젝트 모두이 새 클래스 라이브러리를 차례로 표준 참조해야합니다. 그러나 이제는 클라이언트 프로젝트에 WCF 라이브러리에 포함 된 데이터 개체 클래스에 대해 서로 다른 두 가지 정의가 정의되어 있지 않습니까? 이 유틸리티 클래스들을 어떻게 더 포함시켜야합니까?

답변

1

서비스 참조 방법을 사용하면 초기 WCF 일에서의 생활을 단순화하는 코드를 생성하기 때문에 WCF를 사용하는 초기 단계에서 약간의 시간이 소요됩니다. 그러나 WCF 사용에 익숙해지고 서비스 참조가 실제로 무엇을하는지 알게되면 서비스 참조 방법이 때로는 도움이 아닌 방해가된다는 것을 알게됩니다.

예를 들어, 필자의 경우 WCF 서비스가 세 가지 프로젝트 (두 개의 C# 프로젝트와 한 개의 관리되는 C++ 프로젝트)에서 사용되었습니다. WCF 서비스 인터페이스를 업데이트 할 때마다이 세 가지 프로젝트 각각에서 서비스 참조를 다시 생성해야했습니다. 그것은 나를 위해 두통이되었습니다.

또한 서비스 참조 접근법은 DataContract 클래스의 구조 만 처리하며 동작은 다루지 않습니다. 따라서 서버 측의 DataContract 클래스에 편의 메서드를 추가하면 메타 데이터 교환 (MEX) 작업을 통해 전달되지 않으므로 클라이언트 측에서 수동으로 추가해야합니다.

그 때가이 video을 우연히 만났습니다. 이 책에서 Miguel Castro는 서비스 참조 방식을 전혀 사용하지 않는 설득력있는 사례를 제시합니다. 그리고 당신이 그의 주장을 검토 할 때, 그것은 정말로 의미가 있습니다.

자신의 권장 사항을 기반으로 DataContract 클래스와이 클래스에서 작동하는 클래스를 클라이언트와 서버에서 직접 참조되는 서비스 참조가없는 클래스 라이브러리에 배치하는 것이 좋습니다. 비디오에서 볼 수 있듯이 클라이언트 측 코드를 직접 작성하고 WCF 인터페이스가 변경 될 때 업데이트하면됩니다.

저는이 접근법을 몇 달 동안 사용해 왔지만 서비스 참조 방식을 사용하는 것보다 WCF를 사용하는 방식에 훨씬 더 유연한 솔루션을 발견했습니다.