2010-06-22 4 views
1

에서 서비스하는 I가 다음 WCF 코드 :포인터는 ServiceHost를

ServiceHost host = null; 

if (host == null) 
    host = new ServiceHost(typeof(RadisService)); 

어떻게 내가 내 RadisService에 대한 포인터, 그것으로 통화를 할 수있는을받을 수 있나요?

글쎄 그것은 실제로 테스트 목적 이었지만, 어쨌든 교육 목적으로 질문을 할 수있게 해주시기 바랍니다. 내 서비스가 (GUI 호스트를 사용하는) 시스템에서 실행중인 경우, 다른 원격 시스템의 여러 클라이언트가 서비스에 연결하고 GUI를 통해 내 서비스에 대한 의견을 남기면 어떻게됩니까?

내 서비스에 대한 코드는 다음과 같습니다

내가 GetVariableDetails을()에 액세스 할 수 및 모든 다른 클라이언트에서 추가 된 모든 의견을 미리 싶습니다 내 서비스 호스트 GUI에서 그래서
public class MyClass 
{ 
    [DataMember] 
    static Dictionary<String, Variable> m_Variables = new 
     Dictionary<String, Variable>(); 
    .... 
} 

[ServiceContract] 
public interface IMyClassService 
{ 
    [OperationContract] 
    bool AddVariable(String name, Variable value); 

    [OperationContract] 
    bool RemoveVariable(String name); 

    [OperationContract] 
    bool GetVariable(string name, Variable variable); 

    [OperationContract] List<String> GetVariableDetails(); 
    ... 
} 

이 점. 내가 어떻게 이걸 얻을까요?

답변

2

당신은 당신의 서비스는 서비스의 인스턴스를 생성하고 그것을 줄 수있는 싱글 만들 경우 ServiceHost :

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class CalculatorService: ICalculatorService 
{ 

.... 

CalculatorService service = new CalculatorService(); 
ServiceHost serviceHost = new ServiceHost(service, baseAddress); 
+0

이것은 정확하게 맞는 답변입니다. 기본적으로 내 서비스가 싱글 톤 이었기 때문에 내가 찾던 답변입니다. 고맙습니다. – Tamer

+0

싱글 톤으로 서비스를 만드는 것이 좋은 일이 아니라는 점을 명심하십시오. 이는 확장 성과 코드의 테스트 가능성 측면에 부정적인 영향을 미칩니다. –

0

수 없습니다. ServiceHost은 들어오는 요청을 처리하기 위해 1-n 서비스 클래스 인스턴스를 호스팅하지만 대개 "당 호출"입니다. 새 요청이 들어 오면 서비스 클래스 인스턴스가 만들어지고 서비스 클래스에서 메서드가 호출 된 다음 다시 처리됩니다.

따라서 ServiceHost에는 메소드를 사용하고 호출 할 수있는 "서비스"클래스 인스턴스가 없습니다.

달성하려는 목표는 무엇입니까?

업데이트 : 서비스 호스트는 서비스 호스팅 외에도 실제로 서비스를 수행해서는 안되며, 서비스 자체를 호출하지 않아야합니다.

당신이 달성하고자하는 것은 일종의 관리 콘솔, 즉 시스템의 현재 코멘트를 보여주는 GUI입니다. 직접 데이터베이스 쿼리를 통해이 작업을 수행하거나 GUI 콘솔을 통해 서비스를 호출하여 해당 항목을 가져 오면 ServiceHost에 부담을주지는 않습니다.이 기능을 넣으려는 잘못된 위치입니다.

+0

이 올바른 논리적 인 대답이 서비스 호스트가 정말 대해 책임을지지 않습니다해야하기 때문에,이다 이. 그 점을 지적 해 주셔서 감사합니다. – Tamer

관련 문제