Асинхронные данные и WCF? - PullRequest
       1

Асинхронные данные и WCF?

2 голосов
/ 08 апреля 2011

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

3 голосов
/ 08 апреля 2011

WCF в основном предназначен для передачи сообщений. То, что вы определяете, не является определенным сообщением. Сказав это, WCF допускает подобное поведение в:

  • Использование потоков , где вы можете продолжать запись в поток
  • Создание дуплексной связи, при которой сервер может перезвонить клиенту

Из того, что вам, кажется, нужно, Потоковое - это путь.

1 голос
/ 08 апреля 2011

Я думаю, что вы спрашиваете об управлении экземплярами , и если вы хотите, чтобы ваша служба сделала обратный вызов , то WCF справится с этим. Что это такое ... в контракте вы указываете метод обратного вызова, который служба WCF будет вызывать в любое время, указанное вами.

Для всех служб WCF я думаю, что по умолчанию ... ваша сессия будет оставаться открытой, пока вы не закроете прокси на клиенте. Если вы не настроили его как PerCall сеанс, который служба закроет, прежде чем закрыть прокси-сервер клиента.

1 голос
/ 08 апреля 2011

Вы можете настроить каналы обратного вызова в службе и периодически перезванивать подключенным клиентам.Взгляните на эту статью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...