1

我有一个 WFC(4.0) 服务 dll,我必须为其创建一个主机应用程序。该dll非常简单,具有以下接口:

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

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

当我尝试创建服务时,我的问题就来了。当我创建从客户端到主机的通道时,出现以下异常:“提供给 ChannelFactory 的 InstanceContext 包含一个未实现 CallbackContractType 'Client.MyServiceReference.IServiceCallback' 的 UserObjecct。”

我发现在 ServiceReference 对象浏览器中 ClientObject 不包含 IServiceCallback 接口。这是我对应的主机代码:

    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(); <-- 抛出异常。} catch(Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK); }

4

1 回答 1

1

是否可以直接在客户端使用服务合同程序集?如果是这样,您可以使用 DuplexChannelFactory 并完全避免客户端服务参考代码。

这里的例子

我知道这不能回答您的问题,但它可以帮助您解决它。

于 2012-04-04T08:17:26.473 回答