UserObject未实现CallbackContractType'Client.MyService.IMyServiceCallback'

时间:2015-10-02 02:45:06

标签: c# wcf visual-studio-2015 duplex

我正在尝试在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);
        }
    }
}

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

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

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

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