【问题标题】:What is WCF dispatch pipeline message flow什么是 WCF 调度管道消息流
【发布时间】:2010-12-23 16:31:34
【问题描述】:

我试图更好地了解 WCF 的调度过程,特别是对各种可扩展点的影响和效果。从底部列出的网页来看,一旦通道堆栈将消息传递给调度程序,WCF 似乎将按规定的顺序执行以下操作。

  1. 消息检查器
  2. 操作选择器
  3. 消息格式
  4. 参数检查器
  5. 操作调用者。

我正在尝试找到一些选项来解决我遇到的问题,我正在考虑的一种方法是结合使用消息检查器、操作选择器、消息格式和操作调用程序。不幸的是,我的观察似乎表明执行顺序如下:

  1. 操作选择器
  2. 消息检查器
  3. 操作调用程序 (AllocateInputs())
  4. 消息格式
  5. 参数检查器
  6. 操作调用程序 (Invoke())

我可以理解在格式化消息之前调用自定义调用程序 AllocateInputs() 方法的细微差别,因为消息格式化部分本质上是将给定消息反序列化为一组方法参数,以传递给适当的操作和调用者的 AllocateInputs() 方法指定需要多少个参数。

让我印象深刻的部分是 Message Inspector 和 Operation Selector 之间的顺序倒置。在我看来,消息检查器在对消息进行操作时首先运行,而操作选择器确定消息的目标是哪个服务操作,这对我来说是合乎逻辑的。

问题:

  • 这是由于 WCF 的不同版本或发行版造成的吗?
  • 这是因为 WCF 实际上没有指定扩展点执行顺序吗?

参考页面:
Extending WCF to support custom data formats - Zulfiqar 的博客
Extending WCF with Custom Behaviours - MSDN 服务站 2007 年 12 月
Message Flow Interception Points - Nicholas Allen 的 Indigo 博客

注意:我很抱歉没有提供链接,因为我仍然是菜鸟,所以不能提供多个链接。 =)

【问题讨论】:

  • 在那里,我投票赞成你的故事。您现在可以发布多个链接,因为您将拥有 11 个代表……也许:P
  • 我为你添加了链接,@hg。
  • 啊...我不知道这与代表有关。非常感谢,@Crowe。感谢@bobbymcr 也提供了链接。希望得到一些答案会不会太高了? =)
  • 好吧,我这周一直在寻找这个信息,但它似乎仍然不存在于互联网上。 WCF 没有很好的文档记录 :(

标签: wcf wcf-extensions


【解决方案1】:

要确定代码执行的实际顺序,我建议打开 Tracing for WCF 并查看生成的跟踪日志。这可以通过将其添加到配置文件来启用:

<configuration>
    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
                <listeners>
                    <add name="traceListener"
                        type="System.Diagnostics.XmlWriterTraceListener"
                        initializeData= "c:\log\Traces.svclog" />
                </listeners>
            </source>
        </sources>
    </system.diagnostics>
</configuration>

就 WCF 中的可扩展点而言,Carlos Figueira(Microsoft WCF 的工程师之一)有一篇文章详细介绍了 WCF 中几乎所有的可扩展点 (http://blogs.msdn.com/b/carlosfigueira/archive/2011/03/14/wcf-extensibility.aspx)。

在这篇文章的 WCF 运行时部分中,排序是这样列出的:

1.2. WCF Runtime
    1.2.1. Message interception 
        1.2.1.1. I[Client/Dispatch]MessageInspector 
        1.2.1.2. IParameterInspector 
    1.2.2. Mapping between message and operation parameter 
        1.2.2.1. I[Client/Dispatch]MessageFormatter 
    1.2.3. Mapping between message and CLR operations 
        1.2.3.1. I[Client/Dispatch]OperationSelector 
        1.2.3.2. IOperationInvoker  
    1.2.4. Instance creation 
        1.2.4.1. IInstanceProvider 
        1.2.4.2. IInstanceContextProvider 
    1.2.5. Error handling 
        1.2.5.1. IErrorHandler 
    1.2.6. Others 
        1.2.6.1. ICallContextInitializer 
        1.2.6.2. IChannelInitializer 
        1.2.6.3. IInteractiveChannelInitializer 

我认为在两者之间,WCF 中的操作顺序应该变得清晰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2015-02-16
    • 2011-01-29
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多