問題タブ [messagecontract]

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 に答える
3736 参照

wcf - WCF DataContractSerializer はコントラクト属性を取得しません...なぜですか?

WCF でメッセージ コントラクトとして使用する次の型があります。

svcutil.exeを使用してこのタイプのプロキシを生成すると、それをホストするサービスと通信できるクライアントが得られ、要素の XML 名前空間はメッセージ コントラクト属性に従って正しくなります。

そのインスタンスで使用すると、名前空間はデフォルト ( http://schemas.datacontract.org/2004/07/.. .)Message.CreateMessage(...)に戻ります。のインスタンスを使用すると、同じことが起こります。名前空間をコンストラクターに渡そうとすると、ラッパーのみが名前空間に含まれます。DataContractSerializerDataContractSerializer

ここで、「データ」は次のとおりです。

が属性DataContractSerializerを無視しているように見えるのはなぜですか? svcutilMessageContractはどのようにこの作業を行うのですか?

0 投票する
5 に答える
4338 参照

wcf - WCF MessageContract の継承

私は WCF にかなり慣れていないので、MessageContract の継承を正しく機能させる方法について質問があります。私のセットアップの簡略化されたバージョンは次のとおりです-「ベース」メッセージタイプと、それを継承する別の「テスト」メッセージ。

次に、ServiceContract に非同期の OperationContract を次のように定義します。

私が得ている問題は、BeginFindRequest メソッドを呼び出し、要求パラメーターの TestMessage インスタンスを渡すときに、WCF フレームワークがサービス/サーバー側で TestMessage インスタンスを BaseMessage に逆シリアル化していることです。これは抽象クラスとして定義されているため、次のエラーが発生します。

「メッセージにはデフォルトの (パラメーターなしの) コンストラクターがないため、メッセージを MessageContract タイプの BaseMessage に逆シリアル化することはできません。」

MessageContract の継承に関する限られた情報から、それは機能するはずです。

私の質問は、これを機能させるために何が欠けているかです。それとも、そのタイプ専用の ServiceContract に個別の OperationContract を定義する必要がありますか?

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

wcf - WCFでサービス操作を一般的に実行する方法は?

以下のソース コードに示されている動作を実現する方法を探しています。「常にメッセージ コントラクトを生成する」オプションを使用して WCF サービス プロキシを作成しました。すべての要求および応答メッセージ コントラクトは共通のインターフェイスを実装しており、同じ関数を使用してそれらを実行したいと考えています。クライアントプロキシを介してメッセージを送信する一般的な方法があるはずですが、どこにも見つかりません。どんな助けでも大歓迎です!

現在、ExecutePagedRequest(IPagedRequest) メソッドを NutrientDBClient に追加し、IPagedRequest の具象型に基づいて正しいサービス操作を手動で実行しています。メッセージ コントラクトに IPagedRequest を簡単に実装でき、自動的に魔法のように機能するように、よりエレガントな方法を探しています。

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

.net - MessageContract を使用すると、Web サービスの応答が ref パラメーターに変換されます

次のインターフェイスを定義しました

次のタイプを返します

私は、生成されたクライアント コードが OrderSelfSignedHealthCertificate メソッドを次のように公開することを期待していました。

代わりに、ResponseClass のプロパティはResponseClassにラップされませんが、次のように公開されます。

MessageContract を DataContract 属性に交換し、MessageBodyMember を DataMember 属性に交換すると、期待される動作 (ResponseClass 応答タイプ) が得られます。ただし、SOAP ヘッダーにいくつかのプロパティを配置する必要があるため、MessageContract が必要です。

私は何か間違ったことをしていますか?これは正常な動作ですか?MessageContract を使用する場合、 ResponseClassの戻り値の型を取得するにはどうすればよいですか?

どんな助けでも大歓迎です。

0 投票する
5 に答える
9953 参照

wcf - サービス参照の追加はメッセージコントラクトを生成しています

Visual Studio 2008(SP1)で[サービス参照の追加]を使用して特定のサービスをインポートすると、すべての要求/応答メッセージが不必要にメッセージコントラクトにラップされます(名前は-> "operationName" + "Request" / "Response" +最後に「1」)。

コードジェネレーターによると:

Javaサービスからwsdlを生成している人は、DOCUMENT-LITERAL/WRAPPEDを指定していると言います。

ヘルプ/ポインタ/手がかりをいただければ幸いです。

更新:これは、疑わしいと思われる操作の1つに対する私のwsdlのサンプルです。応答と比較して、要求のメッセージ要素属性の不一致に注意してください。

更新2:インポートによってメッセージコントラクトの生成がトリガーされる可能性があるため、インポートした名前空間(別のxsdにある)にあるすべてのタイプをwsdlにプルしました。驚いたことに、そうではなく、wsdlですべての型を定義しても何も変わりませんでした。

次に、(必死になって)wsdlを最初から作成maxOccursし、シーケンス属性に含まれる要素属性の属性で遊んで、望ましくないメッセージコントラクト生成の動作を再現することができました。

要素のサンプルは次のとおりです。

maxOccursメッセージとして使用される要素(基本的にすべての要求と応答)で遊ぶと、次のことが起こります。

  • maxOccurs="1"はラッピングをトリガーしません
  • macOcccurs> 1は、ラッピングをトリガーします
  • maxOccurs="unbounded"はラッピングをトリガーします

タイプのネストが非常に深くなるため、これを本番環境のwsdlでまだ再現できませんでした。これを徹底的に調べるには、時間がかかります。その間、私はそれがベルを鳴らすかもしれないことを望んでいます-どんな助けでも高く評価されます。

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

.net - MessageContract、一般的なリターンタイプ、およびクライアント側の命名に関する問題

SOAPヘッダーにカスタムフィールドを追加したいので、MessageContractsを使用するWebサービスを構築しています。前のトピックで、複合応答をラップする必要があることを学びました。この目的のために、私は汎用のResponseWrapperクラスを考案しました。

次のように定義されたServiceResult基本クラスを作成しました。

応答にリクエストコンテキストを含めることができるようにするために、ジェネリックを使用するServiceResultの派生クラスを使用します。

これは次のように使用されます

クライアントコードが次のように生成されることを期待していました

代わりに、次のようになります。

CompType1およびCompType2RequestContextクラスのプロパティです。問題は、ハッシュがの末尾に追加されることですServiceResultOfHCCertificateRequestzSOTD_SSj。クライアントタイプを期待どおりに(ハッシュなしで)生成するには、ジェネリックリターンタイプをどのように定義する必要がありますか?

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

.net - パラメーターとして単一の配列を取る WCF 操作は、MessageContracts を使用できますか?

asmx WebService を WCF サービスに置き換えようとしています。私の主な目標は、SOAP メッセージを同じに保つことです。呼び出し元は .NET ではないため、コントラクトに小さな変更を加えるには大幅な再作業が必要になります。

私の問題点は、webmethod を置き換えようとしている Web メソッドが次の属性減速を使用することです。

これにより、各パラメーターの周りの XML 要素の余分なレイヤーが削除されます。

これを WCF でシミュレートする方法として私が知っている唯一の方法は、DataContracts の代わりに MessageContracts を使用し、WrappedName と IsWrapped プロパティを使用してパラメーターのフォーマット方法を制御することです。

このアプローチは、POCO オブジェクトの 1 つの配列をパラメーターとして受け取る 1 つを除いて、すべてのメソッドで機能します。

私の結論は、私には選択肢がないということです。この Web サービスをアップグレードして、同じ契約を維持することはできません。

私の質問は次のとおりです。

1)複製する唯一の方法です:

