问题标签 [iclientmessageinspector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
161 浏览

.net - 使用 WCF 技术重播日志

我需要使用 WCF 技术在 .NET 中重放一些以 JSON 格式保存的日志。该软件使用 IClientMessageInspector 获取日志并将其保存为 JSON。所以,我需要获取这些日志并再次注入它们。为此,我做了与获取日志时类似的操作。我确实扩展了 WCF EndPoint 并使用新参数修改了消息。这是代码:

这个函数似乎有正确的值。但是,它可以根据 json 文件调用许多不同的函数。为了能够进入那个“BeforeSendRequest”方法,我需要调用一个现有的方法,例如:

而且因为我在“BeforeSendRequest”中对其进行了修改,所以我在这里调用哪个函数并不重要。但是,它确实返回了错误:

当方法调用不是 m_MyService.YYY(); 时,它看起来不喜欢

0 投票
1 回答
553 浏览

wcf - WCF - 如何在服务授权管理器之前调用消息检查器?

我们正在使用 Message Inspector 通过在客户端添加一些信息并在服务器端检索添加的信息来自定义 SOAP 消息。我们还通过使用 ServiceAuthorizationManager 来使用自定义授权管理器来使用检索到的基于 SOAP 的消息信息。

为了自定义 SOAP 消息,我们重写了两种方法:

a) BeforeSendRequest (Client Side) - 此方法用于在 Message Inspector 中自定义 SOAP 消息头。

b) AfterReceiveRequest(服务器端) - 此方法用于在 Message Inspector 中获取定制的 SOAP 消息。

现在,当从客户端发出请求时,首先在自定义授权管理器类中进行调用,而不是在服务器端的消息检查器中进行 AfterReceiveRequest()。

我们已经在 App.config 文件中注册了我们的自定义授权管理器,如下所示:

流程应该是从消息检查器到服务器端的自定义授权管理器。但是,在我们的例子中,流程正好相反,即从自定义授权管理器到消息检查器。这可能是由于在 App.config 中注册了自定义授权管理器。

任何人都可以帮助我将流程从消息检查器更改为服务器端的自定义授权管理器吗?

0 投票
1 回答
389 浏览

wcf - 处理 IClientMessageInspector 上的异常

我调用了 wcf 服务并实现了 IClientMessageInspector 接口。

我想处理 AfterReceiveReply 上的错误。故障异常应始终返回 200 状态代码以及自定义消息和错误代码。它不应该在服务调用上抛出任何异常。

我想处理异常,它总是返回响应,没有我将在客户代码中处理的任何异常。

谢谢

0 投票
1 回答
39 浏览

wcf - 跟踪/检查 WCF 客户端消息

我使用 BeforeSendRequest() 从我的客户端(实现 IClientMessageInspector)发送一条消息,并在 AfterReceiveReply() 处接收来自端点的回复。

我的问题是“验证”我收到的回复与我发送的请求相关的最有效方法是什么?

我找到了一些关于使用相关状态的文章,但是这些例子都太笼统了。

任何帮助是极大的赞赏。

0 投票
0 回答
53 浏览

.net - 如何将请求从一个 WCF 转发到另一个 WCF?

我有一种情况,我必须创建一个服务 A(一种代理服务),它又会调用另一个服务 B(真正的服务)。客户端 C 只知道服务 A。服务 A 将记录调用并将请求转发给 B。在从 B 获得回复后,A 记录响应并将其发送回客户端 C。实现这种情况我见过很多例子,但似乎没有任何效果。我确实有一些限制。我无法在服务 A 中添加服务 B 的引用。我也无法创建服务引用。服务 A 和 B 完全不同,它们彼此不认识。

在 A 中,在 IClientMessageInspector 的 BeforeSendRequest() 中,我已将 request.Headers.To 更新为服务 B 的 URI。但是这个方法永远不会被调用。我还附加了一个 EndPointBehavior 到它。

我的示例代码如下。我正在使用.Net 4.5。

SimpleMessageInspector 类

应用程序配置...

最后,服务 A 永远不会调用服务 B。我在哪里出错了?感谢您的帮助。

顺便说一句,这里的问题很少,但似乎对我的情况没有任何作用。

0 投票
1 回答
90 浏览

c# - 如何以线程安全的方式将 XML 从 BeforeSendRequest 和 AfterReceiveReply 返回到调用方法?

我们有一个使用 Azure WebJob SDK 的控制台应用程序。WebJob 依赖于使用 SOAP 的 WCF 服务,它通过我们编写的 DLL 访问该服务,该 DLL 将自动生成的 WCF 类型包装在更友好的东西中。

出于日志记录的目的,我们希望为我们发出的请求保存请求和响应 XML 正文。这些 XML 正文将保存在我们的数据库中。但是,因为 WCF 代码存在于一个低级 DLL 中,它没有我们数据库的概念,也无法保存到它。

DLL 使用 Microsoft 的 DI 扩展来注册类型,WebJob 像这样调用它:

IWCFWrapperClient看起来像这样:

我已经实现了一个IClientMessageInspector,它可以很好地获取 XML 请求/响应,但是我没有办法将它传回给它,WCFWrapperClient.CallWCFService以便它可以返回给WebJobClass.DoThing(),然后谁可以将它保存到数据库中。

问题是多线程。WebJobs,IIRC,将并行运行多个请求,从多个线程调用 DLL。这意味着我们不能,比如说,共享一个静态属性,LastRequestXmlBody因为多个线程可能会覆盖它。我们也不能,比如说,给每个调用一个 Guid 或其他东西,因为除了IWCFWrapperClient.CallWCFService自动生成的东西之外,没有办法将任何东西传递给自动生成的IWCF.Call东西。

那么,如何WebJobClass.DoThing以线程安全的方式返回 XML 呢?