指向ServiceHost服务的指针

时间:2010-06-22 12:01:44

标签: wcf

我有以下WCF代码:

ServiceHost host = null;

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

如何获得指向RadisService的指针,用它进行调用?

这真的是出于测试目的,但是出于教育目的,请允许我提出这个问题。如果我的服务在一台机器上运行(使用GUI主机)会发生什么,来自不同远程机器的几个客户端连接到该服务,并通过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();
    ... 
}

因此,从我的服务主机GUI,我希望能够访问GetVariableDetails(),并预览此时从所有不同客户端添加的所有注释。我将如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

如果您将服务设为单身,则可以创建服务实例并将其提供给ServiceHost

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

....

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

答案 1 :(得分:0)

你做不到。 ServiceHost将托管1-n个服务类实例来处理传入的请求,但这些实例通常是“按次呼叫”,例如:当一个新请求进入时,会在服务类上调用一个方法,然后再次处理它,就会创建一个服务类实例。

因此,ServiceHost实际上没有任何可以使用和调用方法的“服务”类实例。

你到底想要达到什么目的?

更新:除了托管服务之外,服务主机应该不会做任何事情 - 它绝对不应该调用服务本身。

您要实现的是某种管理控制台 - 显示系统中当前注释的GUI。通过直接数据库查询来执行此操作,或者只需要一个GUI控制台来调用您的服务并获取这些条目 - 但不要将这些负担放在ServiceHost上 - 这是放置此功能的错误位置。