标签: wcf-data-services

如何处理从WCF数据服务(OData)返回的json DateTime

我相信我在这里遗漏了一些明显的东西.当我从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)

wcf json wcf-data-services odata

20
推荐指数
3
解决办法
4万
查看次数

数据插入成功但jquery仍然返回错误

我使用以下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)

ajax jquery wcf-data-services

19
推荐指数
2
解决办法
2万
查看次数

使用Linq-to-SQL的ADO.NET数据服务

使用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 linq-to-sql wcf-data-services

18
推荐指数
1
解决办法
6122
查看次数

WCF数据服务 - 如何诊断请求错误?

我有一个应用程序,它将使用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)

wcf wcf-data-services

18
推荐指数
1
解决办法
1万
查看次数

在WCF数据服务中使用枚举

我正在尝试使用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服务,在这种情况下答案更清楚.

c# wcf enums wcf-data-services odata

17
推荐指数
3
解决办法
2万
查看次数

默认情况下,启用WCF数据服务以接受/返回JSON

我有一个WCF数据服务,我想默认为所有操作返回JSON.我可以在配置/服务属性中设置一个地方吗?

wcf json wcf-data-services odata

16
推荐指数
2
解决办法
1万
查看次数

如何强制ADO.NET实体框架重新生成代码?

我遇到了一个ADO.NET实体框架模型和一个使其可用的ADO.NET数据服务.当模型和数据服务从源代码控制中出来时,它们正在编译时没有任何问题或警告.但是,当我运行该服务时,我收到以下错误: 请求错误 - 服务器在处理请求时遇到错误. 请参阅服务器日志以获取更多详

不幸的是没有服务器日志(我知道),因为这是VS 2008 web开发服务器,并且确实没有任何代码可以调试.....通过一些试验和错误,它会出现生成的代码(模型) .Designer.cs)以某种方式过时了.如果我对EDM执行一些微不足道的更新,迫使它重新生成代码文件,当我重新运行服务时,它工作得很好.

我试图删除model.designer.cs文件,希望在构建期间,项目/实体构建器会检测丢失的文件并为我重新生成它.这没有发生.....有谁知道如何强制重新生成此代码?(这也让我对不必将生成的代码保持在源代码管理下感到高兴.)

谢谢

entity-framework wcf-data-services

15
推荐指数
2
解决办法
1万
查看次数

未找到"属性"细分的资源

使用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.

有什么想法有什么不对吗?

谢谢

c# wcf-data-services

15
推荐指数
2
解决办法
2万
查看次数

如何让OData DELETE工作?

我已经创建了一个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大师,而你在想"这家伙不知道他在做什么",请指点我在一些有用的在线阅读材料的方向.

提前致谢.

c# asp.net iis-7 wcf-data-services odata

15
推荐指数
1
解决办法
7704
查看次数

我可以在便携式类库中使用OData客户端代码吗?

我正在尝试构建一个面向.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中工作?

谢谢,

阿德里安

.net api wcf-data-services odata portable-class-library

14
推荐指数
1
解决办法
1832
查看次数