首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF & Ninject将Ninject内核导入IDispatchMessageInspector实例

WCF & Ninject将Ninject内核导入IDispatchMessageInspector实例
EN

Stack Overflow用户
提问于 2013-12-19 17:24:13
回答 2查看 542关注 0票数 1

目前,我已经在WCF应用程序中安装了Ninject (使用ninject.extensions.wcf),并且基本功能都很好。但是,我添加了一个定制的IDispatchMessageInspectorIServiceBehavior,以验证每个服务调用(通过检查数据库和一些凭据),但我不完全确定如何在IDispatchMessageInspector中工作。

到目前为止,我的代码是:

代码语言:javascript
复制
public class MyServiceInspector: IDispatchMessageInspector
{
    #region Methods

    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        // TODO: Get credentials from request here, and hit database.

        return null;
    }

    public void BeforeSendReply(ref Message reply, object correlationState)
    {
        // Do nothing
    } 

   #endregion
}

发起此操作的IServiceBehavior如下所示:

代码语言:javascript
复制
public class MyServiceBehaviour : Attribute, IServiceBehavior
{
    #region Methods

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

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
        // Loop through channels and endpoints
        foreach (ChannelDispatcher cDispatcher in serviceHostBase.ChannelDispatchers)
        {
            foreach (EndpointDispatcher eDispatcher in cDispatcher.Endpoints)
            {
                // Add credentials inspector
                eDispatcher.DispatchRuntime.MessageInspectors.Add(new MyServiceInspector());
            }
        }
    }

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

    #endregion
}

我在网上搜索过一些例子,但是我似乎什么也找不到。这有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-20 10:41:11

我知道这个答案已经很晚了,但希望它能帮助其他人认识到这个问题。

我今天也有同样的问题..。我需要一个具有注入依赖项的消息检查器。他们从V3.2中向Ninjext.Extensions.WCF添加了一个Ninjext.Extensions.WCF类。下面是我如何在消息检查器中注入依赖关系:

信息检查专员:

代码语言:javascript
复制
 public class MyMessageInspector : IDispatchMessageInspector
 {
    public MyMessageInspector(IInjectedDependency injectedDependency)
    {

    }

    public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
    {
    }

    public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
    {
    }
 }

行为:

代码语言:javascript
复制
public class MyMessageInspectionBehavior : IEndpointBehavior
{
    private readonly IDispatchMessageInspector _messageInspector;

    public MyMessageInspectionBehavior(IDispatchMessageInspector messageInspector)
    {
        _messageInspector = messageInspector;
    }

    public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
        endpointDispatcher.DispatchRuntime.MessageInspectors.Add(_messageInspector);
    }

    public void Validate(ServiceEndpoint endpoint)
    {
    }

}

尼尼特约束:

代码语言:javascript
复制
this.Bind<IDispatchMessageInspector>()
    .To<MyMessageInspector>()
    .WhenInjectedInto<IEndpointBehavior>();

最后一步是配置:

代码语言:javascript
复制
<system.serviceModel>
<extensions>
  <behaviorExtensions>
    <add name="MyCustomMessageInspector" 
         type="Ninject.Extensions.Wcf.BaseNinjectBehaviorExtensionElement+NinjectBehaviorExtensionElement`1[[MyNamespace.MyMessageInspectionBehavior, MyAssemblyName]], Ninject.Extensions.Wcf" />
  </behaviorExtensions>
</extensions>
<behaviors>
  <endpointBehaviors>
    <behavior>
      <MyCustomMessageInspector />
    </behavior>
  </endpointBehaviors>
票数 2
EN

Stack Overflow用户

发布于 2014-01-21 10:54:58

我已经把这个停在这里了,因为似乎没有任何解决办法。我只是直接与我的背景联系起来,以期在今后加以改进。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20687932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档