我在使用 jQuery AJAX 从“启用 AJAX 的 WCF 服务”中的 WebGet 函数检索数据时遇到问题。服务代码如下图:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
namespace SPA
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class db
{
// To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
// To create an operation that returns XML,
// add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
// and include the following line in the operation body:
// WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
[WebGet]
[OperationContract]
public IEnumerable<Geofence> GetGeofences()
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/json";
var dc = new AtomnetDataContext();
return dc.Geofences;
}
// Add more operations here and mark them with [OperationContract]
}
}
这是试图调用它的代码:
$(function () {
$.get("db.svc/GetGeofences", alert);
});
在服务方法代码中放置一个断点表明它确实被调用了。我确认通过将 dc.Geofences.ToArray() 实现为变量(示例中未显示)已成功获取数据。Geofence
是 Linq2sql 生成的类型。
将调用转换为显式 ajax 调用$.ajax({ ... });
会将错误对象返回给错误函数,但其中包含的消息仅说“错误”,这没有什么指导意义。
使用相当于 Firebug 的 IE10 检查网络流量显示调用是“(中止)”。这个问题必须是服务配置,因为调用会试图返回一个值。
似乎有一个序列化异常,然后是一个可能是必然的通信异常。
A first chance exception of type 'System.Runtime.Serialization.SerializationException'
occurred in System.Runtime.Serialization.dll A first chance exception of type
'System.ServiceModel.CommunicationException' occurred in System.ServiceModel.Web.dll