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