Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IServiceBehavior和ApplyDispatchBehavior的简单示例_C#_Wcf_Servicebehavior - Fatal编程技术网

C# IServiceBehavior和ApplyDispatchBehavior的简单示例

C# IServiceBehavior和ApplyDispatchBehavior的简单示例,c#,wcf,servicebehavior,C#,Wcf,Servicebehavior,我试图用服务行为将Unity插入WCF服务库 我需要一个简单的服务行为示例 我只想在WCF服务启动时设置IOC Unity容器 注意:我没有使用WCF服务应用程序。因此,我无法访问任何ASP.NET方法来实现这一点。从概念的角度来看,服务行为似乎是最优雅的方法。但是我不知道如何设置(我需要什么代码,我需要更新配置文件等等)。如果你想控制WCF服务实例的实例,你需要一个服务行为来插入一个IInstanceProvider。您可以在关于该接口的帖子中找到一个简单的提供程序实现(针对IoC容器) 根据

我试图用服务行为将Unity插入WCF服务库

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

我只想在WCF服务启动时设置IOC Unity容器


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

如果你想控制WCF服务实例的实例,你需要一个服务行为来插入一个
IInstanceProvider
。您可以在关于该接口的帖子中找到一个简单的提供程序实现(针对IoC容器)

根据注释,如果您只需要一个简单的iSeries行为,那么下面是一个示例实现,您可以使用它

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();
    }
}
公共类StackOverflow_6539963
{
公共类MyServiceBehaviorAttribute:属性,IServiceBehavior
{
public void AddBindingParameters(ServiceDescription ServiceDescription、ServiceHostBase ServiceHostBase、集合终结点、BindingParameterCollection bindingParameters)
{
}
公共无效ApplyDispatchBehavior(ServiceDescription ServiceDescription,ServiceHostBase ServiceHostBase)
{
WriteLine(“在MyServiceBehaviorAttribute.ApplyDispatchBehavior中”);
//做任何你需要的初始化
}
公共无效验证(ServiceDescription ServiceDescription,ServiceHostBase ServiceHostBase)
{
}
}
[服务合同]
公共接口测试
{
[经营合同]
字符串回显(字符串文本);
}
[我的服务行为]
公共类服务:ITest
{
公共字符串回显(字符串文本)
{
返回文本;
}
}
公共静态无效测试()
{
string baseAddress=“http://“+Environment.MachineName+”:8000/服务”;
ServiceHost主机=新ServiceHost(类型(服务),新Uri(基地址));
AddServiceEndpoint(typeof(ITest),new BasicHttpBinding(),“”);
host.Open();
Console.WriteLine(“主机已打开”);
控制台。写入(“按ENTER键关闭主机”);
Console.ReadLine();
host.Close();
}
}

除非我猜错了,否则这是一种测试WCF服务的方法。因此,这会激发每个“实例”创建。(IInstanceProvider)。我需要一种启动时只启动一次的方法。我现在实际上对WCF服务不感兴趣。我只想在启动时初始化我的IOC容器(但我将用于我的业务层对象,而不是WCF服务对象。我明白了。你是否在IIS上托管你的服务(即使用.svc文件)?如果是这样,你仍然可以连接到global.asax应用程序。\u start。如果你不是在IIS上托管它(即,你自己托管它),然后您可以在启动服务主机之前初始化IoC。这两种方法都很好。但是,我需要托管不可知论者。(我的框架团队仍在为我的服务开发托管解决方案)因此,我正在寻找一个能起作用的WCF解决方案。我找到了有关iSeries行为和ApplyDispatchBehavior的信息,这些信息似乎符合我的要求,但很难找到示例。好的,我发布了一个iSeries行为的简单示例。如果你想了解更多信息,可以在Sweet上找到!完美!非常感谢。