日期:2014-05-17  浏览次数:21114 次

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接口的定义直接从项目中删除,然后编译看看是否通过,毕竟连定义都没有了的话,错误提示就不可能再是那个了。