【问题标题】:WCF: How add me custom ServiceBehavior into WCF configurationWCF:如何将自定义 ServiceBehavior 添加到 WCF 配置中
【发布时间】:2011-06-02 01:16:40
【问题描述】:

您好,我有自己的 ServiceBehavior:

public class StructureMapServiceBehavior : IServiceBehavior
    {
        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
            foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers)
            {
                ChannelDispatcher cd = cdb as ChannelDispatcher;
                if (cd != null)
                {
                    foreach (EndpointDispatcher ed in cd.Endpoints)
                    {
                        ed.DispatchRuntime.InstanceProvider =
                            new StructureMapInstanceProvider(serviceDescription.ServiceType);
                    }
                }
            }
        }

        public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
        {
        }

        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
        }

    }

如何使用 WCF 配置工具将其添加到 App.config 中?

【问题讨论】:

    标签: wcf app-config


    【解决方案1】:

    创建一个继承自BehaviorExtensionElement的类:

    public class StructureMapServiceBehaviorElement : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get { return typeof(StructureMapServiceBehavior ); }
        }
    
        protected override object CreateBehavior()
        {
            return new StructureMapServiceBehavior ();
        }
    }
    

    然后在配置文件中注册你的扩展:

    <behaviorExtensions>
        <add name="timeService" type="YourAssembly.StructureMapServiceBehaviorElement ,
    YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </behaviorExtensions>
    

    完成后,您可以像使用其他任何扩展程序一样使用您的扩展程序。

    编辑:使用配置工具来完成,它是类似的。创建上述类后,在 WCF 配置工具的扩展部分中注册您的行为(高级->扩展->行为元素扩展)

    【讨论】:

    • @johann-blais 可以像我 wcf libary 一样在同一个项目中成为 StructureMapServiceBehaviorElement 吗? WCF 配置工具,显示错误:可以定位程序集
    • 是的,这是可能的。这个消息是从哪里来的?配置工具?运行时异常?
    • @johann-blais 正好在 WCF 配置工具中。构建良好,如果我打开 WCF CT,则会出现错误:(MyAssembly)找不到。你想搬家吗?
    • 可能是工具运行目录不是bin/debug,找不到程序集。尝试通过工具而不是手动添加扩展,然后它应该能够找到它。
    • @johann-blais 关于 app.config 中的行为我有这个错误:警告元素“行为”具有无效的子元素“结构映射行为”。预期的可能元素列表:'serviceAuthenticationManager, clear, serviceAuthorization, serviceCredentials, serviceMetadata, serviceSecurityAudit, serviceThrottling, dataContractSerializer, serviceDebug, serviceTimeouts, remove, useRequestHeadersForMetadataAddress, persistenceProvider,
    【解决方案2】:

    您必须创建从BehaviorExtensionElement 派生的自定义类,该类将负责创建您的自定义行为。 Here is the example 以及在配置文件中添加此类行为所需的步骤(扩展必须首先在 behaviorsExtensions 部分中注册)。

    在配置工具中,我猜你首先必须在 Advanced > Extensions 中注册扩展,然后你就可以使用该服务行为了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2010-09-17
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多