MessageContractを使用するWCFのWebメソッドで?

2)そして、メソッドが単一の配列をパラメータとして取る方法はありますか?

これは、私が見ているものを示すために取り組んできた簡単な例です/ [SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)] と Message Contract を使用して実行しています

バッキング サービス コード:

POCO オブジェクト: (V1 とデータ コントラクト)

ASMX ソープ

SOAP 要求、WCF データ コントラクトを使用

引数と戻り値の型でメッセージ コントラクトを使用しましょう: POCO オブジェクト: (V2 with MessageContracts)

WCF ソープ リクエスト (V2):

それが今私がしていることで、必要なものの 90% を満たしています。

問題は、WCF でこのようなメソッドを実装し、コントラクトを同じに保ちたいということです。

今これを行うと、AddReq [] は MessageContract ではないため、次の例外が発生します。AddReq [] は System.Array 型で、変更できません。

System.ServiceModel.Channels.Message 型のパラメーターまたは戻り値の型、または MessageContractAttribute と異なる型の他のパラメーターを持つ型があるため、操作 'AddArrays' を読み込むことができませんでした。System.ServiceModel.Channels.Message または MessageContractAttribute を持つ型を使用する場合、メソッドは他の型のパラメーターを使用してはなりません。

ありがとう、ブライアン

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

wcf - メッセージ コントラクトを使用した WCF 列挙型のシリアル化

メッセージ コントラクトを使用する Web サービスがいくつかあります。これらのサービスについては、データ コントラクトに移行できないことはおそらく言及する価値があります...

私の型の 1 つは、その型がたまたま列挙型であるプロパティを指定します。

私の列挙型は次のように定義されています:

しかし、これをネットワーク経由で送信すると、RiskTypeCode プロパティはシリアル化されません。つまり、出力から省略されます。

列挙型/プロパティをネットワークに渡すために何を装飾する必要がありますか?

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

c# - DCSを使用したMessageContractのシリアル化

DataContractSerializer[MessageContract]をSOAP経由で送信したときと同じようにシリアル化する方法はありますか?

WCF呼び出しのネットワーク上に次のように表示されるクラスがあります。

p>

DCSを使用してシリアル化すると、次のようになります。

p>

この不整合は、クラスがデータコントラクトではなくメッセージコントラクトとしてマークアップされているためだと確信しています。

p>

WCFがSOAPメッセージを作成するときと同じ方法でDCSにメッセージをシリアル化させる方法はありますか?

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

wcf - WCF DataContractSerializer の動作

DataContractSerializer を使用すると、異常な動作が見られます。次のようにメッセージ コントラクトを定義しました。

次のような XML メッセージを送信しています。

私のサービスは、期待どおりにこの XML を逆シリアル化します。私のサービス内では、DataContractSerializer を使用して XML 文字列を作成していますが、ここで奇妙なことが起こります。私は次のようにシリアライザーを使用しています:

これが完了すると、outputMessage に次の XML が含まれます。

言うまでもなく、元の XML メッセージを受信することを期待しているものは、これを解析できません。だから私は2つの質問があると思います:

  1. DataContractSerializer が余分な外部ノードを XML 出力に追加するのはなぜですか?
  2. これをやめる方法はありますか?

ありがとう。

これはおそらく.NET 4を使用していることを追加する必要があります。