我有一个WFC(4.0)服务dll,我必须为其创建一个主机应用程序。该DLL非常简单,并具有以下接口:
[ServiceContract(CallbackContract=typeof(IChatServiceCallback))]
public interface IService {
[OperationContract]
Guid Subscribe();
}
public interface IServiceCallback {
void NotifyClient(strign message);
}
当我尝试创建服务时出现问题。当我创建从客户端到主机的通道时,我得到以下异常:“提供给ChannelFactory的InstanceContext包含一个UserObjecct,它不实现CallbackContractType'Client.MyServiceReference.IServiceCallback'。”
我发现在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);
}
如何为包含在客户端实现的回调接口的Service dll创建主机应用程序?
客户方: 尝试{ clientID = client.Subscribe(); &lt; - 引发异常。 } catch(Exception ex){ MessageBox.Show(ex.Message,“Error”,MessageBoxButton.OK); }
答案 0 :(得分:1)
您可以直接在客户端上使用服务合同程序集吗?如果是这样,您可以使用DuplexChannelFactory并完全避免客户端服务引用代码。
示例here
我知道这并没有回答你的问题,但它可以帮助你解决它。