2012-05-13 2 views
4

WCF 계약 인터페이스를 세 번째 DLL로 이동하고 수동으로 프록시를 생성 할 때 클라이언트에서 해당 인터페이스를 소비하기를 원합니다.WCF 계약을 별도의 DLL로 이동

클라이언트에서 프록시를 생성하기 위해 DLL을 소비 할 때 DLL의 해당 인터페이스에 [ServiceContract] 속성이 있어야합니까?

계약과 클라이언트와 서버간에 공유 할 계약서 만있는 DLL에 가장 적합한 이름은 무엇입니까?

+0

"손으로 프록시 생성"이란 무엇을 의미합니까? 기존 어셈블리의 클래스를 다시 사용하여 프록시를 생성하려고합니다. 그럴까요? –

+0

@Andriy Buday 예 –

답변

5

WCF 데이터 및 서비스 계약을 별도의 어셈블리에 배치하는 것은 매우 일반적인 방법입니다. 이전 프로젝트에서는 Company.OurProject.Contracts.dll과 같은 이름을 사용했습니다. 기존 클래스를 재사용하여 프록시를 생성하려면 서비스 계약 ([ServiceContractAttribute]으로 표시된 인터페이스) 및 해당 데이터 계약을 해당 어셈블리에 배치해야한다고 생각합니다. 나는 실제로 서비스를 구현하는 것을 피할 것이다. WCF Service Reference generates its own contract interface, won't reuse mine

1

이 일반적인 아마도 권장 방법 :

여기에 SO "참조 된 어셈블리의 재사용 유형"를 선택하면 재사용 할 수있는 일에 더 많은 통찰력에 또 다른 좋은 대답이다.

예 계약 dll에 살고있는 서비스 인터페이스에 서비스 계약을해야합니다.

네임 스페이스가 dll의 이름과 일치 할 필요는 없습니다. 귀하의 현재 어셈블리가 CompanyName.Technology.Service과 같은 네임 스페이스가있는 CompanyName.Technology.Service.dll과 같다고 가정하면 계약을 다른 어셈블리로 추출해야하지만 네임 스페이스는 동일하게 유지하십시오 (여전히 의미가 있으면). 어셈블리 이름은 CompanyName.Technology.Service.Contracts입니다. 당신이 갖고 싶지 않은 것은 "계약서"라는 이름의 네임 스페이스입니다.

+0

네임 스페이스를 유지하고 그 안에 "계약서"라는 이름을 사용하지 않는 것이 중요한 이유는 무엇입니까? 이전 버전과의 호환성을 위해? – xr280xr

+1

@ xr280xr - ServiceContract 특성에서 사용자 지정 네임 스페이스를 설정하지 않는 경우 다른 어셈블리로 이동하여 네임 스페이스를 변경하지 않으려했습니다. 이로 인해 기존 클라이언트간에 계약 불일치가 발생할 수 있습니다. – Bronumski

0

* .ServiceContracts.dll은 시스템에 여러 계약 어셈블리가 있기 때문에 사용합니다. 예를 들어 DataContracts.dll은 데이터 저장소에 액세스하는 데 사용됩니다.

+0

또한 바이너리를 공유하는 경우 생성 된 프록시는 피할 수 있습니다. 나는 WCF로 작업하는 훨씬 더 깔끔한 방법이라고 생각한다. 프록시를 감싸는 생성 된 코드 대신 프록시를 직접 사용할 수 있습니다. –

관련 문제