Простой пример IServiceBehavior и ApplyDispatchBehavior - PullRequest
4 голосов
/ 30 июня 2011

Я пытаюсь подключить Unity к сервисной библиотеке WCF с поведением службы.

Мне нужен простой простой пример поведения службы.

Все, что я хочу сделать, это настроитьмой контейнер IOC Unity при запуске службы WCF.

ПРИМЕЧАНИЕ. Я не использую приложение службы WCF.Так что у меня нет доступа к ЛЮБОМУ способу сделать это в ASP.NET.С концептуальной точки зрения поведение службы кажется наиболее элегантным методом.Но я не знаю, как его настроить (какой код мне нужен, где обновить файлы конфигурации и т. Д.).

1 Ответ

6 голосов
/ 30 июня 2011

Если вы хотите управлять экземплярами экземпляров службы WCF, вам нужно поведение службы, чтобы подключить IInstanceProvider для этого.Вы можете найти простую реализацию провайдера (для контейнера IoC) в посте об этом интерфейсе по адресу http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/31/wcf-extensibility-iinstanceprovider.aspx.

. В комментариях, если все, что вам нужно, это простой IServiceBehavior, вот пример реализации, которую вы можете использовать.

public class StackOverflow_6539963
{
    public class MyServiceBehaviorAttribute : Attribute, IServiceBehavior
    {
        public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
            Console.WriteLine("In MyServiceBehaviorAttribute.ApplyDispatchBehavior");
            // do whatever initialization you need
        }

        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
        }
    }
    [ServiceContract]
    public interface ITest
    {
        [OperationContract]
        string Echo(string text);
    }
    [MyServiceBehavior]
    public class Service : ITest
    {
        public string Echo(string text)
        {
            return text;
        }
    }
    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
        ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
        host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), "");
        host.Open();
        Console.WriteLine("Host opened");

        Console.Write("Press ENTER to close the host");
        Console.ReadLine();
        host.Close();
    }
}
...