异步数据和WCF?

时间:2011-04-08 11:51:53

标签: c# wcf asynchronous

很抱歉让你不耐烦地跟踪WCF。 :)

到目前为止,我已经创建了一个小型客户端 - 服务器应用程序,客户端可以将数据传递到服务器端的函数并接收结果。

但客户端应用程序是否有可能“与服务器建立长期连接”并从中接收异步数据?

而不仅仅是连接 - >诱导功能和传递参数 - >获得重播 - >断开。

谢谢!

客户端:

using System.ServiceModel;

namespace ser2client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        CalculatorClient client = new CalculatorClient();

        private void button1_Click(object sender, EventArgs e)
        {
            int v1 = Convert.ToInt16(textBox1.Text);
            int v2 = Convert.ToInt16(textBox2.Text);
            int res = 0;

            if ( tb_action.Text == "+" )
            {
                res = client.Add(v1, v2);
            }
            else if ( tb_action.Text == "-" )
            {
                res = client.Subtract(v1, v2);
            }

            label1.Text = "= " + Convert.ToString(res);
        }


    }
}

服务器:

using System.ServiceModel;
using System.ServiceModel.Description;

namespace server
{


    [ServiceContract(Namespace = "http://server")]
    public interface ICalculator
    {
        [OperationContract]
        int Add(int n1, int n2);
        [OperationContract]
        int Subtract(int n1, int n2);
    }



    public class CalculatorService : ICalculator
    {

        public int Add(int n1, int n2)
        {
            int result = n1 + n2;
            Console.WriteLine( Convert.ToString(n1)+"+"+Convert.ToString(n2)+"="+result);
            Console.WriteLine("");
            return result;
        }

        public int Subtract(int n1, int n2)
        {
            int result = n1 - n2;
            Console.WriteLine(Convert.ToString(n1) + "-" + Convert.ToString(n2) + "=" + result);
            Console.WriteLine("");
            return result;
        }

    }

3 个答案:

答案 0 :(得分:3)

WCF主要用于传递消息。您定义的内容没有定义的消息。话虽如此,WCF确实允许类似的行为:

  • 使用,您可以继续写入流
  • 创建双工通信,其中服务器可以回调客户端

根据您的需要,Streaming即可。

答案 1 :(得分:1)

您可以在服务上设置回叫频道,并定期回叫已连接的客户端。请查看this文章。

答案 2 :(得分:1)

我认为你的问题是关于instance management,如果你希望你的服务能够callback,那么WCF可以解决这个问题。它是什么......你在合同中指定了一个回调方法,WCF服务将在你指定的任何时候调用它。

对于所有WCF服务,我认为默认值是..在您关闭客户端上的代理之前,会话将保持打开状态。除非您将其设置为PerCall会话,服务将在您关闭客户端代理之前关闭。