【问题标题】:Intercept messages in a WCF Client在 WCF 客户端中拦截消息
【发布时间】:2010-11-16 02:03:35
【问题描述】:

有人对 Web 服务扩展有任何经验吗?我花了一些时间尝试从 MS 示例中制作 Web 服务扩展。

我有一个 .net 3.5 Web 服务客户端,通过 VS IDE“项目 > 添加服务引用”添加对 WSDL 的引用来构建。这构建了我的 Web 服务客户端,一切正常。

我需要截取我的 Web 服务客户端的请求和响应正文。我找到了很多对 Web 服务扩展的引用,但是我已经厌倦了攻击,就是无法启动我的扩展。

我使用了“如何实现 SOAP 扩展”(http://msdn.microsoft.com/en-us/library/7w06t139.aspx) 此处的 MS 示例,它为请求/响应流构建了一个记录器。

相关的 MS 文章“Soap 消息修改”(http://msdn.microsoft.com/en-us/library/esw638yk(VS.85).aspx) 展示了如何为 Web 客户端启用 SOAP 扩展:

实施 SOAP 扩展

有两种方法可以在客户端或服务器应用程序上运行 SOAP 扩展。首先,您可以配置应用程序以运行扩展程序。要将 SOAP 扩展配置为针对所有 Web 服务(尤其是 vroot)上的所有 Web 方法运行,请编辑 Web.config 文件中的 <soapExtensionTypes> Element 部分。以下代码显示 type 属性值必须位于一行,并且包括扩展的完全限定名称,以及签名程序集的版本、文化和公钥标记。









配置>

我已经将traceextension编译到它自己的类库中,并在web服务项目的web.config中引用它,如下所示:

没有快乐。没有记录任何内容,也没有遇到断点。

然后我删除了引用的类,并将源代码放入 Web 服务项目中。

我尝试像这样添加对它的引用(我的命名空间是 ServcieTest001):

我使用以下线程作为指导,使我能够扩展“getting-raw-soap-data-from-a-web-reference-client-running-in-asp-net”(http://stackoverflow.com/questions/300674/getting-raw-soap-data-from-a-web-reference-client-running-in-asp-net)。

仍然没有喜悦。然后我从上面的线程中复制了代码,当我发出 SOAP 请求时仍然无法触发扩展。

谁能给我指点一个功能正常的可下载 Web 服务扩展演示项目,以便我可以拆开它并找出我缺少的东西?

【问题讨论】:

    标签: c# wcf soap wcf-client


    【解决方案1】:

    这是获取原始消息的命令:

    OperationContext.Current.RequestContext.RequestMessage 
    

    我浪费了 3 天时间尝试使用肥皂扩展,这比我想象的要简单得多。阅读 Zach 提到的链接会很有趣。

    【讨论】:

      【解决方案2】:

      John 是对的,您可以使用实现 IClientMessageInspector 的自定义客户端行为来拦截客户端上的消息。请参阅 MSDN 上的 How To: Inspect or Modify Messages on the Client

      唯一“棘手”的是,如果您打算修改消息正文,那么您需要先创建原始消息的副本。有关粘糊糊的详细信息,请参阅Using the Message Class

      【讨论】:

        【解决方案3】:

        是的 - 我太累了。

        认为Web 服务扩展使用“Web 引用”(.net 2),而不是“服务引用”(.net 3)。

        所以我想改变我的问题 - 如何拦截连接到旧版 Web 服务的 .net 3“服务参考”的请求和响应?

        【讨论】:

          【解决方案4】:

          你可能想休息一下。

          您永远都不想使用 WSE。 WSE 已过时。

          您不想使用 ASMX Web 服务 - 微软现在认为它们是“遗留”技术,不会修复错误。顺便说一句,WSE 是基于 ASMX 的,那是什么原因造成的呢?


          您只想使用 Windows Communication Foundation。 MSDN 上的 WCF 开发中心位于 http://msdn.microsoft.com/wcf/

          玩得开心,远离讨厌的、古老的、过时的东西。

          【讨论】:

          • 我希望我可以使用 wcf... 这是我要连接的旧版(非 .net)Web 服务,它使用自定义加密方案。这就是我尝试构建 Web 服务扩展的原因。
          猜你喜欢
          • 1970-01-01
          • 2011-04-22
          • 1970-01-01
          • 1970-01-01
          • 2021-03-22
          • 1970-01-01
          • 2016-01-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多