WCF双工通讯问题——初学者诚心求教
错误提示:向 ChannelFactory 提供的 InstanceContext 包含未实现 CallbackContractType“ICalculatorCallback”的 UserObject。
服务端
- C# code
[ServiceContract(CallbackContract = typeof(ICalculatorDuplexCallback))] public interface ICalculator { [OperationContract] void SendMessage(string message); } public interface ICalculatorDuplexCallback { [OperationContract] void ServerReply(string originalMessage); }
客户端实现
- C# code
public void ServerReply(string originalMessage) { Console.WriteLine("{0} 收到服务器回复:{1}", DateTime.Now, originalMessage); }
然后调用如下:
- C# code
WSDualHttpBinding binding = new WSDualHttpBinding(); EndpointAddress endptadr = new EndpointAddress("http://localhost:12000/DuplexTestUsingCode/Server"); binding.ClientBaseAddress = new Uri("http://localhost:8000/DuplexTestUsingCode/Client/"); CallbackHandler callback = new CallbackHandler(); CalculatorClient client = new CalculatorClient(new InstanceContext(callback), binding, endptadr); Console.Write("请输入:"); string input = Console.ReadLine(); while (input != "Exit") { client.SendMessage(input);//到这里就报错了、 Console.WriteLine(); Console.Write("请输入:"); input = Console.ReadLine(); }
是我契约的问题么?诚心求教高人
[解决办法]
ICalculatorCallback 的实现类呢?
[解决办法]
ICalculatorCallback是自己定义的一个接口,不是系统自带的,名字自己取的,所以并没有强行规定必须用哪个,只不过名字中含有“Duplex”就便于识别,仅此而已。
你在什么地方用到了ICalculatorCallback,但是你的给的代码里面却只有ICalculatorDuplexCallback,光这点很难判断,如果你是在原先ICalculatorCallback代码的基础上进行的修改,就很有可能未改全,漏改了什么地方,你可以尝试将ICalculatorCallback接口的定义直接从项目中删除,然后编译看看是否通过,毕竟连定义都没有了的话,错误提示就不可能再是那个了。