gpt4 book ai didi

c# - 拦截 WCF 客户端中的消息

转载 作者:太空狗 更新时间:2023-10-29 22:21:05 24 4
gpt4 key购买 nike

有人对 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 Message Modification”(http://msdn.microsoft.com/en-us/library/esw638yk(VS.85).aspx)展示了如何为 Web 客户端启用 SOAP 扩展:

Implementing the SOAP Extension

There are two ways to run a SOAP extension on either a client or server application. First, you can configure the application to run the extension. To configure your SOAP extension to run for all Web methods on all Web services, especially a vroot, edit the <soapExtensionTypes> Element section within the Web.config file. The following code shows that the type attribute value must be on one line and include the fully qualified name of the extension, plus the version, culture, and public key token of the signed assembly.

<configuration>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="Contoso.MySoapExtension, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" priority="1" group="0"/>
</soapExtensionTypes>
</webServices>
</system.web>
</configuration>

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

<add type="TraceExtension, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ef8757fac167b8d8" priority="1" group="High"/>

没有快乐。没有记录任何内容,也没有命中断点。

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

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

<add type="ServiceTest001.TraceExtension" group="High" priority="1" />

我使用以下线程作为指南,以启用扩展“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 服务扩展演示项目,这样我就可以拆解它并找出我缺少的东西?

最佳答案

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

唯一“棘手”的是,如果您计划修改邮件正文,那么您需要先创建原始邮件的副本。参见 Using the Message Class对于粘糊糊的细节。

关于c# - 拦截 WCF 客户端中的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1217374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com