与net.tcp的双工通信:如何从CallbackContract获取返回值 //WCF服务代码: [ServiceContract(Namespace=“Silverlight”,CallbackContract=typeof(IStockServiceClient))] 公共接口IStockService { [运营合同(IsOneWay=false)] void Connect(); } [服务合同] 公共接口IStockServiceClient { [运营合同(IsOneWay=true)] int SendUpdate(字符串值); } 公共类股票服务:IStockService { 私有静态IStockServiceClient; 公共void Connect() { client=OperationContext.Current.GetCallbackChannel(); } 公共静态IStockServiceClient客户端 { 得到 { 返回客户; } } } //调用Silverlight代码 私有无效按钮1\u单击(对象发送者,路由目标) { var result=DuplexStockService.Web.StockService.Client。 发送更新(“测试”); } //silverlight代码 私有无效按钮1\u单击(对象发送者,路由目标) { ServiceReference1.StockServiceClient客户端= 新的ServiceReference1.StockServiceClient(); ConnectAsync(); client.SendUpdateReceived+=(senderSendUpdateReceived,eSendUpdateReceived)=> { //返回1;//不工作 //如何将值返回到WCF? }; }
回调方法int SendUpdate(字符串值)应该返回int值,但是silverlight的SendUpdateReceived事件处理程序如何将int值返回给其wcf被调用方?如果操作契约标记为单向与net.tcp的双工通信:如何从CallbackContract获取返回值 //WCF服务代码: [ServiceContract(Namespace=“Silverlight”,CallbackContract=typeof(IStockServiceClient))] 公共接口IStockService { [运营合同(IsOneWay=false)] void Connect(); } [服务合同] 公共接口IStockServiceClient { [运营合同(IsOneWay=true)] int SendUpdate(字符串值); } 公共类股票服务:IStockService { 私有静态IStockServiceClient; 公共void Connect() { client=OperationContext.Current.GetCallbackChannel(); } 公共静态IStockServiceClient客户端 { 得到 { 返回客户; } } } //调用Silverlight代码 私有无效按钮1\u单击(对象发送者,路由目标) { var result=DuplexStockService.Web.StockService.Client。 发送更新(“测试”); } //silverlight代码 私有无效按钮1\u单击(对象发送者,路由目标) { ServiceReference1.StockServiceClient客户端= 新的ServiceReference1.StockServiceClient(); ConnectAsync(); client.SendUpdateReceived+=(senderSendUpdateReceived,eSendUpdateReceived)=> { //返回1;//不工作 //如何将值返回到WCF? }; },silverlight,wcf,Silverlight,Wcf,回调方法int SendUpdate(字符串值)应该返回int值,但是silverlight的SendUpdateReceived事件处理程序如何将int值返回给其wcf被调用方?如果操作契约标记为单向,则无法返回任何值。所有单向操作都必须返回void,因为客户端从不等待响应-这就是它们被称为单向的原因。Silverlight不支持您的请求-回调只能是不返回值的单向操作。这是Silverlight对双工服务的附加限制-在非Silverlight WCF中,您可以指定所需的任何返回类型。如果删除单
,则无法返回任何值。所有单向操作都必须返回void
,因为客户端从不等待响应-这就是它们被称为单向的原因。Silverlight不支持您的请求-回调只能是不返回值的单向操作。这是Silverlight对双工服务的附加限制-在非Silverlight WCF中,您可以指定所需的任何返回类型。如果删除单向属性,接下来应该如何获得返回值?
//WCF Services Code:
[ServiceContract(Namespace = "Silverlight", CallbackContract = typeof(IStockServiceClient))]
public interface IStockService
{
[OperationContract(IsOneWay = false)]
void Connect();
}
[ServiceContract]
public interface IStockServiceClient
{
[OperationContract(IsOneWay = true)]
int SendUpdate(string value);
}
public class StockService : IStockService
{
private static IStockServiceClient client;
public void Connect()
{
client = OperationContext.Current.GetCallbackChannel<IStockServiceClient>();
}
public static IStockServiceClient Client
{
get
{
return client;
}
}
}
//Call Silverlight Code
private void button1_Click(object sender, RoutedEventArgs e)
{
var result = DuplexStockService.Web.StockService.Client.
SendUpdate("test");
}
//silverlight code
private void button1_Click(object sender, RoutedEventArgs e)
{
ServiceReference1.StockServiceClient client =
new ServiceReference1.StockServiceClient();
client.ConnectAsync();
client.SendUpdateReceived += (senderSendUpdateReceived, eSendUpdateReceived) =>
{
//return 1; //Doesn't work
//How to return a value back to WCF?
};
}