如何创建具有始终运行组件的WCF服务?

时间:2014-11-10 12:54:58

标签: c# asp.net .net wcf iis

半天的谷歌搜索表明,这是一个小小的话题,我的问题非常具体。我正在使用:VS2013,.NET 4.5,IIS 8.5

我有一个需要查询数据源的ASP.NET网站。打开数据源代价很高,但我可以无限期地保持打开状态。

我的想法是:创建一个命令行应用程序或Windows服务,它将打开数据源,然后将可交换对象公开给ASP.NET网站。

我不喜欢将此非托管(CommandLine)或远离网站(WinService)应用程序管理的想法,我必须完全单独部署。

我已经读过可以在IIS中创建一个始终运行的WCF服务。我希望它保留一个由于WCF调用而返回的对象实例列表。那可能吗?如果是,怎么样?

我已经尝试将WCF服务AppPool设置为AlwaysRunning,在服务应用程序上启用自动启动,我可以访问该服务,但是一个简单的测试显示,每次重新创建服务对象:

public class MyService : IMyService{
{
private int _counter;
public int Test(){ return _counter++; }
}

我的网站从服务引用创建一个MyServiceClient并调用test - 它每次都返回0。

我还发现,如果我在WCF服务应用程序中创建任何类,我就无法从MyService方法中访问它。我可以访问从其他项目引用的类。那是为什么?

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找单身人士服务。默认情况下,ServiceBehaviorAttribute.InstanceContextMode设置为PerSession。而是将其设置为Single。然后,每个客户端都将连接到该服务的同一实例。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class MyService : IMyService{
{
    private int _counter;
    public int Test(){ return _counter++; }
}

就个人而言,我更喜欢单身方法而非here

中讨论的静态方法