0

我正在尝试创建一个不需要回发并与服务器通信以获取复杂对象的动态网页。我开始创建一个启用 AJAX 的 WCF 服务,然后编写一些 jquery 来与该服务对话。我按照本教程http://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQuery得到了它。

然后我意识到我可以单独使用 MVC 来执行此操作,将 JsonResult 类型作为控制器上的操作,遵循本教程:http ://geekswithblogs.net/michelotti/archive/2008/06/28/mvc-json- --jsonresult-and-jquery.aspx

当我试图让 .cshtml 页面保持原样并插入不同的服务(从 WCF 切换到 MVC)时,我的 javascript 开始崩溃(当它试图在 JS 中评估 response.length 时)。我使用 WebDevHelper 工具检查 JSON 文件的响应内容并找到关键差异。

MVC JsonResponse 给了我这个结果:["anthony"] 启用 AJAX 的 WCF 服务给了我这个:{"GetUserResult":["anthony"]}

WCF 方法如下所示:

    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
    string[] GetUser(string Id)
    { return new string[] { "foo", "bar" }; } 

MVC 方法如下所示:

    public JsonResult GetUser(string Id)
    { return Json(new string[] { "foo", "bar" }); }

GetUser 返回一个字符串数组(在这种情况下,它总是返回数组中的单个项目)。WCF 服务上的方法名称称为“GetUser”,但我不完全理解我在看什么,我有不知道为什么 WCF 会提供与 MVC 不同的数据,最后,为什么 javascript 在评估 result.length 时可以正常工作,但由于在使用较小的 MVC 数据时找不到长度属性而崩溃?似乎 JSON 不包括 JsonResult 中的数组信息?

谢谢!

4

1 回答 1

1

我发现了问题;启用 WCF AJAX 的服务将方法名称作为您的返回值所在的对象返回。我尝试将属性 WebMessageBodyStyle.Wrapped 更改为 WebMessageBodyStyle.Bare 来解决这个问题 - 但出于某种奇怪的原因,它使我的服务无法找到?我认为这是一个配置问题 - 但为了让它正常工作,我将其更改为 WrappedRequest - 这会给我一个 Bare 响应并且服务按预期工作。不知道为什么服务会因为像这样的小变化而消失……非常古怪

于 2013-01-11T20:40:21.473 回答