2014-04-07 9 views
0

는 다음동일한 Service 인스턴스를 여러 ServiceHost에 안전하게 제공 하시겠습니까?

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple 
)] 
class MyService { ... } 

같은 서비스가 여러 ServiceHost의 단일 인스턴스를 제공하기 위해 다음 OK인가 내가이 말? Like :

var serviceInstance = new MyService(); 
var host1 = new ServiceHost(serviceInstance); 
host1.AddServiceEndpoint(...); 
var host2 = new ServiceHost(serviceInstance); 
... 

기존 코드베이스에서이 서비스는 단일 ServiceHost에서만 사용됩니다. 그러나 ConcurrencyModeMultiple, 즉

입니다. 서비스 인스턴스는 멀티 스레드입니다. 동기화가 보장되지 않습니다. 다른 스레드는 언제든지 서비스 개체를 변경할 수 있으므로 항상 동기화 및 상태 일관성을 처리해야합니다. 사용 중임

이미 스레드 안전성이 있어야하며 스레드 안전성 측면에서 여러 ServiceHosts에 제공하는 것이 좋습니다.

다른 이의가 있습니까?

답변

1

평생 동안 서비스 상태를 변경하는 변수를 유지하지 않는 한 아무런 문제가 없습니다.

+0

"ServiceHost"가 작동하는 방식으로이 작업을 수행 했습니까?이 작업은 정상적으로 작동한다고 생각할 수 있습니다. 조금이라도 정교하게 작업 할 수 있으므로 귀하의 말씀을 의지 할 필요가 없습니다. 그것? –

+1

우리는 브리지 서비스와 비슷한 것을하고 있습니다. 기본적으로 여러 프로토콜에 바인딩 된 서비스가 있습니다. 클라이언트가 서비스 메소드를 호출 할 때마다 데이터는 다른 버스에 배치됩니다. 버스에 데이터를 저장하는 객체는 각 호출에서 인스턴스화됩니다. 호출 간에는 정보가 공유되지 않으므로 아무런 문제가 없습니다. –

+0

+1 경험을 공유해 주셔서 감사합니다. 당신의 업장이 [Chuck Norris] (http://stackoverflow.com/users/22656/jon-skeet)의 접근에 도달하고 당신의 말로 충분할 때까지 유용하고 또한 필요합니다;) –