我相信我在这里遗漏了一些明显的东西.当我从OData服务请求JSON响应时,我得到的DateTime属性的结果与我请求XML时的结果不同.我将使用NerdDinner OData feed作为示例.
JSON:
http://www.nerddinner.com/Services/OData.svc/Dinners(1)?$format=json
"EventDate": "\/Date(1235764800000)\/"
Run Code Online (Sandbox Code Playgroud)
XML:
http://www.nerddinner.com/Services/OData.svc/Dinners(1)
<d:EventDate m:type="Edm.DateTime">2009-02-27T20:00:00</d:EventDate>
Run Code Online (Sandbox Code Playgroud)
当我做警报(新日期(1235764800000))时,我得到这个结果:

当我使用LINQPad运行相同的查询时,我也得到了8PM的结果.为什么JSON结果中的时区不正确?似乎假设响应是GMT.我应该在客户端上处理这个(通过javascript)还是我可以在服务器上设置的东西?
我在客户端上使用jQuery,在服务器上使用WCF数据服务(和实体框架).
更新:
我在客户端使用Datejs来处理UTC日期时间格式.我想知道这是否是解决这个问题的正确方法.
function getDateString(jsonDate) {
if (jsonDate == undefined) {
return "";
}
var utcTime = parseInt(jsonDate.substr(6));
var date = new Date(utcTime);
var minutesOffset = date.getTimezoneOffset();
return date.addMinutes(minutesOffset).toString("M/d/yyyy h:mm tt");
}
Run Code Online (Sandbox Code Playgroud) 我使用以下jQuery通过数据服务插入数据.事件虽然我得到状态响应201并且数据已成功插入我的数据库,但系统仍将其视为错误并给我"失败"警报?
我在这里错过了什么?
$.ajax({
type: "POST",
url: "http://localhost:49223/Form/WebDataService.svc/XMLForm(guid'1eaef3a0-d6df-45bf-a8f6-3e7292c0d77e')/XMLRecord/",
data: JSON.stringify(record),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function() {
alert("Success");
},
error: function(xhr) {
alert("fail");
}
});
Run Code Online (Sandbox Code Playgroud)
更新:
来自Fire Bug的调试消息:
Preferences
POST http://localhost:49223/Form/WebDataService.svc/X...ef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
POST http://localhost:49223/Form/WebDataService.svc/XMLForm(guid%271eaef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
jquery....min.js (line 127)
POST http://localhost:49223/Form/WebDataService.svc/X...ef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
POST http://localhost:49223/Form/WebDataService.svc/XMLForm(guid%271eaef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
201 Created 6.7s
POST http://localhost:49223/Form/WebDataService.svc/X...ef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
POST http://localhost:49223/Form/WebDataService.svc/XMLForm(guid%271eaef3a0-d6df-45bf-a8f6-3e7292c0d77e%27)/XMLRecord/
201 Created
get readyState 4
get responseText "{ "d" : {\r\n"__metadata"...\')/XMLForm"\r\n}\r\n}\r\n} }"
get responseXML null
get status 201
get statusText "Created"
Run Code Online (Sandbox Code Playgroud) 使用linq-to-sql和ado.net数据服务时遇到一个奇怪的错误.我有一个简单的silverlight应用程序连接到远程数据库.我首先添加了linq-to-sql类并将表拖到设计器上.然后我添加了一个ADO.NET数据服务,更新了DataService引用以指向L2S数据上下文.
编译没有问题.
当我在IE中打开服务时,我立即收到错误,因此我将以下属性添加到数据服务:
[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
Run Code Online (Sandbox Code Playgroud)
这会显示详细的错误消息:
异常消息是'在数据上下文类型'DataClasses1DataContext',有一个顶级IQueryable属性'table1',其元素类型不是实体类型.确保IQueryable属性是实体类型,或者在数据上下文类型上指定IgnoreProperties属性以忽略此属性
这发生在我在L2S设计器中使用的任何数据库表中!
这是什么错误,为什么我会得到它?
我有一个应用程序,它将使用WCF向客户端提供各种数据块.但是,由于将返回的一些数据集的大小(这是因为客户端应用程序需要在列表中显示大量对象,而不是因为我在设计中只是懒惰)我达到邮件大小限制.
我对此有所期待,并计划实施数据分页/响应流(我相信Pablo Cibraro曾就此发表过一篇文章).但是,我看到一些使WCF数据服务看起来很酷的演示.我只是无法让它适合我.
我没有数据库后端,我不在IIS内部托管.我已经能够得到一些基本对象的例子,但是一旦我从我的应用程序中插入对象,它就不起作用 - 我得到一个请求错误,这似乎是无益的 - 它只是建议检查服务器日志而不建议我如何做到这一点.我怀疑它假设我正在使用IIS托管,IIS可能会记录它承载的数据服务的消息.
我尝试使用的一个相当简单的类是用于日志消息(我希望诊断仪表板式客户端能够远程显示服务器日志,比如说,过去24小时):
public class Message
{
public string Source { get; set; }
public MessageType Type { get; set; }
public DateTime Timestamp { get; set; }
public string MessageText { get; set; }
public override string ToString()
{
return string.Format("[{0}] [{1}] [{2}] {3}", Timestamp.ToString(), Source, Type, MessageText);
}
}
Run Code Online (Sandbox Code Playgroud)
使用这个类会产生错误,而如果我将它指向一个类,我将其模拟为测试(如Pablo的演示:http://msdn.microsoft.com/en-us/data/cc745968.aspx)然后它工作良好.有关为什么会这样做的任何想法,或者我如何从错误中获得有用的东西?
下面是我的服务定义和我用来公开我想要返回的集合的IQueryable <>实现的类(目前我只完成了Log,这是类型List<Message>)
public class DataServiceFacade
{
public IQueryable<Message> Log
{
get
{
return Program.Log.AsQueryable();
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用POCO数据模型手动构建WCF数据服务,我无法弄清楚如何正确公开enum值.假设一个简单的模型,如:
public class Order
{
public int ID {get; set;}
public string Description {get; set;}
public OrderStatus Status {get; set;}
}
public enum OrderStatus
{
New,
InProcess,
Complete
}
Run Code Online (Sandbox Code Playgroud)
如何OrderStatus通过OData WCF数据服务公开财产中的有价值信息?
如果不执行任何操作,则数据服务会生成运行时错误(枚举为无效属性).我见过的唯一解决错误的答案是将enum属性标记为已忽略,例如:
[System.Data.Services.IgnoreProperties("Status")]
public class Order ...
Run Code Online (Sandbox Code Playgroud)
这有效,但它会强制您从服务层"省略"有价值的信息.是否有其他选项可以在WCF数据服务中使用枚举值?
编辑:请注意这是WCF数据服务(aka Astoria).这不是原始WCF服务,在这种情况下答案更清楚.
我有一个WCF数据服务,我想默认为所有操作返回JSON.我可以在配置/服务属性中设置一个地方吗?
我遇到了一个ADO.NET实体框架模型和一个使其可用的ADO.NET数据服务.当模型和数据服务从源代码控制中出来时,它们正在编译时没有任何问题或警告.但是,当我运行该服务时,我收到以下错误:
不幸的是没有服务器日志(我知道),因为这是VS 2008 web开发服务器,并且确实没有任何代码可以调试.....通过一些试验和错误,它会出现生成的代码(模型) .Designer.cs)以某种方式过时了.如果我对EDM执行一些微不足道的更新,迫使它重新生成代码文件,当我重新运行服务时,它工作得很好.
我试图删除model.designer.cs文件,希望在构建期间,项目/实体构建器会检测丢失的文件并为我重新生成它.这没有发生.....有谁知道如何强制重新生成此代码?(这也让我对不必将生成的代码保持在源代码管理下感到高兴.)
谢谢
使用ADO.Net Data Services客户端通过调用以下内容刷新实体时LoadProperty:
ctx.BeginLoadProperty(this, "Owner", (IAsyncResult ar) => ...
Run Code Online (Sandbox Code Playgroud)
如果属性是,它会在服务器上抛出错误 null
错误:异常抛出:System.Data.Services.DataServiceException:找不到段'Owner'的资源.在System.Data.Services.RequestDescription.GetSingleResultFromEnumerable(段信息段信息)在System.Data.Services.DataService1.CompareETagAndWriteResponse(RequestDescription描述,ContentFormat responseFormat,IDataService的DataService)
在System.Data.Services.DataService1.SerializeResponseBody(RequestDescription描述,IDataService的DataService )在System.Data.Services.DataService1.HandleNonBatchRequest(RequestDescription描述)在System.Data.Services.DataService`1.HandleRequest()
问题是客户端不知道该属性是否null尚未填充.财产所有者是从a Vehicle到a 的链接Customer.
有什么想法有什么不对吗?
谢谢
我已经创建了一个OData服务(WCF数据服务)和一个用户来测试它.
以前,当我尝试删除时,我收到了WebDAV 405错误消息"Method Not Allowed".
所以我用Google搜索并发现:
http://nikhilthaker86.wordpress.com/2010/03/27/issue-hosting-restful-services-on-iis-7/
我按照说明从IIS 7中的网站(服务)中删除了WebDav模块.
现在我收到此错误消息:
"HTTP错误500.21 - 内部服务器错误
处理程序"WebDAV"在其模块列表中有一个错误的模块"WebDAVModule"
模块:IIS Web核心通知:ExecuteRequestHandler"
如果你有一个解决方案会让这个问题消失,我会非常感激...否则,如果你是一个IIS大师,而你在想"这家伙不知道他在做什么",请指点我在一些有用的在线阅读材料的方向.
提前致谢.
我正在尝试构建一个面向.NET,Silverlight,Windows RT和Windows Phone 的便携式类库,它充当OData客户端.我正在使用Visual Studio 2012.
当我创建对我的OData服务器端的服务引用时,我收到以下错误消息:
无法向指定的OData源添加服务引用,因为未为此目标框架安装WCF数据服务.要安装受支持的WCF数据服务版本,请参阅 http://go.microsoft.com/fwlink/?LinkId=253653.
当我转到错误消息中列出的URL时,我可以选择用于Windows RT的库和用于Windows Phone的库,因此这似乎不适用于可移植类库.
有没有任何秘密的解决方法,或者我是否必须使用裸HTTP请求编写我自己的Odata客户端代码?
此外,如果我必须使用裸HTTP请求,是否至少有一些我可以为json或xml序列化/反序列化构建的API在可移植类libarary中工作?
谢谢,
阿德里安