0

JayStorm の odata 準拠のクラウド データベース機能を使用して、概念実証を試みています。ここまではうまくいっていますが、odata サービス クライアント プロキシ シリアル化のカテゴリに当てはまる大きな問題が 1 つあります。

私の odata サービスの URL は次のとおりです

シンプルな .Net コンソール アプリを作成し、このサービスへのサービス参照を追加します。最初は問題ないように見えますが、GeoLocation のサーバー側のデータ型の間に非互換性があります (json ペイロードは次のとおりです: {"type":"Point","coordinates":[-71.56236648559569,42.451074707889646],"crs":{ "properties":{"name":"EPSG:4326"}) と、参照の追加ウィザードが選択するクライアント側のタイプ。それらは非常に異なるデータ型であり、クライアント側の選択クエリまたはクライアント側の挿入/更新だけが機能しないようです。たとえば、次のコードは SaveChanges(); 行で例外をスローします。

System.Data.Services.Client.DataServiceRequestException was unhandled
  HResult=-2146233079
  Message=An error occurred while processing this request.
  Source=Microsoft.Data.Services.Client
  StackTrace:
       at System.Data.Services.Client.SaveResult.HandleResponse()
       at System.Data.Services.Client.BaseSaveResult.EndRequest()
       at System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options)
       at System.Data.Services.Client.DataServiceContext.SaveChanges()
       at JumpSeatDataImporter.Program.Main(String[] args) in c:\Projects\JumpSeat\Dev\JumpSeatWeb\JumpSeatDataImporter\Program.cs:line 24
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.Data.Services.Client.DataServiceClientException
       HResult=-2146233079
       Message=Format Exception: Invalid 'Point' format!
    at Function.$data.GeographyBase.validateGeoJSON (/usr/lib/node_modules/jaydata/lib/TypeSystem/Types/Geography.js:75:29)
    at GeographyPoint.GeographyBase (/usr/lib/node_modules/jaydata/lib/TypeSystem/Types/Geography.js:6:25)
    at new GeographyPoint (/usr/lib/node_modules/jaydata/lib/TypeSystem/Types/Geography.js:94:29)
    at $data.oDataConverter.fromDb.$data.GeographyPoint (/usr/lib/node_modules/jaydata/lib/Types/StorageProviders/oData/oDataConverter.js:55:64)
    at Airport.$data.Entity.$data.Class.define.constructor (/usr/lib/node_modules/jaydata/lib/Types/Entity.js:189:41)
    at Airport.Entity (eval at <anonymous> (/usr/lib/node_modules/jaydata/lib/TypeSystem/TypeSystem.js:463:20))
    at new Airport (eval at <anonymous> (/usr/lib/node_modules/jaydata/lib/TypeSystem/TypeSystem.js:463:20))
    at EntitySetProcessor.$data.Class.define.invoke (/usr/lib/node_modules/jaydata/lib/JayService/OData/EntitySetProcessor.js:61:38)
    at JSObjectAdapter.$data.Class.define.processRequest (/usr/lib/node_modules/jaydata/lib/JayService/JSObjectAdapter.js:89:37)
    at JSObjectAdapter.$data.Class.define.handleRequest (/usr/lib/node_modules/jaydata/lib/JayService/JSObjectAdapter.js:165:26)
       StatusCode=500
       InnerException: 

コードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Spatial;
using System.Text;
using System.Threading.Tasks;

namespace AirportDataImporter
{
    class Program
    {
        static void Main(string[] args)
        {
            var db = new AirprotDB.mydatabaseService(new Uri("https://open.jaystack.net/c72e6c4b-27ba-49bb-9321-e167ed03d00b/6494690e-1d5f-418d-adca-0ac515b7b742/api/mydatabase/"));

            //{"Name":"sfd","Abbrev":"sd","GeoLocation":{"type":"Point","coordinates":[-71.56236648559569,42.451074707889646],"crs":{"properties":{"name":"EPSG:4326"},"type":"name"}}}

            var airport = new JumpSeatDB.Airport();
            airport.Abbrev = "Foo";
            airport.Name = "Bar";

            airport.GeoLocation = GeographyPoint.Create(51.87796, -176.64603);
            db.AddToAirport(airport);

            db.SaveChanges();

            //var foo = db.Airport.ToList();


        }
    }
}

GeoLocation プロパティを含むデータの往復を可能にするフィッティング (カスタム宣言された?) クラスをクライアント側プロキシに使用させるにはどうすればよいですか? これがないと、SQL サーバーとファイルから JayStorm にデータをアップロード/更新できません...

コンソール アプリにサービスを追加し、上記の提供されたコードを実行することで、私の問題を完全にエミュレートできるはずです。データが壊れる心配はありません。

ありがとう

4

1 に答える 1

0

geo タイプは現在 JSON 形式でのみ公開されており (これは中期的に変更される可能性があります)、.NET はデフォルトで XML を使用するため、次の 3 つのオプションが残されています。

  • Data Services Client 5.5.0 および Data Services Tools 5.3 を使用して .NET アプリを JSON 形式で動作させる (これにより、コンテキストで Format プロパティを受け入れる新しいプロキシが生成されます) - .NET ではこれを実現できませんでした、しかし、私はあなたが私よりも優れていることを願っています:)
  • HTML5 ページまたは node.js を使用して、JayData ライブラリで POI をインポートします
  • ファイルを処理する JayStorm サービス操作に csv ファイルを投稿します。HttpRequest を使用してサービス操作に投稿します
于 2013-06-18T08:43:40.450 に答える