2016-06-22 1 views
1

WCF, .NET 4.5, Visual Studio 2015를 사용하고 싱글 톤이 아닌 세션 별 인스턴스화를 사용하려고합니다. 제공되는 서비스는 tcp.net을 통해 전이중 방식으로 이루어집니다.WCF - 특정 인스턴스에 연결하는 방법

나는이 기계가 있다고 가정 클라이언트와 같은 & B ...

B는 같은 기계 B에 WCF 서비스로 제공되는 "서비스"에 연결하고 개체를 호출, 그것을 이야기 시작 "엑스". 또한 동일한 서비스의 다른 인스턴스에 연결하여 객체 "Y"라고합니다.

A는 클라이언트로서 B가 말하고있는 것과 정확히 동일한 객체에 연결하려고합니다. 객체 "X"와 "Y" 지금은 원격지가 아닌 원격지가 아닌 원격지입니다.

"X"와 "Y"는 실제로 비디오 서버이며 둘 다 "상태"를 가지고 있습니다.

이 작업을 수행 할 수 있습니까? 내가 클라이언트 일 때 어떻게 연결할 서비스 인스턴스를 지정합니까?

분명히 "B"컴퓨터에서 "B"를 실행하는 일부 프로세스와 통신하는 "상태"가없는 프론트 엔드로 서비스를 제공함으로써이 문제를 해결할 수는 있지만, 프로세스 코드의, 내가 싫어.

머신 B는 로컬 마스터 (싱글 톤) 서비스에 의해 각각 이야기되고 최종 사용자 시스템이 말하는 "비디오 서버"인스턴스 100 대를 실행해야합니다.

나는이 질문이 약간 일반적인 것임을 알았지 만, Internets에서 내가 찾거나 대답 할 수없는 질문을 제시한다.

나는 단지 하나의 가능한 해결책을 생각했지만, kludge-y 해결책 : 마스터 서비스가 싱글 톤이기 때문에 최종 사용자가 서비스 인스턴스 "X"를 만들 때, 싱글 톤 마스터 서비스에 연결할 수 있습니다. 싱글 톤 프록시. 그런 다음 싱글 톤은 콜백 채널을 통해 번을으로 "X"인스턴스로 말할 수 있습니다. 그래, 그게 효과가있을거야! 지저분한,하지만 가능합니다.

최종 사용자 A와 최종 사용자 B가 모두 펑키 한 채널 조작이나 무언가를 통해 컴퓨터 C에서 동일한 (비 - 싱글 톤) 서비스 인스턴스와 대화 할 수 있는지 알고 싶습니다. WCF의 규칙을 이해하기 때문에이 작업은 간단하지 않습니다. 아마 어쩌면 당신이 직접 서비스를 호스팅하는 경우 IIS 대신하지만, 그때도 가능하지 않을까?

답변

1

동일한 문제가 발생하여 원격 용 로컬 참조 용으로 2 개의 서비스 참조를 만들어 해결했습니다. LocalServiceClientRemoteServiceClient이라고합시다.

클래스에서 Client라는 속성을 만들 (또는 당신은 전화를 원하는대로) :

public LocalServiceClient Client { 
    get { 
      return new LocalServiceClient(); 
    } 
} 

이 좋아 이것은 단지 그들 중 하나입니다.그냥 지금 서로를 생성하고, 컴파일러 플래그를 사용하는 하나의 설정 :

#if DEBUG 
public LocalServiceClient Client { 
    get { 
      return new LocalServiceClient(); 
    } 
} 
#else 

public RemoteServiceClient Client { 
    get { 
      return new RemoteServiceClient(); 
    } 
} 
#endif 

var 키워드를 사용하여 Client의 인스턴스를 인스턴스화, 그래서 암시 적 형식의 것, 아니면 그냥 직접 Client를 사용

var client = Client; 
client.DoSomething... 
//or 
Client.DoSomething... 

이렇게하면 로컬에서 작업 할 때 로컬 서비스에 연결되고 릴리스 구성 (공개 할 때 Release에 있는지 확인하십시오)에서 원격 서비스에 대해 컴파일됩니다. WCF 측에서 두 서비스에 대한 서명/코드가 동일해야합니다.

동적으로 코드에서 수행 할 수있는 방법이 있거나 web.config과 같이 확실하게 작동 할 수도 있지만 일반적으로 과도합니다. 디버깅시 로컬 디버거에, 원격 프로덕션에 연결해야 할 필요가있을 것입니다. 그러면 필요한 부분을 정확하게 제공 할 수 있습니다.

관련 문제