我试图让WCF双工通信正常工作,因为我不断得到“提供给ChannelFactory的InstanceContext包含一个不实现CallbackContractType的UserObject”
我知道有关于这个主题的其他帖子,但无法将它们与我的确切问题联系起来,所以我想发布自己。
继承我的代码。
我只包含了我认为相关的内容,但如果您需要其他任何内容,请与我们联系。
主机接口定义
[ServiceContract(CallbackContract = typeof(IDataCollectorCallback), SessionMode = SessionMode.Required)]
public interface IDataCollector
{
[OperationContract(IsOneWay = true)]
void GetData();
}
public interface IDataCollectorCallback
{
[OperationContract(IsOneWay = true)]
void returnData();
}
服务的实施
public class DataCollector : IDataCollector
{
public void GetData()
{
Console.WriteLine("Getting data");
Console.WriteLine("Waiting");
System.Threading.Thread.Sleep(10000);
Console.WriteLine("Sending Data back");
Callback.returnData();
}
IDataCollectorCallback Callback
{
get
{
return OperationContext.Current.GetCallbackChannel<IDataCollectorCallback>();
}
}
}
客户端代码。
class Program
{
static void Main(string[] args)
{
// while (true)
//{
Console.WriteLine("Press enter to trigger data collection");
Console.ReadLine();
InstanceContext context = new InstanceContext(new MyCallback());
AshService.DataCollectorClient svc = new AshService.DataCollectorClient(context);
svc.GetData();
Console.WriteLine("awaiting data coming back");
Console.ReadLine();
//}
}
}
class MyCallback : IDataCollectorCallback
{
public MyCallback()
{
}
public void returnData()
{
Console.WriteLine("Got Data back from the server");
}
}
为了获得对IDataCollector接口的引用,我在主机项目中包含了对dll的引用。我想知道这是否是我的问题所在。我是否需要在客户端应用程序中重新声明回调接口?
如果您需要其他任何内容,请与我们联系。
亲切的问候
灰
答案 0 :(得分:15)
道歉。
我找到了答案。
我的问题是我正在引用包含回调接口的dll。
我应该做的是......
class MyCallback : AshService.IDataCollectorCallback
由于
灰
答案 1 :(得分:0)
要想把这个拿出来,这将花费很长时间。当我从示例代码中复制它时,我在回调类声明中省略了接口。