問題タブ [wcf-data-services-client]
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.
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 サービスに送信する方法についても追加クレジット。ありがとう!
.net - DataServiceContext 更新エラー
次の注釈付きモデルがあります
エンティティ フレームワークを使用して、WCF データ サービスによって v3 odata として公開されます。次のような DataServiceContext を使用して TypeA を更新しようとすると、
サービスで「B フィールドが必要です」という DbEntityValidationException が発生します。
リクエストの本文「MERGE /TestUpdateService/TestUpdateService.svc/theATypes(1) HTTP/1.1」には、AValue プロパティの変更が含まれていますが、プロパティ B へのリンク情報は含まれていません (これは、検証が行われる理由についての私の推測です)。サービスに失敗します)。データ サービスの更新について何か不足していますか?
wcf - サービス参照を追加せずに WCF データ サービスを使用する
サービス参照を追加せずに WCF データ サービスを使用するにはどうすればよいですか。
通常の WCF サービスでは、共有コントラクトを使用し、実行時にプロキシを作成してサービスを呼び出します。Data Service の場合、同様の概念は可能ですか?
c# - Entity Framework 6 - DataServiceContext Detect に変更がありました
Entity Framework 6 を実行している WCF サーバー アプリケーションがあります。
私のクライアント アプリケーションは、DataServiceContext を介してサーバーから OData を消費します。クライアント コードでは、コンテキストで HasChanges() メソッドを呼び出して、その中のデータが変更されたかどうかを確認できるようにしたいと考えています。
次の拡張メソッドを使用してみました。
ただし、追跡しているエンティティに変更がある場合でも、常に false を返します。
たとえば、Customer という名前の追跡エンティティがあるとすると、次のコードは常に SaveChanges() を呼び出す前に戻ります。
if not ctx.HasChanges() then returnコード行をコメントアウトすると、変更が正常に保存されるので、エンティティが変更を受け取り、保存できることを嬉しく思います。
私のコードからその事実を判断できないだけで、変更はコンテキストによって追跡されているようです。
DataServiceContext で HasChanges を特定する方法を教えてもらえますか?
odata - WCF データ サービス EF の使用、SaveChange() に失敗しました
私は次のようにWCFデータサービスを消費しています:
しかし、呼び出した後SaveChange()
、次のエラーが発生しました。
サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは、「操作 'ProcessRequestForMessage' (名前空間 ' http://tempuri.org/ 'のコントラクト 'IRequestHandler' ) の着信メッセージに、認識されない HTTP 本文形式の値 'Xml' が含まれています。予期されるボディ形式の値は「Raw」です。これは、バインディングで WebContentTypeMapper が構成されていないことが原因である可能性があります。詳細については、WebContentTypeMapper のドキュメントを参照してください。詳細については、サーバー ログを参照してください。
私のWCFデータサービスは次のとおりです。
WebContentTypeMapper
また、次のように前述のエラーをバイパスするように実装および構成しました。
カスタム バインディング:
サービス エンドポイント:
それでも例外が発生します。構成に問題があったと思います。
どんな助けでも本当に感謝します。
前もって感謝します。
c# - 含まれている EntitySet での AttachTo の使用
以下のように定義されたいくつかのクラスがあります。
最初にクエリを実行せずに、AttachTo を使用してオブジェクトを DataServiceContext に追加したいと考えています。これどうやってするの?