全部, 我搜索了高低,最后决定在这里发布一个查询。
我正在编写一个非常基本的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
答案 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印象深刻,并计划现在深入探索!!