是否可以创建RESTful WCF服务作为JSON passthrough不声明ServiceKnownType

时间:2013-11-19 20:58:45

标签: c# json wcf web-services rest

我有一个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;
                }
            }

1 个答案:

答案 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;
}