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
спасибо
Ясень
потребовалась бы вечность, чтобы понять это. Я оставил интерфейс в объявлении класса обратного вызова, когда скопировал его из примера кода.
