IServiceBehavior和ApplyDispatchBehavior的简单示例

本文关键字:简单 ApplyDispatchBehavior IServiceBehavior | 更新日期: 2023-09-27 18:00:43

我正在尝试使用服务行为将Unity插入WCF服务库。

我需要一个简单的服务行为示例。

我想做的就是在WCF服务启动时设置我的IOC Unity容器。

注意:我没有使用WCF服务应用程序。所以我没有访问任何ASP。NET的方法。从概念的角度来看,服务行为似乎是最优雅的方法。但我不知道如何设置(我需要什么代码,是更新配置文件吗,等等)。

IServiceBehavior和ApplyDispatchBehavior的简单示例

如果您想控制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();
    }
}