问题标签 [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.
c# - 如何在 IClientMessageInspector 中获取调用的操作名称?
我在我的应用程序中实现了一个IClientMessageInspector
“拦截”传出 Web 服务调用。BeforeSendRequest
是否可以从and内部找出正在调用哪个操作AfterReceiveReply
?
这里有一个类似的问题,How do i get the invoked operation name within a WCF Message Inspector,这是针对服务器端(接收请求的一方)的。我试图做类似的事情,例如
但是在传出请求期间,似乎 OperationContext.Current 为空,所以我不能使用它。知道如何得到它吗?知道如何干净地做到这一点(相反,比如解析 SOAP xml)?
wcf - Thread.CurrentPrincipal 中的声明正在丢失,这些声明在 WCF 的 AfterReceiveRequest 中设置
我正在使用Microsoft.IdentityModel.dll
Set & Get 中的声明WCF
。我还实施MessageInspectors
了设置索赔。因此,我正在ClaimsIdentity
从客户端添加如下请求标头。
而服务端,
我正在尝试访问方法 implementation( OperationContract
) 中 的声明值,AfterReceiveRequest
如下所示。但索赔在 中不可用Thread.CurrentPrincipal
。
userIdClaim
此处为空。
有任何想法吗?
.net - 如何在 BeforeSendRequest 中取消请求
使用IClientMessageInspector
接口时,可以取消BeforeSendRequest
方法中的请求吗?null
无论如何,返回都会发送请求。
c# - 将 application/x-www-form-urlencoded 发布到 SOAP / JSON WCF 服务
背景
不久前我写了一个 WCF 服务,它大量使用了自定义操作调用程序、错误处理程序和行为——其中许多严重依赖于特定类型的输入消息或消息的基本消息类型(每个 DataContract 都继承自基类和许多接口)。还为所涉及的各种接口和类设置了许多单元和集成测试。另外,软件每次修改都要经过严格的签核流程,重写服务层也不是我想的好玩的。
它当前配置为允许 JSON 和 SOAP 请求进入。
问题
由于旧版软件的限制,客户希望使用 application/x-www-form-urlencoded 内容类型向此服务发布。通常,服务会接受如下所示的 JSON 请求:
而客户端可以发送的 application/x-www-form-urlencoded 消息体看起来有点像这样:
或者,客户通知我他们可以按如下方式格式化消息(如果有用的话):
还要考虑服务合同如下所示:
我想保留 MyCustomRequest,并避免用 Stream 替换它(根据下面的链接)。
我发现许多帖子建议如何使用 Stream OperationContract 参数来实现这一点,但在我的特定实例中,更改 OperationContract 参数的类型需要做很多工作。下面的帖子会详细介绍:
在 WCF 中使用 x-www-form-urlencoded Content-Type
使用 WCF 支持“application/x-www-form-urlencoded”发布数据的最佳方式?
http://www.codeproject.com/Articles/275279/Developing-WCF-Restful-Services-with-GET-and-POST
虽然我没有发现任何特别有用的东西。
问题
有什么方法可以在消息到达操作合同之前拦截消息,并将其从客户端的输入转换为我的自定义类,然后让应用程序的其余部分按正常方式处理它?
自定义消息检查器?操作选择器?自从我进入 WCF 的胆量以来已经有一段时间了,所以我现在有点生疏了。我花了一段时间寻找下图,因为我记得使用它来提醒我调用堆栈 - 如果它仍然相关!
c# - 将值传递给 WCF 中的 BeforeSendRequest
我想将附加值(GUID,每个请求不同)传递给BeforeSendRequest
WCFIClientMessageInspector
接口。此值不包含在请求对象中。如何将此值传递给BeforeSendRequest
方法?
.net - 没有为 void 方法调用 AfterReceiveReply
我们需要在没有回复的情况下记录请求(在超时的情况下)。我们正在使用 IClientMessageInspector 的实现来执行此操作。不幸的是,在第二种情况下没有调用 AfterReceiveReply - 当服务方法无效(不返回任何内容)时。有什么方法可以识别 BeforeSendRequest 方法中的 void 方法?
c# - IClientMessageInspector 在 WCF 中不起作用
我有一个实现 IClientMessageInspector 的类 MessageInspector。
我在 WCF 的 web.config 中配置了这个:
在运行 wcf(托管在 IIS 中)时,它无法在我们的配置中识别我的“MessageInspector”类。
“/WCFAuthentication”应用程序中的服务器错误。
配置错误
说明:处理服务此请求所需的配置文件期间发生错误。请查看下面的具体错误详细信息并适当地修改您的配置文件。
解析器错误消息:无法加载为扩展“MessageInspector”注册的类型“WCFAuthentication.MessageInspector、MessageInspector、Version=0.0.0.0、Culture=neutral、PublicKeyToken=null”。
wcf - WCF IClientMessageInspector 记录有关操作的差异
我正在记录来自我的应用程序的传出 WCF Soap 请求,并发现我正在记录的内容与实际通过线路发送到服务器的内容之间存在差异。
这是我正在记录的内容:
以下是实际输出的内容(使用 WireShark 捕获):
您会注意到 WireShark 捕获没有 Header 或 Action 元素。
我只是注意到这一点,因为我尝试通过 SoapUI 推送我记录的请求。
我正在使用此代码记录请求:
和:
和:
有谁知道是否有一种方法可以准确地捕捉到正在发生的事情(逐字记录),而无需如上所示的任何后处理?
wcf - OperationContextScope 与 MessageInpectors
帮助我理解这两者之间的差异。根据我的说法,无论您使用什么 .NET 应用程序(如 WCF、控制台、Web 等),都可以使用 Operation ContextScope,如果您正在调用任何其他服务(如 WCF 或基于 Java 的服务),则可以在任何地方使用它[这不会在 ASMX 服务的情况下工作]将标头添加到传出消息中。
如果是这样,那么为什么我们需要在任何客户端添加 MessageInspectors 来添加标头?OperationContextScope 比 MessageInspector 简单得多。有人阐明了这两个的正确用法吗?
c# - 使用来自 IClientMessageInspector 的 BeforeSendRequest 注入新的 xml
我想使用from 的BeforeSendRequest
方法“注入”自定义 XML 文本IClientMessageInspector
。这是我尝试过的代码:
但它确实返回了错误“无法识别的消息版本”。