WCF GET在服务器上返回XML而不是JSON

时间:2015-07-02 21:08:01

标签: json xml wcf get

我有一个定义了webHttpBinding的WCF服务。界面有一个方法:

[OperationContract(Action = "*")]
    [WebGet(UriTemplate = "/",RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Stream GetServerInfo();

返回带有编码JSON的流:

WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");

        ServerData r = ServerData.Instance;
        r.upTime = (DateTime.Now - r._startupTime).ToString(@"dd\.hh\:mm\:ss");
        using (Process proc = Process.GetCurrentProcess())
        {
            r.usedMemory = ((double)proc.PrivateMemorySize64) / 1024 / 1024;
        }
        r.activeSessions = getServiceData().Count();
        string jsCode = "displayData" + "("+
            new JavaScriptSerializer().Serialize(r)
            +")";
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/javascript";

        Console.WriteLine(jsCode);
        return new MemoryStream(Encoding.UTF8.GetBytes(jsCode));

在我的开发PC上使用时,它可以正常工作。我感觉像是:

displayData({"_startupTime":"\/Date(1435867525056)\/","serverVersion":"1.0.0.8","startUpTime":"2. 7. 2015 22:05:25","acceptedConnections":0,"upTime":"00.00:00:00","usedMemory":21.265625,"activeSessions":0})

但是,在部署到远程服务器后,我只得到以下响应,我想得到一个JSON:

<GetServerInfoResponse xmlns="http://tempuri.org/"><GetServerInfoResult>ZGlzcGxheURhdGEoeyJfc3RhcnR1cFRpbWUiOiJcL0RhdGUoMTQzNTg2ODUwMjc5NClcLyIsInNlcnZlclZlcnNpb24iOiIxLjAuMC44Iiwic3RhcnRVcFRpbWUiOiI3LzIvMjAxNSAxOjIxOjQyIFBNIiwiYWNjZXB0ZWRDb25uZWN0aW9ucyI6MCwidXBUaW1lIjoiMDAuMDA6MDA6MDAiLCJ1c2VkTWVtb3J5IjoyNy40NzY1NjI1LCJhY3RpdmVTZXNzaW9ucyI6MH0p</GetServerInfoResult></GetServerInfoResponse>

注意我直接在服务器上本地调用请求。但是在通过网络进行远程呼叫时,响应是相同的。如果我将字符串的日志输出放到控制台,我可以看到输出字符串是正确的。 配置文件是相同的(地址除外)。

- 编辑 使用try-fail方法,我发现XML响应中的字符串是在Base64中编码的JSON字符串。

有人可以帮我解决错误吗?

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我找不到任何解决方案。但是,在重新启动操作系统(Win Server 2012)并重建它之后就像魅力一样。