问题标签 [idispatchmessageinspector]

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 回答
1545 浏览

c# - WCF Soap 响应 - 删除“结果”节点(格式化 WCF 响应)

我正在将旧版 Web 服务转换为 WCF 服务。前端应用程序当前正在使用此服务。但到目前为止,前端有意使用新的 WCF 服务,因此我们计划将请求从 IIS 重新路由到我们的新服务。这里的问题是新的 WCF 服务应该能够处理旧的输入请求,并且应该能够以完全相同的格式发回响应。

我在处理输入请求时没有遇到任何问题,但我在尝试以旧格式返回消息时遇到了问题。我当前的服务以以下格式返回 SoapResponse(我没有使用任何消息合同/DataContracts,因为我使用的是旧遗留代码中使用的相同返回类型和输入参数):

我希望它看起来像下面(我不希望响应中的 UserCheckResult 节点,而是我想要直接在 UserCheckResponse 节点下的键值对):

0 投票
2 回答
2277 浏览

web-services - 从 WCF 消息检查器发送到服务总线事件中心

我有一个工作的网络服务和测试客户端,我可以拦截它们之间的消息。但是当我添加要发送到我的事件中心的代码时,客户端显示错误:

更详细的例外:

这是我添加的代码:

这是 CreateEventHub 方法:

WebService 控制台应用程序最多可打印

所以我在想我可能需要为 WebService 中的 MessageInspector 添加端点,以便能够将数据发送到服务总线事件中心。如果是这样,配置如何?

提前致谢

0 投票
0 回答
1281 浏览

c# - 如何以及在何处实施 IDispatchMessageInspector

基于 SO 问题:如何在 WCF 服务中使用 IDispatchMessageInspector?

我仍然对在哪里实现执行代码以对检查的消息“做某事”的方法感到困惑。

从阅读IDispatchMessageInspector看来,我需要有一个实现的类,IDispatchMessageInspector它具有这两种方法AfterReceiveRequestBeforeSendReply.

但是,我不明白在哪里或如何使用这些方法。

例如,如果我想在将入站请求消息中的元素分派到其操作之前对其进行修改。

这是在我为实现我的ServiceContract接口的服务行为创建的类中完成的吗?

0 投票
1 回答
1921 浏览

c# - 在 MSMQ 端点上使用消息检查器记录 WCF 请求和响应

我正在开发一个 WCF 服务层,它利用消息检查器来记录请求和回复肥皂消息。

这是检查器,去掉了不相关的代码;

一切都很好,很花哨,直到出现了一个新的业务需求,这将最适合MSMQ,所以我正在实施一个 MSMQ 端点。这里的问题是消息传递是单向的。

即使我构建了一个响应对象,检查员的 BeforeSendReply 方法中的“回复”也将为空,因为不会将任何内容发送回客户端。

目前唯一看似合理的事情是将日志记录从消息检查器转移到我的消息处理器逻辑中,在那里我处理请求并构建响应。如果可能的话,我仍然更喜欢保留我当前的设置。

问题是,虽然看起来不太可能,但“是否可以使用 MSMQ 在检查器的 BeforeSendReply 方法参数中包含回复消息?”。

提前致谢。问候。


编辑 2015.08.27

我已经放弃了使用 Message Inspector 进行日志记录。现在登录我的服务层。这就是我所做的。我仍然愿意接受建议。

0 投票
1 回答
812 浏览

wcf - OperationContextScope 与 MessageInpectors

帮助我理解这两者之间的差异。根据我的说法,无论您使用什么 .NET 应用程序(如 WCF、控制台、Web 等),都可以使用 Operation ContextScope,如果您正在调用任何其他服务(如 WCF 或基于 Java 的服务),则可以在任何地方使用它[这不会在 ASMX 服务的情况下工作]将标头添加到传出消息中。

如果是这样,那么为什么我们需要在任何客户端添加 MessageInspectors 来添加标头?OperationContextScope 比 MessageInspector 简单得多。有人阐明了这两个的正确用法吗?

0 投票
1 回答
62 浏览

wcf - 如何在服务总线中正确地重新发送消息头

我一直在从头开始构建一个“愚蠢的”服务总线,它将消息发送到各种不同的服务(在标头中带有凭证令牌),并且需要使用它拥有的代理客户端将所述消息中继到服务。

一个简短的代码片段解释 -

我一直在尝试实现 IDispatchMessageInspector 并使用 AfterRequest 和 BeforeReply 来:

A. 从​​标头中获取值并将它们作为对象发送到 BeforeSend。

B. 在 BeforeSend 中将它们插入到代理客户端消息到正确的 Service。

我在这里滥用 IDispatch 吗?这是正确的方法吗?请忽略我现在对服务总线的想法是否正确。

如果这不是解决方法,当代理消息发送到原始服务时,您将如何收集消息标头并正确插入它们?

0 投票
1 回答
290 浏览

wcf - IServiceBehavior : 阻止对某些消息应用消息检查器

在 WCF 服务上,我添加了一个属性 [WebAppServiceBehavior],它检查服务消息中的某些标头的真实性。

是否有可能我可以在某些可以忽略这些检查的特定方法上使用其他属性。

我的问题是我在一项服务中有 20 种方法,我只想从此检查中排除 2 种方法。

0 投票
0 回答
75 浏览

c# - C# WCF 无法通过 MessageInspector 捕获 ?wsdl

我试图捕捉所有发送到我的 WCF 公共服务的消息。

我使用 WCF 服务扩展,实际上所有端点都在控制之下。

但是当我尝试像这样获得 wsdl 时:

http://localhost/MyProject.MyPublicService/Service/PublicService.svc?singlewsdl

或者

http://localhost/MyProject.MyPublicService/Service/PublicService.svc?wsdl

我不触发AfterReceiveRequest......这让我很恼火。

AfterReceiveRequest有人知道触发时如何进入?wsdl吗?

我创建了一个继承自属性的类,IServiceBehavior并使用该属性装饰公共服务。

循环遍历channelDispatcher所有端点以添加MessageInspector.

我自己的意见是什么端点没有捕捉到?wsdl 的请求......

但是我真的不知道该怎么做...

如果有人有线索,我真的很感激。

大卫

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 回答
447 浏览

c# - 如何在 IDispatchMessageInspector 中获取异常对象?

我的WCF应用程序使用IDispatchMessageInspector一些高级监控 -发生错误时和未发生错误时

我正在寻找一种方法来获取该IDispatchMessageInspector.BeforeSendReply方法时服务中发生的异常,因为我需要根据异常类型执行特定操作。

不是在寻找修改\记录我的错误,因为我已经使用自定义IErrorHandler.

我考虑过OperationContext在我在时添加例外,IErrorHandler并在我回到时简单地阅读它IDispatchMessageInspector,但我更喜欢内置的东西。

当我在IDispatchMessageInspector.BeforeSendReply方法中时,有什么方法可以获取异常?也许在 OperationContext 的某个地方?