很抱歉让你不耐烦地跟踪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 :(得分:3)
答案 1 :(得分:1)
您可以在服务上设置回叫频道,并定期回叫已连接的客户端。请查看this文章。
答案 2 :(得分:1)
我认为你的问题是关于instance management,如果你希望你的服务能够callback,那么WCF可以解决这个问题。它是什么......你在合同中指定了一个回调方法,WCF服务将在你指定的任何时候调用它。
对于所有WCF服务,我认为默认值是..在您关闭客户端上的代理之前,会话将保持打开状态。除非您将其设置为PerCall会话,服务将在您关闭客户端代理之前关闭。