我有一个C#WCF RESTful服务充当JSON传递,这意味着我的服务对另一个RESTful服务执行HTTPGet - 接收JSON响应,我需要将该响应返回给我的调用者。这种传递服务的原因是我们的企业不允许不同的域进行通信,这将作为解决方案公开公开。当此服务中包含已知类型时,一切正常,但这意味着当不应该关注接收到哪些JSON以发送回调用方时,中间服务将被强制更新/重新发布每个DataContract更改。
我尝试使用JSON.NET将JSON字符串反序列化为动态对象。尽管我的服务合同说它将返回动态类型并且所有符合,但我在运行时收到ServiceKnownType序列化错误。我无法在运行时动态声明KnownType b / c我希望我的服务对类型一无所知。
(A)域X中的Web应用程序 - > (B)面向公众的服务 - > (C)域Y上的RESTful WCF服务
是否有可能甚至没有反序列化收到的JSON并在响应中发送出去? 其他想法?任何代码都有助于更好地描述自己吗?
谢谢!
这要归功于L.B. :)
//Call other WS and get the Json response
var request = WebRequest.Create(requestUri);
request.ContentType = "application/json; charset=utf-8";
string text;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (var sr = new StreamReader(response.GetResponseStream()))
{
text = sr.ReadToEnd();
var data = new MemoryStream(Encoding.UTF8.GetBytes(text));
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
WebOperationContext.Current.OutgoingResponse.ContentLength = data.Length;
return data;
}
}
答案 0 :(得分:3)
您可以创建一个返回 Stream 的方法(可以认为是“返回任何对象”)
[OperationContract, WebGet(ResponseFormat = WebMessageFormat.Json)]
public Stream SomeMethod(......)
{
//Call other WS and get the Json response
var data = new MemoryStream(Encoding.UTF8.GetBytes(json));
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
WebOperationContext.Current.OutgoingResponse.ContentLength = data.Length;
return data;
}