与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? }; }

与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中,您可以指定所需的任何返回类型。如果删除单

回调方法int SendUpdate(字符串值)应该返回int值,但是silverlight的SendUpdateReceived事件处理程序如何将int值返回给其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?
                };
   }