UserObject 没有实现 CallbackContractType 'Client.MyService.IMyServiceCallback'

UserObject does not implement the CallbackContractType 'Client.MyService.IMyServiceCallback'

我试图在 Visual Studio 2015 年使用 WCF 实现通用双工连接,但是,在 运行 我的客户端应用程序出现此错误:

The InstanceContext provided to the ChannelFactory contains a UserObject that does not implement the CallbackContractType 'Client.MyService.IMyServiceCallback'.

我似乎找不到引用的文件有任何问题:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using Client.MyService;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            var callback = new InstanceContext(new ClientCallback());
            var client = new MyServiceClient(callback);
            client.Open();
            client.Register();
            Console.WriteLine("Press a key to exit");
            Console.ReadKey();
            client.Close();
        }
    }
}

接口似乎正确实现了:

namespace Client
{
    public interface IMyServiceCallback
    {
        [OperationContract(IsOneWay = true)]
        void Tick(DateTime dateTime);
    }
}


namespace Client
{
    public class ClientCallback : IMyServiceCallback
    {
        public void Tick(DateTime dateTime)
        {
            Console.WriteLine(dateTime);
        }
    }
}

如有任何帮助或建议,我们将不胜感激。

我假设 class MyServiceClient 是通过添加服务引用自动生成的。如果是这样的话,MyServiceClient 实现了一个接口,我假设这个接口叫做 IMyService。该接口将具有通过属性指定的回调协定。它看起来像这样:

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
    [OperationContract]
    void Register();
}

CallbackContract 设置的确切接口类型是您的回调 class 需要实现的。声明一个同名的新接口(使用不同的命名空间,否则会出现编译错误)不等同于在常规服务接口上指定的接口。删除 IMyServiceCallback 的定义并更改 ClientCallback 以实现正确的接口类型。