提供给ChannelFactory的InstanceContext包含一个不实现CallbackContractType的UserObject

use*_*195 9 c# wcf

我试图让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)

谢谢

灰