【问题标题】:MVVMCross + Xamarin + WCF Data Services 5.6 = Not Implemented Exception?MVVMCross + Xamarin + WCF 数据服务 5.6 = 未实现异常?
【发布时间】:2014-10-01 16:41:42
【问题描述】:

我在带有 MVVMCross 的 PCL 项目中使用 WCF Data Services 5.6。在 WPF 客户端中,以下代码(在 viewModel 中)就像一个魅力(基于在 http://msdn.microsoft.com/en-us/library/dd756367(v=vs.110).aspx 找到的示例):

DataServiceQuery<T> query = this.LoadItemsQuery;
query.BeginExecute((result) =>
        {
            try
            {
                DataServiceQuery<T> resultQuery = result.AsyncState as DataServiceQuery<T>;

                foreach (T item in resultQuery.EndExecute(result))
                {
                    // Do something here
                }
            }
            catch (Exception ex)
            {
                PublishException(ex);
            }
        }
        , query);

但是在Android客户端,“resultQuery.EndExecute(result)”会抛出如下异常:

System.InvalidOperationException: An error occurred while processing this request. ---> System.NotImplementedException: The requested feature is not implemented.
  at System.Net.WebResponse.get_SupportsHeaders () [0x00000] in <filename unknown>:0 
  at System.Data.Services.Client.HttpWebRequestMessage.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  at System.Data.Services.Client.ODataRequestMessageWrapper.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  at System.Data.Services.Client.DataServiceContext.GetResponseHelper (System.Data.Services.Client.ODataRequestMessageWrapper request, IAsyncResult asyncResult, Boolean handleWebException) [0x00000] in <filename unknown>:0 
  at System.Data.Services.Client.DataServiceContext.EndGetResponse (System.Data.Services.Client.ODataRequestMessageWrapper request, IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  at System.Data.Services.Client.RequestInfo.EndGetResponse (System.Data.Services.Client.ODataRequestMessageWrapper request, IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  at System.Data.Services.Client.QueryResult.AsyncEndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Data.Services.Client.BaseAsyncResult.EndExecute[QueryResult] (System.Object source, System.String method, IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
  at System.Data.Services.Client.QueryResult.EndExecuteQuery[Appointment] (System.Object source, System.String method, IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 }

有什么想法吗?有人用 MonoDroid 测试过 WCF Data Services 5.6 吗?

提前致谢

【问题讨论】:

    标签: xamarin.android xamarin wcf-data-services mvvmcross


    【解决方案1】:

    https://github.com/mono/mono/blob/master/mcs/class/System/System.Net/WebResponse.cs

    从源码可以看出确实没有实现。

    Mono 的 WCF 支持不完整,因此将其用于 WCF 数据服务是有风险的。

    如果可能,请在服务器端使用 ASP.NET Web API 而不是 WCF,然后在客户端通过 HttpClient 获得更好的支持。

    【讨论】:

      【解决方案2】:

      这个bug在HttpWebResponse.cs中,应该添加以下内容:

      public override bool SupportsHeaders
      {
          get
          {
              return true;
          }
      }
      

      【讨论】:

        【解决方案3】:

        应该适用于最新版本:Android 4.12.3 的 Mono。我测试并发现它适用于 Microsoft.Data.Service.Client.Portable.dll。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-25
          • 2014-11-09
          • 2010-12-11
          • 2012-09-20
          • 1970-01-01
          相关资源
          最近更新 更多