【发布时间】:2016-01-17 04:43:58
【问题描述】:
我创建了一些 WCF REST 服务,它们接受 JSON 对象请求并返回 JSON 对象响应。
Public Function SaveClientInformation(info as ClientInformation) As Boolean Implements IContactInformation.SaveClientInformation
'Here info object is the de-serialized JSON that was sent
'At this point we also need access to the RAW JSON string that was sent from the Java client
dim rawJSONRequest = ?
'We take the info object and persist it out postgress database
End Function
我需要从 Web 服务方法中捕获原始 JSON 字符串。 目前我可以访问反序列化的对象,但我还需要提交到 Web 服务的 RAW JSON 字符串。
我查看了 WCF 文档并环顾四周,不幸的是,这似乎是不可能的。 WCF 不允许我访问发送到服务器的 RAW 请求(字符串)。
我已经尝试创建一个 WCF 消息拦截器,但是这不能让我访问 RAW 请求字符串,我还需要从 Web 服务方法访问这个 RAW 字符串。
我需要通过 Web 服务方法访问 RAW 字符串以及反序列化的 JSON 对象。
这在 WCF 中可行吗?
我知道这可以使用更新的 ASP.NET Web API 来实现。但我无法更改我们的应用程序,因为我们所有的 Web 服务都建立在 WCF REST (JSON) 之上,并且被许多客户端使用。
RAW 请求是必需的,因为在客户端,Request RAW 字符串由 Java 散列,并且该散列在标头中发送。因此,访问这个 RAW 请求的主要原因是重新计算哈希值,以检查消息在传输过程中是否没有被更改。
仅供参考 - 我们正在使用 HTTPs,但我们需要保证消息没有受到干扰,这是在我们的其他 Java Web 服务中实现的技术,我们需要在 .NET WCF 中做同样的事情REST 也是。
【问题讨论】:
-
你能用代码添加更多细节吗
-
希望示例代码足够了。请让我知道您还需要什么,非常感谢您的帮助。
-
根本没有请求字符串。在 WCF 管道中的某个时刻,您有请求字节 (byte[]),然后由消息编码器读取,然后转换为消息对象。即使您在消息拦截器中访问这些字节,那将是不同的层,与业务逻辑层无关。如果可能,考虑将输入参数类型更改为字符串,并在服务端自己将其解析为 JSON。
-
对不起,我已经更新了这个问题的更多细节。希望她对这个问题有更多的了解。将请求作为纯字符串发送会破坏拥有 WCF REST 服务的目的。我需要 WCF REST 并且还能够读取原始请求字符串(是的,它是一个流。我怎样才能访问发送到服务器的原始请求流?),谢谢