在客户端的回调函数中调用其他 WCF 服务



我有一个简单的带有回调接口的WCF应用程序。我想要的是调用客户端回调函数中的其他 WCF 服务。

但是当我尝试做时,我得到异常

详细信息系统.服务模型.通信异常:服务器没有 提供有意义的答复;这可能会导致合同 不匹配、会话过早关闭或内部服务器错误。

以下是合同:

   [ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
    public interface IMyService
    {
        [OperationContract]
        void DoAddition(int numberOne, int numberTwo);
        [OperationContract]
        double Pow(double number, double power);
    }
    public interface IMyServiceCallback
   {
    [OperationContract]
    void OnCallback(string result);
   }

这是简单的服务实现

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class MyCustomService : IMyService
    {
        public void DoAddition(int numberOne, int numberTwo)
        {
            Console.WriteLine("Now Do Addition called");
            var callback = OperationContext.Current.
            GetCallbackChannel<IMyServiceCallback>();
            callback.OnCallback("The result is="  + numberOne + numberTwo );
        }
        public double Pow(double number, double power)
        {
            double result = 0;
            try
            {
                Console.WriteLine("Now Pow called");
                result= Math.Pow(number, power);
            }
            catch (Exception e)
            {
               Console.WriteLine("Error:" + e);
            }
            return result;
        }
    }

我将其作为控制台中的服务托管

callServiceHost = new ServiceHost(typeof(MyService.MyCustomService));
callServiceHost.AddServiceEndpoint(typeof (IMyService), new WSDualHttpBinding(), new Uri(GetUri()));
callServiceHost.Open();
Console.WriteLine("Press  to terminate.nn");
Console.ReadLine();

客户端,我想在回调函数中调用 wcf 服务,以便

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public class MyServiceCallback : IMyServiceCallback
    {
        public void OnCallback(string result)
        {
            Console.WriteLine("From Server I got the result" + result);
            Console.WriteLine(result);
            double powValue = Service.Pow(2, 3);
            Console.WriteLine("Power=" + powValue);
        }
        public IMyService Service { get; set; }
    }

我的客户端代码是

var binding = new WSDualHttpBinding();
var address = new EndpointAddress(GetUri());
var callback = new MyServiceCallback();
var instanceContext = new InstanceContext(callback);
var factory = new DuplexChannelFactory<IMyService>(instanceContext, binding, address);
IMyService callService = factory.CreateChannel();
callback.Service = callService;
callService.DoAddition(4,6);
Console.ReadKey();

我认为您的IMyServiceCallback接口缺少[ServiceContract]装饰。你能不能也改变你的经营合同[OperationContract(IsOneWay = true)]

最新更新