问题标签 [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 回答
680 浏览

c# - 如何根据消息内容将 WCF 服务调用重定向到不同的操作

我在 WCF 服务中有一个操作(方法)。该操作有一个Json内容的参数。

对于这个参数 AuditLineUpdatedModel,我创建了一个预定义类,使用 DataContractAttributes 和 DataMemberAttributes 在反序列化期间将 json 消息映射到对象。

但是,我有一个问题是客户端在相同的字段名称下具有不同的 Json 消息结构,我无法将所有案例组合在一个类中。换句话说,Json 消息有一个可能有不同结构(不是值)的字段;因此,我试图将调用定向到可以满足 Json 消息多样性的不同操作。

到目前为止,我发现 WCF 提供了服务级别的路由。我想知道是否可以在操作级别路由呼叫。换句话说,我有一个服务,其中包含两个不同参数类型的操作。是否可以捕捉呼叫并检查消息内容,然后根据消息将呼叫引导到适当的操作?

为了您的信息,我尝试了 WCF 的IDispatchMessageInspector(消息检查器功能)。我能够检查消息内容,但无法重定向或更改目标(到 uri)地址。 注意:此外,客户端服务无法针对两种不同的情况发送不同的 uri 请求。

0 投票
0 回答
49 浏览

wcf - 在操作完成之前调用 DataServiceProcessingPipeline.ProcessedRequest

我在 WCF 数据服务上使用 OData。DataServiceProcessingPipeline.ProcessedRequest 事件在 odata 调用完成之前调用。例如:对于以下 URI,ProcessedRequest 在返回数据之前立即被调用。 http://somehost//odata/v3/data/Products()

我正在寻找拦截传入和传出请求,以便我可以限制来自特定客户端的 OData 调用(方法和数据调用)的数量。即使使用 IDispatchMessageInspector::BeforeSendReply 方法覆盖也是同样的问题。

有人可以帮我解决这个问题吗?

0 投票
1 回答
204 浏览

c# - 如何读取、更改和更新内部的项目值AfterReceiveRequest() 方法中的标记

我现在正在实现接口的AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)方法 IDispatchMessageInspector来拦截WCF SOAP消息。

System.ServiceModel.Channels.Message request如下

我想在不损坏其他消息原始属性的情况下读取并更改其值<tem:item1></tem:item1> <tem:item2></tem:item2>并更新回 System.ServiceModel.Channels.Message request

0 投票
0 回答
124 浏览

wcf - WCF 消息检查器并发模型

我已经在 wcf 服务中使用消息检查器机制实现了消息层安全性。

在客户端,IClientMessageInspector.BeforeSendRequest我添加了一个身份验证标头。在服务端,IDispatchMessageInspector.AfterReceiveRequest我检查消息中的身份验证标头。如果未找到或未达到预期,我会抛出一个SecurityException并尝试将其记录到数据库中。有趣的部分来了。登录到数据库时,我尝试再次从该 Web 服务中读取(这是提供配置信息的 Web 服务)。这是服务停止/死锁的地方。我可以看到调用读取配置(登录到 db 时),但我没有收到服务调用。我每次都收到超时异常。

经过一番谷歌搜索,我发现了这篇文章,其中提到消息检查器本质上是同步的。如果是这样,我怎样才能实现我所追求的?

0 投票
2 回答
296 浏览

c# - IDispatchMessageInspector CorrelationState,并在两者之间访问它

我的 AfterRecieveRequest 方法生成一个 GUID,并通过相关性状态变量将其传递给 BeforeSendReply 方法。

在这两个调用之间,我的 WCF 服务中发生了很多事情,我想从 Webservice 方法中访问这个 GUID。有没有办法让我在整个 WCF 服务中访问这个对象?

GUID 用于记录目的,因为我正在调用不同应用程序的 API 并希望记录结果,并将它们记录在 IDispatchMessageInspector 实现中生成的 GUID 下。

例如:

IDispatchMessageInspector 实现:

WCF 服务:

我将如何继续做到这一点?我一直在考虑使用 ThreadStatic 属性,以便线程将 GUID 保存在内存中的某个位置,但恐怕我对这个主题的理解不足以现在实现它。

0 投票
2 回答
1895 浏览

wcf - 自托管 WCF 服务上的 CORS

我正在尝试在我的 WCF 服务中实现 CORS 支持。

我得到了一些代码

https://enable-cors.org/server_wcf.html

但我在这条线上收到错误消息

错误:类只能从其他类继承

我如何继承IDispatchMessageInspector

谢谢

0 投票
1 回答
75 浏览

c# - WCF将对象从MessageInspector发送到操作方法

我正在使用一个非常复杂且嵌套的 Web 服务。消息并不总是在操作中正确反序列化,供应商建议我使用 MessageInspectors 来正确获取数据。这已经正常工作了一段时间,但我开始看到问题,因为在 MessageInspector 中,我在类中设置了一个静态 XElement 变量作为无法将 XElement 对象传递给实例的解决方法为这个调用开始的类。

调用操作后,我立即将静态变量复制到实例中,但我遇到了问题。

在 MessageInspector 反序列化 SOAP 并将其传递给操作方法的正确方法是什么?