Это правильный способ размещения службы WCF? - PullRequest
4 голосов
/ 12 апреля 2010

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

public class WcfHost<Implementation, Contract> : IDisposable
    where Implementation : class
    where Contract : class
{
    public readonly string Address = "net.tcp://localhost:8000/";
    private ServiceHost _Host;

    public WcfHost ()
    {
        _Host = new ServiceHost (typeof (Implementation));

        var binding = new NetTcpBinding ();
        var address = new Uri (Address);

        _Host.AddServiceEndpoint (
            typeof (Contract),
            binding,
            address);
        _Host.Open ();
    }

    public void Dispose ()
    {
        ((IDisposable) _Host).Dispose ();
    }
}

Это можно использовать так:

using (var host = new WcfHost<ImplementationClass, ContractClass> ()) {

Что-то не так с этим подходом? Есть ли в коде недостаток (особенно в отношении утилизации)?

Ответы [ 3 ]

5 голосов
/ 12 апреля 2010

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

Я не проверял его, но в вашем методе утилизации должно быть следующее:

if (_Host.State == CommunicationState.Faulted)
{
    _Host.Abort();
}
else
{
    _Host.Close();
}
0 голосов
/ 12 апреля 2010

Если бы я реализовал этот Self Host, я бы поместил его в Службу Windows, используя события OnStart и OnStop. Также внесите следующие изменения в рекомендации:

  • Поместите конфигурацию конечной точки в файл App.Config - лучше управлять в рабочей среде.
  • Отделите Host Service от двоичных файлов реализации и контракта.

Вы также можете посмотреть на MSDN: http://msdn.microsoft.com/en-us/library/ms730158%28v=VS.90%29.aspx Там хорошо, как "Хостинг службы в Windows Service"

0 голосов
/ 12 апреля 2010

Мне кажется, это нормально, если вы согласны с ограничениями фиксированной привязки и адреса сервера.

Вы должны быть уверены, что код в using сохраняется до тех пор, пока вы хотите, чтобы хост был доступен.

...