2009-10-07 147 views
2

我正在託管一個WPF應用程序內的WCF服務。我希望WCF能夠與其主機進行通信。具體來說,我想在客戶端調用某些WCF方法時從WCF接收事件通知。WCF與託管應用程序通信?

我試圖修改我的WCF是像這樣一個單:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public sealed class MasterNode : ServiceBase, IMasterNode 
{ 
    private static readonly MasterNode _instance = new MasterNode(); 
    public static MasterNode Instance { get { return _instance; } } 

    private MasterNode() 
    { 
    } 

    static MasterNode() 
    { 
    } 

,並具有使用實例屬性與WCF交互託管WPF應用程序的主要形式,但這並不似乎工作。就好像從客戶端到WCF的調用正在實例化一個新的WCF。幫幫我!

回答

1

然後,您可能會以錯誤的方式旋轉您的ServiceHost。當您使用InstanceContextMode.Single時,您應該創建具有該特定實例的ServiceHost:

var host = new ServiceHost(_instance); 
//... 
host.Open(); 
+0

這就是我想出來的。我繼續發佈一個更長的答案,但你的答案是準確的。謝謝! –

0

找到了一個有效的答案。

我的WPF主窗口的構造是這樣的:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class MasterNode : ServiceBase, IMasterNode 

ServiceHost的對象,然後使用我明確創建的實例:

public partial class Main : Window 
    { 
     private ObservableCollection<GridNodeProxy> _gridNodes = new ObservableCollection<GridNodeProxy>(); 
     private static Random _random = new Random(); 
     public MasterNode MasterNode { get; set; } 
     private ServiceHost _serviceHost; 

     public Main() 
     { 
      this.MasterNode = new MasterNode(); 
      MasterNode.OnMessage += MasterNodeMessage; 


      _serviceHost = new ServiceHost(MasterNode); 
      _serviceHost.Open(); 

      InitializeComponent(); 

     } 

我還通過添加屬性修改服務類。請注意,傳遞給ServiceHost構造函數的參數是MasterNode的實例,而不是類型引用。

希望這可以幫助別人!

相關問題