[英]Call other WCF service inside the callback function at client side
我有一個帶有回調接口的簡單WCF應用程序。 我想要的是在客戶端的回調函數內調用其他WCF服務。
但是當我嘗試做的時候,我得到了例外
DetailsSystem.ServiceModel.CommunicationException:服務器未提供有意義的答復。 這可能是由於合同不匹配,會話過早關閉或內部服務器錯誤引起的。
這是合同:
[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.\n\n");
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)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.