2012-04-04 108 views
1

我有,我必須創建一個主機應用程序WFC(4.0)服務的DLL。該DLL非常簡單,並具有以下接口:WCF服務(DLL)主機應用

[ServiceContract(CallbackContract=typeof(IChatServiceCallback))] 
    public interface IService { 
     [OperationContract] 
     Guid Subscribe(); 
    } 

    public interface IServiceCallback { 
     void NotifyClient(strign message); 
    } 

我嘗試創建服務時出現問題。當我創建從客戶端的通道到主機,我得到以下異常:「的的InstanceContext提供給的ChannelFactory包含未實現CallbackContractType‘Client.MyServiceReference.IServiceCallback’一個UserObjecct。」

我發現,在ServiceReference對象瀏覽器ClientObject不包含IServiceCallback接口。在這裏我correspoding主機代碼:

ServiceHost host = new ServiceHost(typeof(ChatService)); 

    try 
    { 
     host.BeginOpen(new AsyncCallback(OnOpen), host); 
     mre.WaitOne(); 
     if (host.State == CommunicationState.Opened) 
     { 
      Console.WriteLine("Server is running!\nServer listens on the following endpoints:"); 
      foreach (var endp in host.Description.Endpoints) 
      { 
       Console.WriteLine("\t{0}", endp.Address); 
      } 

      Console.WriteLine("Press <Enter> to stop the server..."); 
      Console.ReadLine(); 
      host.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error: {0}", ex.Message); 
    } 

我如何可以創建其中包含在客戶端實現的回調接口的服務DLL主機應用程序?

客戶機側: 嘗試{ clientID的= client.Subscribe(); < - 引發異常。 }趕上(例外){ MessageBox.Show(ex.Message, 「錯誤」,MessageBoxButton.OK); }

回答

1

你能在客戶端上直接使用該服務合同大會?如果是這樣,您可以使用DuplexChannelFactory並完全避免客戶端服務參考代碼。

而且例如here

我知道這並不能回答你的問題,但它可以幫助你解決它。

+0

謝謝,但有主機實現了服務功能。我有一個包含實現的服務。意思是我在dll中也有接口和類,所以我不想在主機應用程序中重寫這些接口和類。 – Wrath 2012-04-04 08:54:07

+0

那麼你爲什麼要在服務主機中使用ChannelFactory呢? ChannelFactory用於客戶端連接到服務。 – 2012-04-04 09:16:19

+0

什麼ChannelFactory?哪裏?我認爲你沒有充分了解我的問題。我有一個完整的服務,我得到了一個.dll庫。我必須創建一個託管服務並接收客戶端連接的主機應用程序。 我不知道你剛剛從哪裏得到那個ChannelFactory。我只是說你給我的鏈接不適合我的問題。我有準備好的服務,我只需要將它與回調界面進行正確的託管。在您最近給我的鏈接上,服務在主機上實現。我無法使用它,因爲我的服務是在我想要使用的DLL中實現的。 – Wrath 2012-04-04 09:58:24