問題タブ [wcf-serialization]

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.

0 投票する
1 に答える
3380 参照

c# - WCF、ストリーミング、メッセージ コントラクト エラー: 要求メッセージの本文を逆シリアル化中にエラーが発生しました

少し複雑な WCF Service メソッドを開発しました。ストリーミング転送モードを使用したいのですが、複数のパラメーターがあるため、本文とヘッダーで MessageContract を定義しました。

MSDN で読んだガイドラインに従って、ストリームが本体の唯一のメンバーであることに注意してください。

メソッドは次のように定義されます。

(リフレクションを使用して) メソッドを呼び出そうとすると、エラーが発生します。

操作 'SaveReportAudio' の要求メッセージの本文をデシリアライズ中にエラーが発生しました。OperationFormatter で無効なメッセージ本文が検出されました。名前が 'SaveReportAudio' で名前空間が ' http://tempuri.org/ ' のノード タイプ 'Element' が見つかるはずです。名前が「ReportAudioMessage」で名前空間が「http://tempuri.org/」のノード タイプ「要素」が見つかりました

SaveReportAudio は、呼び出しているサービス メソッドの名前です。ReportAudioMessage は、定義されている MessageContract の名前です。明らかに、私の Soap Message はジャッキアップされていますが、方法がわかりません... :(

以下は、サービスの Web 構成のサービス モデル ノードです。

クライアントの App.Config の Service Model ノードは次のとおりです。

0 投票する
0 に答える
88 参照

c# - 'pre-serialises' オブジェクトを WCF OperationContract メソッド パラメーターとして使用する

私は、WCF サーバー アプリケーションが異なるソースからのデータを 1 つのデータ モデルに集約し、クライアントと同期する共有状態アプリケーションを構築しています。各クライアントにモデルの初期スナップショットを提供し、モデル内の各モデル プロパティとしてデルタを送信します。その結果、状態はすべてのクライアントで共有されます。

モデルは揮発性であるため、各デルタはデータ モデル プロパティのディープ コピーである必要があり、ネストされたプロパティを持つ複雑なオブジェクトを含めることができます。プロパティが変更されるとすぐに、コピーが作成され、クライアント キュー ハンドラに渡されます。コピーである必要があります。シリアル化プロセス中に変更される可能性があるため、プロパティへの参照を渡すことはできません。デルタが各クライアントに渡されている間にモデルをロックすることは望ましくありません。コピーが作成されたらすぐにアプリケーションのメイン スレッドを解放したい。

私の質問は、最も効果的な方法でディープ コピーと WCF ワイヤ シリアル化を組み合わせる方法です。各デルタのディープ コピーを作成する迅速かつ安価な方法は、DataContractSerializerを使用することです。クラス。これは通常、WCF のシリアル化で使用されるため、クライアントへのトランスポート用にデルタをシリアル化する時間を節約できるように思われます。おそらく、1 つの操作で両方を行う方法があります。そこで、デュプレックス コールバック インターフェイスで特定の OperationContract メソッドのシリアル化を一時停止する方法を探しています。実際には、バインディングに「この OperationContract メソッドのパラメーター値をシリアル化しないでください。DataContractSerializer を使用して既にシリアル化されています。そのままクライアントに渡してください」と伝える方法を探しています。私は Silverlight クライアントを使用しているため、使用しているバインディングは PollingDuplexHttpBinding です。

0 投票する
2 に答える
971 参照

c# - Newtonsoft.Json によりシリアル化が 2 回発生し、Reference.cs で定義が重複する

サービス参照を持つ Common プロジェクトがあります。Newtonsoft.json (バージョン 6.0.2への参照をサービス参照を持つ同じプロジェクト (Common) に追加した後、Serializable クラス ChatLine

サービスリファレンスを更新しました。プロジェクトCommonをビルドすると、以下のエラーがポップアップします。

ビルド エラー:

エラー 5 名前空間 '' には、'AuditStatus' の定義が既に含まれています

これは、Service Reference を更新した後に Reference.cs で生成されたコードです。

注:私が気づいたのは、Newtonsoft.Jsonへの参照を追加すると、2つの異なるシリアライザーでシリアライゼーションが発生することです.XML serailizerとDatacontract serailizerは、Reference.csで重複した定義を引き起こします. Newtonsoft.Json への参照を削除し、ChatLine クラスをすべて正常に動作するように変更すると、

Reference.svcmap

問題は何ですか?