2011-04-08 4 views
1

Portal.WebServices.TaskListService이라는 WCF 서비스는 코드 숨김 파일 TaskListService.svc.cs을 사용합니다. 이 파일에서 유형 TaskListServiceBase을 상속하는 유형 TaskListService을 선언하십시오. ITaskListService이라는 인터페이스를 구현합니다. 그래서 :어셈블리 대체 및 클래스 상속

TaskListService: TaskListServiceBase, ITaskListService 

^     ^    ^ 
    |      |     | 
application    separate assembly 

은 내가 TaskListService웹 서버에 번을 배포 할 및 TaskListService를 호스팅하는 응용 프로그램에서 참조하는 별도의 조립TaskListServiceBase 및 인터페이스를 넣어. 따라서 웹 서비스에서 기능을 추가, 제거 또는 업데이트하려면 응용 프로그램의 bin 폴더에 새 어셈블리 만 복사하면됩니다. 이 이후

이 시나리오도 가능한 경우, 또는 (컴파일 시간 상수 등의 사용 외에)이 연습을위한 벌금이나주의 사항이이 있는지 궁금 런타임 중에 발생, 또는이있는 경우 이 일을 더 잘 수행 할 수 있습니다.

는 는

그래서 기본적으로 내 질문은 : 내가 전체 응용 프로그램,

업데이트에만 어셈블리를 다시 배포하지 않고 WCF 서비스 기능을 업데이트 할 (그래 난 여기에 조금 바보가 된 기분)

답변

2

다른 어셈블리에서 인터페이스와 기본 클래스를 분리 할 수 ​​있으며 올바른 것입니다 (분리 된 인터페이스는 인터페이스를 설명하는 패턴이며 기본 클래스에도 동일한 패턴이 적용됩니다).

배포와 관련하여 IIS에서 어셈블리를 섀도 복사본하게되므로 수행 할 수 있습니다. 그러나 새 어셈블리를 복사 한 후에는 새 어셈블리가로드되도록 응용 프로그램을 재활용해야한다고 가정합니다.

섀도 복사본이 설정된 상태로 분리 된 AppDomain을 시작한 Windows 서비스에서이 작업을 수동으로 수행 했으므로 원격으로 어셈블리를 업데이트하고 강제로 서비스를 다시 시작할 수있었습니다.

1

이것은 제가 따르는 연습입니다. 제가 아는 단점은 없으며 이점 만 있습니다. 나는 코드를 뒤에서 사용하지 않는다는 점에서 한 걸음 더 나아 간다. 따라서 위의 예에서 TaskListService.cs는 어셈블리와 별도로 ServiceImplementations 어셈블리에 있습니다.

이렇게하면 필요한 경우 계약/구현을 여러 어셈블리로 분해하고 (도메인으로 구분하여) 개별적으로 업데이트 할 수 있습니다.