我一直在为这一天挣扎几天,并认为我已经把问题隔离到序列化问题。返回一个复杂类型的WCF数据服务不是ATOM格式
我有一个WCF数据服务,我正在调用一个存储过程,拉入数据集(n行)。数据服务使用功能导入并返回一个复杂类型。该服务工作正常,返回在浏览器中执行以下操作:
< GetChanges的xmlns = “http://schemas.microsoft.com/ado/2007/08/dataservices” >
<元素的xmlns:P2 =“HTTP ://schemas.microsoft.com/ado/2007/08/dataservices/metadata” P2:类型= “tasksModel.fxGetChangeList_Result” >
<CHANGE> DELETE </CHANGE >
< ID P2:类型=“Edm.Int32”/ID >
< UpdateVersion P2:类型= “Edm.Int64”/UpdateVersion >
< /元件>
</GetChanges >
但是,当我从客户端(Windows Phone应用程序)调用此数据不会返回任何结果。我已经证实,该网址直接拉下了上面的数据。
这里是客户端调用...
_changes.LoadCompleted += new EventHandler<System.Data.Services.Client.LoadCompletedEventArgs>(Items_LoadCompleted);
_changes.LoadAsync(new Uri(theUrl, UriKind.Absolute));
这里是回调
void Items_LoadCompleted(object sender, System.Data.Services.Client.LoadCompletedEventArgs e)
{
int count = _changes.Count;
_changes.ToList().ForEach(x=>{
....
});
不会引发任何错误根本不返回任何结果。
我已经意识到上述来自数据服务的XML不是原子格式。我唯一能想到的是客户端不能序列化复杂类型的数据,因为它不是Atom格式。
所以我有3个问题: 1.有没有其他人遇到过这个? 2.是否有客户端解决方案来序列化复杂类型? 3.是否有服务器端的解决方案将复杂的序列化为Atom?
非常感谢。我会花更多的时间尝试调试。总的来说,我发现不得不学习客户行为,并且遵守大部分协议都比努力付出更多的努力。我用几个小时替代编写了几个小时的调试代码。 我认为对于我的大部分用例来说,我最好只用WebHttpBindings公开一个非数据服务WCF服务,并以这种方式公开我的对象。我获得了对有效载荷大小的更多控制,并更多地控制了实际发送的对象。 我的主要用途是将SQL Azure数据公开给Web和移动客户端。我可以忽略一些东西吗 – frigon 2012-02-27 16:51:19
这很大程度上取决于您的要求。 OData(WCF DS)非常棒,如果您需要客户提出您不了解的问题的能力。如果您知道客户提出的问题,您可以在非OData WCF服务中这样做。另一方面,在OData中,在某些情况下很难实现某些特定的业务逻辑,WCF通常更容易。因此,如果您只想将您的服务绑定到客户端,并且您同时控制两者,并且可以在服务器上对查询进行硬编码,那么普通的WCF服务将起作用。如果你需要客户的一些自由,你会想要OData。 – 2012-02-28 12:01:56