我试图让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();
}
Run Code Online (Sandbox Code Playgroud)
实施服务
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>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
客户代码.
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");
}
}
Run Code Online (Sandbox Code Playgroud)
为了获得对IDataCollector接口的引用,我在主机项目中包含了对dll的引用.我想知道这是否是我的问题所在.我是否需要在客户端应用程序中重新调用回调接口?
如果您需要其他任何东西,请告诉我.
亲切的问候
灰
use*_*195 18
道歉.
我找到了答案.
我的问题是我引用了包含回调接口的dll.
我应该做的是......
class MyCallback : AshService.IDataCollectorCallback
Run Code Online (Sandbox Code Playgroud)
谢谢
灰