2010-06-14 1 views
0

서비스,이 클래스에서 서비스 작업을 상속하는 모든 클래스 구현하는 3.0 DLL 사용하여 .NET 2.0 프로젝트의 문제 :WCF의 내가 하나 개의 프로젝트에서 내 WCF 서비스에 액세스하는 클라이언트를 만들어

public abstract class ServiceClient<TServiceClient> : IDisposable where TServiceClient : ICommunicationObject 

이 클래스는 처분, 클라이언트 호출시 로깅 등 모든 서비스 클래스가 정상적으로 수행하는 일반적인 작업을 수행하는 곳입니다.

오래된 시스템에서이 작업을 구현할 때까지 모든 것이 잘 작동했습니다. System.ServiceModel을 참조 할 수없는 다른 프로젝트에서이 프로젝트 (DLL)를 사용할 때 문제가 발생했습니다 (이전 .NET 2.0 소프트웨어이므로 3.0으로 업그레이드하는 것이 궁금합니다). 여기에 내가 where TServiceClient : ICommunicationObject를 생략하면, 다음 프로젝트를 구축 할 수 있지만, ServiceClient 예를 들어, 사용할 수 없습니다 client.Close() 또는 client.State

그래서, where 문을 드롭하고, 서비스 클래스를 다시 내 유일한 해결책은?

+0

"(여전히 유지 관리되는 오래된 .NET 2.0 소프트웨어이므로 3.0으로 업그레이드하는 것이 궁금합니다.)"라는 의미는 무엇입니까? 2.0 앱의 클라이언트가 .NET 3.0+ 프레임 워크를 설치할 수 없습니까? 또는 VS에서 2.0 프로젝트를 열 수없고 .NET 3.0+를 대상으로 다시 컴파일 할 수 있습니까? 기존 앱을 2.0에서 3.0으로 가져 오려면 실제 코드를 변경하지 않아도됩니다. – mbeckish

+0

글쎄, 서버에 최신 프레임 워크가 설치되어있어 DLL을 가져올 수 있습니다 (사전 컴파일 됨 - 솔루션을 프로젝트에 추가 할 수 없습니다). 그리고 같은 프로젝트에서 많은 사람들이 작업하고 있습니다 (예, 솔루션이 아니라 프로젝트를 의미합니다). 단지 업그레이드 할 수 없습니다 (이 문제가 즉시 해결된다는 것을 알고 싶다면). – avance70

답변

1

해당 프로젝트를 3.0으로 업그레이드 할 수없는 경우이 (또는 래퍼 클래스) 옵션이 유일한 것으로 보입니다.

+0

흠 ... 나는이 클래스를 구현하는 정적 필드를 사용하여 간단한 정적 클래스를 만들었지 만 (3.0 프로젝트 내부에서), 어떤 메소드를 호출하려고해도 동일한 빌드 오류가 발생합니다. 2.0 ... 정적 메서드에서 모든 메서드를 별도로 구현해야한다면 작동 할 것이라고 추측합니다.하지만 다소 나쁜 솔루션 인 것 같습니다. – avance70

+0

글쎄, 결국에는'ICommunicationObject' 대신에'IDisposable'을 사용하고 일부 코드를 다시 작성했습니다. (여전히 3.0 프레임 워크를 요구하기 때문에) 직접 처리 할 수는 없지만 'using' 문을 사용하면 클라이언트가 자동으로 닫힙니다. – avance70

0

무엇을 업그레이드 하시겠습니까? 3.0은 실제로 프레임 워크의 새 버전이 아니라 단지 몇 가지 추가 dll입니다. 2.0의 코드는 이전과 똑같은 .net 라이브러리를 사용하여 실행됩니다.

+0

불행히도 2.0은 "내"코드가 아닙니다 ... 국제 전화를 관리하는 거대한 소프트웨어의 일부입니다. 따라서 코드 작성 방법에 대한 의견이 없으므로 그 소프트웨어의 작은 부분을 조정해야합니다. – avance70