WCF общается с хостингом? - PullRequest
       9

WCF общается с хостингом?

2 голосов
/ 08 октября 2009

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

Я пытался изменить мой WCF, чтобы он был похож на:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public sealed class MasterNode : ServiceBase, IMasterNode
{
    private static readonly MasterNode _instance = new MasterNode();
    public static MasterNode Instance { get { return _instance; } }

    private MasterNode()
    {
    }

    static MasterNode()
    {
    }

и имеет основную форму хост-приложения WPF, использующего свойство Instance для взаимодействия с WCF, но это, похоже, не работает. Это похоже на то, как если бы вызов от клиента к WCF создает новый WCF. Помогите!

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Тогда вы можете неправильно раскрутить свой ServiceHost. Когда вы используете InstanceContextMode.Single, вы должны создать свой ServiceHost с этим конкретным экземпляром:

var host = new ServiceHost(_instance);
//...
host.Open();
0 голосов
/ 08 октября 2009

Нашел ответ, который работает.

Мой конструктор главного окна WPF выглядит так:

   public partial class Main : Window
    {
        private ObservableCollection<GridNodeProxy> _gridNodes = new ObservableCollection<GridNodeProxy>();
        private static Random _random = new Random();
        public MasterNode MasterNode { get; set; } 
        private ServiceHost _serviceHost;

        public Main()
        {
            this.MasterNode = new MasterNode();
            MasterNode.OnMessage += MasterNodeMessage;


            _serviceHost = new ServiceHost(MasterNode);
            _serviceHost.Open();

            InitializeComponent();

        }

Я также изменил класс обслуживания, добавив атрибут:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MasterNode : ServiceBase, IMasterNode

Объект serviceHost затем использует экземпляр, который я явно создал. Обратите внимание, что параметр, передаваемый конструктору ServiceHost, является экземпляром MasterNode, а не ссылкой на тип.

Надеюсь, это поможет кому-то еще!

...