我正在尝试在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);
}
}
}
非常感谢任何帮助或建议。
答案 0 :(得分:0)
我将假设通过添加服务引用自动生成类MyServiceClient。如果是这样的话,MyServiceClient实现了一个我认为称为IMyService的接口。该接口将通过属性指定回调协定。它看起来像这样:
[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
[OperationContract]
void Register();
}
CallbackContract设置的确切接口类型是您的回调类需要实现的。声明具有相同名称的新接口(具有不同的命名空间,否则您将遇到编译错误)不等同于在常规服务接口上指定的接口。删除IMyServiceCallback的定义并更改ClientCallback以实现正确的接口类型。