InstanceContext предоставляет ChannelFactory содержит UserObject, который не реализует CallbackContractType

Im пытается получить дуплексную связь WCF, работающую с Im, поскольку я продолжаю получать "InstanceContext, предоставляемый ChannelFactory, содержит UserObject, который не реализует CallbackContractType"

Я знаю, что есть другие сообщения по этому вопросу, но не мог связать их с моей точной проблемой, поэтому подумал, что я отправлю себя.

вот мой код.

Я включил только биты, которые я думаю, актуальны, но, пожалуйста, дайте мне знать, если вам что-нибудь понадобится еще.

хост-интерфейс определения

[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 в проект хоста. Мне интересно, в этом ли моя проблема. Нужно ли redclare интерфейс обратного вызова в клиентском приложении?

пожалуйста, дайте мне знать, если вам потребуется что-нибудь еще.

вид С уважением

Ясень

2 ответов


извинения.

Я разработал ответ.

моя проблема заключалась в том, что я ссылался на dll, содержащую интерфейс обратного вызова.

что я должен был сделать это....

    class MyCallback : AshService.IDataCollectorCallback

спасибо

Ясень


потребовалась бы вечность, чтобы понять это. Я оставил интерфейс в объявлении класса обратного вызова, когда скопировал его из примера кода.