2011-04-08 58 views
2

对不起,WCF烦你。 :)异步数据和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; 
     } 

    } 
+0

你能显示任何代码吗? – 2011-04-08 11:55:57

+0

当然,刚添加它。我没有发布它,因为它与服务器返回的异步数据没有任何关系。 – Roger 2011-04-08 12:01:38

回答

1

您可以在服务设置回调道,并定期回调的连接的客户端。看看this文章。

+0

谢谢,读它... – Roger 2011-04-08 12:07:42

3

WCF主要用于传递消息。你正在定义的是没有定义的消息。话虽如此,WCF不会允许类似的行为:

  • 使用在那里你可以保持写入流
  • 创建双工通信,其中服务器能够回调到客户端

从你看起来需要,Streaming是要走的路。

+0

谢谢!为什么你认为流会走的路,而不是双工? – Roger 2011-04-08 12:08:48

+0

看到我关于双面打印的咆哮http://stackoverflow.com/questions/4265033/mysterious-problem-in-wcf-and-iis/4265457#4265457 – Aliostad 2011-04-08 12:13:24

1

我想你的要求是关于instance management,如果你想让你的服务做出callback那么WCF可以处理这个问题。它是什么......你指定一个你的合约中的回调方法,WCF服务将在你指定的任何时候调用。

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