我有一个WCF服务,它配置为作为Windows服务运行,但只有在我将InstanceContextMode
设置为Single
时才有效。当我将其更改为PerCall
并重新启动时 - 安装它变得无法访问的服务。
有人可以澄清我是否运行WCF服务,因为Windows服务将上下文 HAVE 设置为Single,为什么会这样?
[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 :(得分:1)
您正在创建单个对象并将其传递给ServiceHost
的单例构造函数。这个ServiceHost如何在每次调用时创建一个新对象?那不行。
如果您需要PerCall(或PerSession或除Singleton之外的任何东西),您需要将类的类型传递给ServiceHost
构造函数,以便它可以在运行时创建此类型的新实例
_serviceHost = new ServiceHost(typeof(CateringSSTService));
如果您没有默默地吞下异常,Runtime就会告诉您问题所在。对未来的问题应用一些适当的错误处理。