JQuery + WCF + HTTP 404错误

时间:2011-02-12 14:07:43

标签: jquery wcf

全部, 我搜索了高低,最后决定在这里发布一个查询。

我正在编写一个非常基本的HTML页面,我试图使用jQuery调用WCF服务并使用JSON解析它。

服务:

IMyDemo.cs

[ServiceContract]
    public interface IMyDemo
    {
        [WebInvoke(Method = "POST",
            BodyStyle = WebMessageBodyStyle.WrappedRequest,
            ResponseFormat = WebMessageFormat.Json)]
         Employee DoWork();


        [OperationContract]
        [WebInvoke(Method = "POST",
            BodyStyle = WebMessageBodyStyle.WrappedRequest,
            ResponseFormat = WebMessageFormat.Json)]
         Employee GetEmp(int age, string name);


    }

    [DataContract]
    public class Employee
    {
        [DataMember]
        public int EmpId { get; set; }

        [DataMember]
        public string EmpName { get; set; }

        [DataMember]
        public int EmpSalary { get; set; }

    }

MyDemo.svc.cs

 public Employee DoWork()
        {
            // Add your operation implementation here 
            Employee obj = new Employee() { EmpSalary = 12, EmpName = "SomeName" };
            return obj;
        }

 public Employee GetEmp(int age, string name)
        {
            Employee emp = new Employee();

            if (age > 0)
                emp.EmpSalary = 12 + age;

            if (!string.IsNullOrEmpty(name))
                emp.EmpName = "Server" + name;

            return emp;
        }

的web.config

<system.serviceModel>
    <services>
      <service behaviorConfiguration="EmployeesBehavior" name="MySample.MyDemo">
        <endpoint address="" binding="webHttpBinding" contract="MySample.IMyDemo" behaviorConfiguration="EmployeesBehavior"/>
      </service>

    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="EmployeesBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="EmployeesBehavior">
          <webHttp/>         
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

MyDemo.htm

<head>
    <title></title>
    <script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.js"></script>
    <script type="text/javascript" language="javascript" src="Scripts/json.js"></script>
    <script type="text/javascript">
        //create a global javascript object for the AJAX defaults.
        debugger;
var ajaxDefaults = {};

ajaxDefaults.base = { 
    type: "POST", 
    timeout : 1000,

    dataFilter: function (data) { 
        //see http://encosia.com/2009/06/29/never-worry-about-asp-net-ajaxs-d-again/ 
        data = JSON.parse(data); //use the JSON2 library if you aren’t using FF3+, IE8, Safari 3/Google Chrome 
        return data.hasOwnProperty("d") ? data.d : data; 
    },

    error: function (xhr) { 
        //see 
        if (!xhr) return; 
        if (xhr.responseText) { 
            var response = JSON.parse(xhr.responseText); 
            //console.log works in FF + Firebug only, replace this code 
            if (response)    alert(response); 
            else alert("Unknown server error"); 
        } 
    } 
};

ajaxDefaults.json = $.extend(ajaxDefaults.base, { 
    //see http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/ 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
});

var ops = {
    baseUrl: "/MyService/MySample/MyDemo.svc/",

    doWork: function () { 
        //see http://api.jquery.com/jQuery.extend/ 
        var ajaxOptions = $.extend(ajaxDefaults.json, {

            url: ops.baseUrl + "DoWork", 
            data: "{}",

            success: function (msg) { 
                console.log("success"); 
                console.log(typeof msg); 
                if (typeof msg !== "undefined") { 
                    console.log(msg); 
                } 
            } 
        });

        $.ajax(ajaxOptions); 
        return false; 
    },
    getEmp: function () { 
        var ajaxOpts = $.extend(ajaxDefaults.json, {

            url: ops.baseUrl + "GetEmp", 
            data: JSON.stringify({ age: 12, name: "NameName" }),

            success: function (msg) { 
                $("span#lbl").html("age: " + msg.Age + "name:" + msg.Name); 
            } 
        });

        $.ajax(ajaxOpts); 
        return false; 
    } 
}
    </script>

</head>
<body>
<span id="lbl">abc</span> 
<br /><br />
<input type="button" value="GetEmployee" id="btnGetEmployee" onclick="javascript:ops.getEmp();" /> 
</body>

我只是无法让这个运行起来。 当我调试时,我看到从调用返回的错误是 “/ jQuerySample”应用程序中的“

服务器错误。

        <h2> <i>HTTP Error 404 - Not Found.</i> </h2></span>

看起来我在这里缺少一些基本的东西。 我的示例基于 this

我一直在尝试修改代码,所以我希望你看一看,看看你能搞清楚我在这里做错了什么。

当我在IE中浏览服务时,我能够看到该服务已创建。 我也尝试按照 here

更改设置

感谢您的帮助。 一旦问题得到解决,为了其他开发者的利益,我就会在博客上发表这个问题 谢谢 -Soni

2 个答案:

答案 0 :(得分:3)

尝试添加以下代码 -

更改您的web.config以包含以下内容 -

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
</system.serviceModel>

然后,使用以下属性

装饰MyDemo.svc.cs
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

答案 1 :(得分:1)

这是我第一次尝试使用jQuery / JSON。我以为我可以使用一些样品。但事实证明,让代码运行起来并不容易!

所以我做了console.log并且结果我的msg对象是这样的 [ 宾语 评论:“我的评论” 评分:“0” 发布者:“SS” 时间:“/日期(1298299273798 + 0530)/”

所以我不得不做的不是msg.EvalId MSG [0] .EvalId.toString()

绝对可怕的“未定义”错误是要破解的东西!!

我肯定会在我的博客上张贴这个...但是经过几天的敲打我的头......结果我需要先了解一些基础知识!!

但是在这个过程中,学习了一些关于小提琴手,萤火虫,跨站点脚本的好东西..

我对jQuery / JSON印象深刻,并计划现在深入探索!!