Извините, что продолжаю беспокоить вас 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;
}
}