none
请教,我能在我的services方法中获得当前客户端是通过哪种endpoint来调用该方法的吗? RRS feed

  • 问题

  • 案例是这样的, 为了让业务逻辑处理模块只专注于处理本身的业务逻辑,我将权限验证跟业务逻辑模块彻底分离

    我的服务可能会以nettcpbinding和webhttpbinding等多种绑定进行发布

    为了实现权限验证, 我的客户端会在消息头或http头里加入一些信息,然后在服务端写一个MessageInspector对消息进行拦截并检测消息头进行权限验证

    由于webhttpbinding是不支持soap的,也就是没法跟nettcpbinding一样直接在operationcontext里通过设置或读取消息头来实现

    这很好解决,分别针对两种绑定写两个MessageInspector模快,在webhttpbinding中不再处理消息头,而是直接处理http header

     

    但是考虑到有一种情况,我需要直接在业务模块的services方法里直接获得上下文并读取客户端传来的消息,就晕菜了

    MessageInspector事先是知道当前处理的是哪种绑定的,而我的services方法里并不知道当前调用的是nettcpbinding还是webhttpbinding,所以我不知道是该去通过operationcontext里处理soap消息头,还是在weboperationcontext里处理http头.

     

    不知道wcf可有提供一种机制让我在services的方法里知道当前的调用是基于哪种绑定呢?

    2010年11月10日 2:04

答案

  • 每个Endpioint的address是不一样的,在服务里通过如下属性可知Request来自哪个Endpoint

    OperationContext.Current.Channel.LocalAddress

     


    Mog Liang
    • 已标记为答案 Mog Liang 2010年11月25日 3:03
    2010年11月17日 7:09

全部回复