WCF
От: Аноним  
Дата: 21.03.10 18:33
Оценка:
Доброе время суток.
Только разбираюсь с WCF, возник вопрос: как мне разместить сервис вместе с WinForms приложением и иметь доступ к объектам формы, если такое возможно?
Re: WCF
От: Lloyd Россия  
Дата: 21.03.10 18:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброе время суток.

А>Только разбираюсь с WCF, возник вопрос: как мне разместить сервис вместе с WinForms приложением и иметь доступ к объектам формы, если такое возможно?

Зачем такое может понадобиться?
Re[2]: WCF
От: Аноним  
Дата: 21.03.10 19:13
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Аноним, Вы писали:


А>>Доброе время суток.

А>>Только разбираюсь с WCF, возник вопрос: как мне разместить сервис вместе с WinForms приложением и иметь доступ к объектам формы, если такое возможно?

L>Зачем такое может понадобиться?



Активировать тот или иной компонет формы в зависимости от вызванного метода сервиса. Само это приложение вместе с сервисом будет размещено на сервере, и с него планируется отправка сообщений клиентам(формирует сообщения и выбирает кому их отправлять оператор).
Re[3]: WCF
От: Lloyd Россия  
Дата: 21.03.10 19:17
Оценка:
Здравствуйте, Аноним, Вы писали:

L>>Зачем такое может понадобиться?


А>Активировать тот или иной компонет формы в зависимости от вызванного метода сервиса. Само это приложение вместе с сервисом будет размещено на сервере, и с него планируется отправка сообщений клиентам(формирует сообщения и выбирает кому их отправлять оператор).


Для этого не нужно в приложении хостить сервис. Сделайте периодический опрос сервиса и в зависимости от ответа, меняйте интерфейс.
Re[4]: WCF
От: Аноним  
Дата: 21.03.10 19:49
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Аноним, Вы писали:


L>>>Зачем такое может понадобиться?


А>>Активировать тот или иной компонет формы в зависимости от вызванного метода сервиса. Само это приложение вместе с сервисом будет размещено на сервере, и с него планируется отправка сообщений клиентам(формирует сообщения и выбирает кому их отправлять оператор).


L>Для этого не нужно в приложении хостить сервис. Сделайте периодический опрос сервиса и в зависимости от ответа, меняйте интерфейс.


А есть возможность перенаправить часть сообщения одного клиента другому, или сервисом вызвать определенный клиент и передать ему сообщение?
Re[5]: WCF
От: moxnatiy  
Дата: 21.03.10 21:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Lloyd, Вы писали:


L>>Здравствуйте, Аноним, Вы писали:


L>>>>Зачем такое может понадобиться?


А>>>Активировать тот или иной компонет формы в зависимости от вызванного метода сервиса. Само это приложение вместе с сервисом будет размещено на сервере, и с него планируется отправка сообщений клиентам(формирует сообщения и выбирает кому их отправлять оператор).


L>>Для этого не нужно в приложении хостить сервис. Сделайте периодический опрос сервиса и в зависимости от ответа, меняйте интерфейс.


А>А есть возможность перенаправить часть сообщения одного клиента другому, или сервисом вызвать определенный клиент и передать ему сообщение?


Такое возможно, подробнее можешь почитать здесь

Идея в том, что ты создаешь вместо ChannelFactory — DuplexChannelFactory и используешь callback объект.
Каждый клиент при вызове метода сервиса регистрицуется на сервисе, и при наступлении определенных условий, сервис оповещает клиента.
Примеры ищи по ключевым словам wcf, DuplexChannelFactory, callback

еще ссылка
Re: WCF
От: Jolly Roger  
Дата: 22.03.10 04:33
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Доброе время суток.

А>Только разбираюсь с WCF, возник вопрос: как мне разместить сервис вместе с WinForms приложением и иметь доступ к объектам формы, если такое возможно?

Вполне возможно, и вариантов реализации множество. Как, пожалуй, простейший — сделать приложение с синглетоном, роль которого, как вариант, может выполнять главная форма:

using System.ServiceModel;

namespace FormSingletonInterface
{
    [ServiceContract()]
    public interface IFormInterface
    {
        [OperationContract]
        void SetLabelText(string NewText);
    }
}

using System.ServiceModel;
using System.Windows.Forms;
using FormSingletonInterface;

namespace FormSingleton
{
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public partial class Form1 : Form, IFormInterface
    {
        ServiceHost host;
        public Form1()
        {
            InitializeComponent();
            host = new ServiceHost(this);
            var binding = new NetNamedPipeBinding();
            var endPoint = host.AddServiceEndpoint(
                typeof(IFormInterface), binding, "net.pipe://localhost/FormSingleton");
            host.Open();
        }

        void IFormInterface.SetLabelText(string NewText)
        {
            // В некоторых случаях здесь может потребоваться Control.Invoke
            label1.Text = NewText;
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            host.Close();
            host = null;
        }
    }
}


И клиент для теста

static void Main()
{
    var binding = new NetNamedPipeBinding();
    var chlFactory = new ChannelFactory<IFormInterface>(binding,
        new EndpointAddress("net.pipe://localhost/FormSingleton"));
    var client = chlFactory.CreateChannel();
    client.SetLabelText("New text");
}
"Нормальные герои всегда идут в обход!"
Re[2]: WCF
От: HowardLovekraft  
Дата: 22.03.10 06:49
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>        void IFormInterface.SetLabelText(string NewText)
JR>        {
JR>            // В некоторых случаях здесь может потребоваться Control.Invoke
JR>            label1.Text = NewText;
JR>        }

Не учите человека плохому.
Re[3]: WCF
От: Jolly Roger  
Дата: 22.03.10 07:03
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Не учите человека плохому.


А можно пояснить, что именно здесь плохо? Для повышения образованности
"Нормальные герои всегда идут в обход!"
Re[4]: WCF
От: HowardLovekraft  
Дата: 22.03.10 07:36
Оценка: -1
Здравствуйте, Jolly Roger, Вы писали:

JR>А можно пояснить, что именно здесь плохо? Для повышения образованности

1. Синглетный сервис.
2. Мешанина из логики и представления.
3. Обращение к наследнику Control из метода сервиса, который в 99% случаев будет вызван из потока, отличного от того, в котором создан Control.

Достаточно?
Re[5]: WCF
От: Jolly Roger  
Дата: 22.03.10 07:57
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, Jolly Roger, Вы писали:


JR>>А можно пояснить, что именно здесь плохо? Для повышения образованности

HL>1. Синглетный сервис.

Почему вдруг сервис? Самый обыкновенный сервер автоматизации И если логика требует синглетона, то и должен быть синглетон — куча существующих и успешных серверов автоматизации предоставляют рутовый объект именно в виде синглтона, и правильно делают.

А если не требует, то и не должен.

HL>2. Мешанина из логики и представления.


Это не "мешанина", а самый обычный упрощённый пример, демонстрирующий один из вариантов решения задачи топикстартера. Было-бы довольно глупо вываливать сюда полноценное приложение, чтобы продемонстрировать весьма простую вещь.

HL>3. Обращение к наследнику Control из метода сервиса, который в 99% случаев будет вызван из потока, отличного от того, в котором создан Control.


Этот метод в 100% случаев будет вызван в главном потоке приложения просто потому, что он в него транслируется WCF. А примечание написал потому, что не уверен, что так будет для всех типов каналов, и это требует проверки.

HL>Достаточно?


Нет, не достаточно, но продолжать не обязательно, Вашу мысль я уловил.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.