問題タブ [astoria]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linq - 動的オブジェクト (DataTable など) に対して既存の LINQ クエリを実行する
ここにあるカスタム データ プロバイダーに対抗するために、一般的な OData プロバイダーに取り組んでいます。これは、データ プロバイダーが認識しているテーブルをデータ プロバイダーに照会するという点で、完全に動的です。ここまでで、OData サンプル コードに基づいて、基本的なストレージ構造を配置しました。
私の問題は次のとおりです。OData はクエリをサポートしており、IQueryable 実装を渡すことを期待しています。下側では、クエリのサポートはありません。冗談ではありません。プロバイダーはテーブルを返し、WHERE 句はサポートされていません。ここではパフォーマンスは問題になりません。テーブルは小さいです。OData プロバイダーで並べ替えても問題ありません。
私の主な問題はこれです。
- テーブルのデータを取得する SQL ステートメントを送信します。その結果が、ある種の ADO.NET データ リーダーです。
- 後でフィルタリングできるようにするには、このデータの IQueryable 実装を公開する必要があります。
それに最もよく触れる方法はありますか?.NET 3.5 のみ (当面は 4.0 の予定はありません)。標準のLINQを使用できるように、すべてのテーブル(バイトコードを発行する)に動的DTOクラスを作成することを真剣に考えていました。現在、エントリごとに辞書を使用しています (あまり効率的ではありません) が、それらに基づいてフィルター処理/並べ替えを行う実際の方法がわかりません。
wcf - OData / WCF Data Services メタデータのバージョン管理
OData プロトコルとその WCF Data Services 実装にメタデータのバージョン管理のサポートはありますか?
単一の Goods コレクションを公開する OData サービスがあり、Goods エンティティ タイプに Key (文字列)、Name (文字列)、AvailableSince(文字列) の 3 つのプロパティがあるとします。サービスは既に実行されており、このメタデータ スキーマに依存するコンシューマーがいくつかあります。次に、Goods エンティティ タイプを更新します。たとえば、AvailableSince(string) プロパティを別のものに置き換えるか、タイプを string から datetime に変更します。これにより、2 つのバージョンのメタデータが作成され、最初のバージョンのメタデータに依存するコンシューマーが作成されます。 2 番目のメタデータ スキーマに関して正しい要求を送信できません。
単一のサービス内で両方のメタデータ バージョンを提供する方法はありますか? はいの場合、消費者はリクエストでメタデータのバージョンを指定する方法と、WCF 側でどのように処理する必要がありますか?
事前にすべてに感謝します。
silverlight - WCFデータサービスでのカスケード削除
SilverlightのWCFデータサービスを使用して、1つのコマンドで永続オブジェクトグラフを削除することはできますか?私はこのウォークスルーから始めて、選択した注文を削除するためのコードを追加しました(詳細が含まれています):
変更をサーバーに保存し直すと、削除要求が発行されます。
ただし、データベース側では外部キー制約違反で失敗します。
また、リレーションのOnDeleteプロパティを.edmxのCascadeに設定しようとしました
そのような削除を行うことは可能ですか?参照されているオブジェクト(クライアントまたはサーバー)の削除は誰が行う必要がありますか?また、サーバーに送信する必要のある削除要求の数:1つまたはN + 1(Nは特定の順序の詳細の数)。たぶん私はいくつかの重要なポイントを逃しています。オブジェクトグラフの削除について説明しているWCFデータサービスのチュートリアルはありますか?
.net-4.0 - WCFデータサービスとプロジェクション。エンティティプロジェクションインスタンスからエンティティURIを取得するにはどうすればよいですか?
私はDataServiceContextを使用して、次のようにいくつかのエンティティプロジェクションをロードしています(エンティティには多くのプロパティがあり、トラフィックを最小限に抑えるために、現時点で必要なプロパティのみをロードします)。
必要なのは、詳細ビューのためにエンティティをロードするためのエンティティの有効なURIです。
ctx.TryGetUri(obj、out uri)を使用しようとしましたが、常にnullが返されます(おそらく非トラッキングプロジェクションが原因ですが、PKプロパティ(Id)をロードしたため、場合)。
問題は、PKを使用したプロジェクションオブジェクトを持つ、基になるデータエンティティのURIをどのように決定するかです。
wcf - WCF データ サービスのパフォーマンスを向上させる方法
私は WCF Data Services を初めて使用するので、遊んでいます。いくつかの初期テストの後、テスト データ サービスのパフォーマンスにがっかりしました。
WCF DS は HTTP ベースであるため、プロトコルに固有のオーバーヘッドがあることを認識していますが、私のテストは予想よりもはるかに遅いです。
環境:
- すべてが 1 つのボックスに: W7 を実行する 4GB RAM のクアッド コア 64 ビット ラップトップ。まともなマシン。
- 16 個のテーブルを持つ小規模な SQL データベース (SQLExpress 2008 R2)... テスト対象のテーブルには 243 行あります。
- すべてのデフォルトを使用して IIS でテスト サービスをホストしました。
コード:
- このデータベースの Entity Framework モデル (DataContext) を作成しました (VS2010 によるストック コード生成)。
- このモデルに基づいてデータ サービスを作成しました。
- このサービスの直接サービス参照 (ObjectContext) を持つクライアントを作成しました (VS2010 によるストック codegen)
- クライアントでは、EF モデルを直接呼び出したり、ネイティブ SQL (ADO.NET SqlConnection) を使用したりすることもできます。
テスト計画:
- 各反復はデータベースに接続し (接続を再利用するオプションがあります)、ターゲット テーブル (「EVENTS」) 内のすべての行をクエリし、それらをカウントします (したがって、遅延フェッチが実行されます)。
- ネイティブ SQL (SqlConnection/SqlCommand)、Entity Framework (DataContext)、および WCF Data Services (ObjectContext) に対してそれぞれ 25 回の反復を実行します。
結果:
- ネイティブ SQL の 25 回の反復: 436 ミリ秒
- Entity Framework の 25 回の反復: 656 ミリ秒
- WCF データ サービスの 25 回の反復: 12110 ミリ秒
ああ。これは、EF よりも約 20 倍遅いです。
WCF Data Services は HTTP であるため、HTTP 接続を再利用する機会がないため、クライアントは反復ごとに Web サーバーに再接続する必要があります。しかし、確かにここではそれ以上のことが起こっています。
EF 自体はかなり高速で、同じ EF コード/モデルがサービスと直接 EF クライアント テストの両方で再利用されます。データ サービスで Xml のシリアル化と逆シリアル化のオーバーヘッドが発生しますが、それだけ!?! 過去に Xml シリアライゼーションで良好なパフォーマンスが得られました。
JSON と Protocol-Buffer エンコーディングを使用していくつかのテストを実行し、パフォーマンスが向上するかどうかを確認しますが、これを高速化するためのアドバイスがコミュニティにあるかどうか知りたいです。
私は IIS が苦手なので、これを改善するために設定できる IIS の微調整 (キャッシュ、接続プールなど) があるのではないでしょうか?
wcf - useragentがIEの場合、WCFベースのRSS / ATOMにHTML応答を実装しますか?
AstoriaブログのRSSフィードを見ていますが、標準のRSS XMLフィードではなく、RSSフィードをWebページのように見せるために何かをしているようです。彼らはユーザーエージェントをチェックし、それに応じて応答を変更していると思います。
Webブラウザーに見栄えがよく、RSSリーダーでも機能する同様の「素敵な」RSSフィードを提供するにはどうすればよいですか。
odata - OData WCF Data Services と Excel PowerPivot で公開された大規模なデータセット
テスト目的AdventureWorksDW
で、Microsoft. VSで新しい「WCF Data Service」プロジェクトを作成し、Entity Frameworkモデルを作成して、それをDataService
基本クラスのジェネリックパラメーターに渡しました。モデルにいくつかのディメンションとファクト テーブルを含めましたFactInternetSales
。FactInternetSales テーブルには、既定で OData を介してアクセスするには多すぎるデータ (60398 レコード) が含まれているようです。コンソール アプリから FactInternetSales エンティティ セットを反復処理しようとするSystem.Net.WebException
と、次のメッセージが表示されます。
基になる接続が閉じられました: 接続が予期せず閉じられました。
反復する行数を制限する場合、1000 と言いましたが、問題はありません。
一方、この OData サービスを使用して FactInternetSales から PowerPivot にデータを読み込もうとすると、次のエラー メッセージが表示されます。
データ フィード 'FactInternetSales' のスキーマを取得できません。このフィードが存在することを確認してください。
InitializeService
OData サービスのメソッドで を設定config.SetEntitySetPageSize("*", 1000000)
しましたが、効果がないようです。次のコードもサービスの web.config に追加しましたが、成功しませんでした。
OData サービスを介してこの量のデータ フローを許可するのは構成の問題だと思いますが、既定の動作を変更する適切な場所が見つかりません。
wcf-data-services - プログラムでWCFデータサービスを構成する方法は?
次の WCF Data Services を C# で流暢に構成するにはどうすればよいですか?
odata - .NET OData 4 クライアントで圧縮をサポート
問題
自己ホスト型の OWIN/Katana Web API OData 4 サービスに http 圧縮のサポートを追加しましたが、.NET クライアントで圧縮をサポートする方法がわかりません。OData ライブラリ v6.5.0 を使用しており、クライアントで圧縮/解凍をサポートする必要があります ( OData v4 Client Code Generator )。ActionFilter による圧縮に Deflate エンコーディングを使用しています。Fiddler で確認されたように、すべてがサーバー上で正しく圧縮されますが、これをサポートするようにクライアントを構成する方法がわかりません。これは、OData クライアントが、かつてこの非常にシナリオをサポートしていた今は機能していない WritingRequest および RecbeingResponse イベントの代わりに、要求および応答パイプラインを使用するためです。
試み
ReceivingResponse
実験により、私は自分のイベントにフックできることを発見しましたDataServiceContext
次に、 RecomingResponseEventArgs.ResponseMessage.GetStream() を呼び出しますが、メッセージの内容を正しく上書きするために何をすべきかわかりません。ストリームで CopyTo() を実行すると、Microsoft.OData.Core.ODataMessageReader.DetectPayloadKind() で null 参照例外が発生します。これは、ストリームが最後まで読み取られ、位置をゼロに戻す必要があるためだと思いますが、シークをサポートしていないため、位置を戻すときにストリームも例外をスローするため、それはできません。これは単にストリームが読み取り専用であることが原因だと思います。ストリームをコピーして正常に解凍できたとしても、解凍されたコンテンツで応答メッセージのコンテンツを変更するにはどうすればよいですか? RequestPipeline または ResponsePipeline には、このためのフックがまったく表示されません。明確にするために、応答メッセージのコンテンツを解凍し、その後すぐに発生する実体化のために設定したいのですが、どうすればよいですか? 圧縮されたリクエストを OData サービスに送信する方法についても追加クレジット。ありがとう!