2014-10-08 156 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)); 

如果您還沒有默默吞下例外,運行時會告訴你是什麼問題。爲未來的問題應用一些適當的錯誤處理。