发布
社区首页 >问答首页 >为什么我的JsonpMediaTypeFormatter不处理我的WCF请求?

为什么我的JsonpMediaTypeFormatter不处理我的WCF请求?
EN

Stack Overflow用户
提问于 2012-06-28 20:15:38
回答 1查看 659关注 0票数 1

G‘’day的朋友(我是美国人,但G‘’day听起来很酷)

我刚刚安装了WCFDataServices5.0包以及最新的Web,并且遇到了一个非常恼人的问题。从谷歌搜索,我肯定不是唯一一个经历过这个问题的人,但我发现的所有解决方案似乎都没有效果。

我的问题是,主机应用程序不接受包含$字符的请求,而且不管我尝试了什么,它都不会将请求传递给我的JsonpMediaTypeFormatter。因此,我不知道格式化程序是否会修复实际问题。

使用fiddler,我可以看到请求是使用"Accepts“标题"*/*”发出的,我认为它没有通过格式化程序,也不能将"*/*“添加到MediaTypeHeaderValue中,因为它抱怨它是一个范围。

如有任何帮助或建议,敬请见谅!

设置的完整描述

我创建了一个用于测试的沙箱解决方案,该解决方案由两个ASP.NET web应用程序项目组成。第一个项目名为ClientApplication,第二个项目名为HostApplication (我相信您可以推断出什么是做什么的)。它们中的每一个都由我的本地IIS托管在不同的网站和IP地址中。我尽我所能来创建它们,就好像它们完全脱离了物理,而不需要真正的服务器。

HostApplication

有一个简单的EDMX文件映射到一个简单的数据库,其中有几个基本的表,没什么稀奇的。我还有以下的服务班:

代码语言:javascript
代码运行次数:0
复制
public class ODataService : DataService<Data.SandboxEntities>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        config.UseVerboseErrors = true;
        config.SetEntitySetAccessRule("Customers", EntitySetRights.All);
        config.SetEntitySetAccessRule("Employees", EntitySetRights.All);
        config.SetEntitySetAccessRule("RandomDatas", EntitySetRights.All);
        config.SetEntitySetAccessRule("Schedules", EntitySetRights.All);
        config.SetEntitySetAccessRule("Shifts", EntitySetRights.All);
    }
}

我对JsonpMediaTypeFormatter使用的代码与Peter关于问题:JSONP with ASP.NET Web API的评论中使用的代码相同

最后,我在JsonpMediaTypeFormatter文件中注册了Global.asax

代码语言:javascript
代码运行次数:0
复制
    protected void Application_Start(object sender, EventArgs e)
    {
        var config = GlobalConfiguration.Configuration;
        config.Formatters.Insert(0, new JsonpMediaTypeFormatter());
    }

客户端应用

为了将这一切结合在一起,我在客户端应用程序中有一个非常简单的页面,包含以下代码:

代码语言:javascript
代码运行次数:0
复制
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Service Client Application</title>
    <script src="Scripts/jquery-1.7.2.js" type="text/javascript"></script>
    <script type="text/javascript">
        function makeServiceCall()
        {
            try
            {
                /*
                $.getJSON('http://10.10.1.7/ODataService.svc/Customers?$format=json&$callback=?',
                function (response)
                {
                    $.each(response.d, function (index, value)
                    {
                        var div = document.createElement('div');
                        div.innerHTML = value.ClientName;
                        $('#result').append(div);
                    })
                });
                */

                $.ajax({
                    type: "POST",
                    url: "http://10.10.1.7/ODataService.svc/Customers",
                    dataType: "json",
                    contentType: "application/json",
                    success: function (result) { alert("Winning."); },
                    error: function (result) { alert("Losing..."); }
                });
            }
            catch (err)
            {
                alert(err);
            }
        }
    </script>
</head>
<body>
    <form id="MainForm" runat="server">
        <div id="result" style="border:1px solid black;background-color:#E8E8E8;"></div>
        <button onclick="makeServiceCall();return false;">Call Service</button>
    </form>
</body>
</html>

您可能会注意到,其中有一些注释过的javascript。这是因为我尝试了两种不同的方式进行服务调用(这两种方式都不起作用),并且我想要向你们注意这一点。

再次感谢!杰森

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 06:59:08

您试图使用的JSONP助手是设计用于使用WebAPI的。您的服务使用WCF数据服务。即使他们做类似的事情,他们是不一样的。JSONP助手将无法使用WCF数据服务。在这里可以找到工作的那个:http://archive.msdn.microsoft.com/DataServicesJSONP

注意,在WCF DS5.0中,JSON周围的行为发生了变化,上面页面上的注释显示了如何修复代码以使用5.0。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11252189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档