2014-10-08 152 views
0

我有一个WCF服务被配置为作为Windows服务运行,但它只适用于我设置InstanceContextModeSingle。当我将其更改为PerCall并重新安装服务它变得无法访问。运行WCF Windows服务作为InstanceContextMode.PerCall

有人请澄清,如果我运行WCF服务作为Windows服务的上下文被设置为单一,为什么?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class CateringSSTService : ICateringSSTService 

更新:这是托管代码

private ICateringSSTService _cateringSSTService; 
    private ServiceHost _serviceHost; 
    private Task _executionTask; 

    public CateringSSTServer() 
    { 
    } 

    public void Start() 
    { 
     _executionTask = new Task(ManagerStartup); 
     _executionTask.Start(); 
    } 

    private void ManagerStartup() 
    { 
     try 
     { 
      _cateringSSTService = new CateringSSTService(); 
      _serviceHost = new ServiceHost(_cateringSSTService); 
      _serviceHost.Open(); 
     } 
     catch (Exception) 
     { 
     } 
    } 

    public void Stop() 
    { 
     try 
     { 
      if (_serviceHost != null && _serviceHost.State != CommunicationState.Closed) 
      { 
       _serviceHost.Close(); 
      } 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 
+0

你如何运行一个WCF服务作为一个Windows服务?自托管?如果是这样,代码在哪里? – nvoigt 2014-10-08 15:52:24

+0

它托管在Windows 2003服务器上@nvoigt – 2014-10-08 15:54:00

+0

这不是我的意思。你不能只采取这两条线,并将其作为Windows服务托管。你的托管代码在哪里? – nvoigt 2014-10-08 16:01:32

回答

1

您正在创建一个对象,并将其传递到ServiceHost单身构造。这个ServiceHost应该如何在每次调用时创建一个新对象?这是行不通的。

如果你想PerCall(或PerSession或什么,但辛格尔顿),你需要你的类的类型传递给ServiceHost构造,因此可以在运行时创建这种类型的新实例。

_serviceHost = new ServiceHost(typeof(CateringSSTService)); 

如果您还没有默默吞下例外,运行时会告诉你是什么问题。为未来的问题应用一些适当的错误处理。