問題タブ [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 に答える
827 参照

wcf - WCF の MessageContract の KnownType

wcf コントラクト内でオブジェクトを使用Streamしているため、MessageContract代わりに使用する必要がありDataContractます。

このサービスのコンシューマーに、A または B のいずれかのオブジェクトを作成し、それを使用してサービスを呼び出してもらいたいと考えています。サービス側では、それを適切なオブジェクトに型キャストしてから、何らかのアクションを実行できます。

問題は、サービスで使用されるか、で宣言されるまで、で指定できずKnownTypeMessageContract継承されたコントラクトをクライアントに公開できないことKnownTypeです。

グーグルで検索してみましたが、に関連するものは見つかりませんでしKnownTypeMessageContract

コメントで提案されているように...メッセージコントラクトを更新しましKnownTypeたが、サービス参照を通じてクライアントに公開されていません...

ここで何が問題なのか、誰でも助けてくれますか?

:ALLKnownTypeはから継承されていますDocument

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

c# - 同じクラスで MessageContract と CollectionDataContract の両方を使用するには?

Web サービス用に次のコードがあります。

このサービスは、次の SOAP リクエストを受け入れます。

ただし、次の SOAP リクエストを受け入れる必要があります (「CustomStrings」タグなし)。

MessageContract を使用しない場合は、次のようになります。

私が望むものに近い、次の XML を実現できます。

しかし、「GetStringCollection」タグが存在し、これを MessageContract が削除するのに役立ちます。

したがって、MessageContract と CollectionDataContract の両方が必要ですが、次のようにすると:

例外があります:

「例外の詳細: System.InvalidOperationException: タイプ WcfService1.StringCollection は MessageContract を定義しますが、MessageContract を定義しないタイプ System.Collections.Generic.List`1[System.String] からも派生します。ÿ継承内のすべてのオブジェクトWcfService1.StringCollection の階層は、MessageContract を定義する必要があります。"

問題は、最上位クラスで MessageContract と CollectionDataContract の両方を使用する方法はありますか? そうでない場合、どうすれば希望のリクエストを受け入れることができますか?

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

c# - WCF MessageHeader 属性が逆シリアル化されない

WCF で SOAP ベースの Web サービスを開発しています。

私のクライアントは、次の SOAP 要求 xml を使用して WCF サービスに要求を送信します。

MessageContractクライアントに値を渡すか、クライアントから値を取得するクラスを作成しました。

MessageContractクラスには複数の属性MessageHeaderプロパティがありますが、リクエストがサーバーに送信されると、属性を持つプロパティは逆シリアルMessageHeader化されず、常にnullです。

RequestHeadタグには prefix があり、meWCF サービスでオブジェクトへの XML 要求を逆シリアル化するために問題が発生すると思います

ただし、RequestBodyタグにはプレフィックスもありますmが、正常に逆シリアル化されます。

タグmeからプレフィックスを削除すると、正常に機能しました。属性プロパティRequestHeadの値を取得しました。MessageHeader

私のクラス:

そして、WCF サービスでの私のアクション メソッドは次のようになります。

次のコードを使用してリクエスト SOAP XML を確認したとき:

ヘッダー値を含む完全なリクエストSOAP XMLも提供しますが、オブジェクトにデシリアライズしません。

どこが間違っているのか、何かが欠けているのかわかりません。

同じ質問がありますが、今のところ回答がありません: WCF でカスタム SOAP ヘッダーを逆シリアル化するにはどうすればよいですか?

手伝ってくれてありがとう...

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

xml - WCF MessageContract 複合型プロパティが逆シリアル化されない

この SOAP メッセージを処理するサービスを実装する必要があります。

メッセージ コントラクトは現在次のようになっています。

文字列プロパティoperationParamは、サービスによって正しく解析されます。しかし、私が何をしても、「複合型」operationHeaderを機能させることはできません。

上記のコードでは、との宣言に関係なく、 のプロパティOperationHeaderは常に nullです。XmlTypeXmlElement

XMLタイプを匿名として装飾しOperationHeader、属性を持たないクラスのバリエーションを試しました。クラスMessageBodyMemberのすべてのメンバーでまだ nullです。OperationHeader

非常に奇妙なことは、代わりにこれを行うと:

次に、解析される XML 要素はoperationHeaderそれ自体ではなく、XML の最初の要素です。headerParamA.

私のクラスがどのように見えるべきか知っている人はいますか?

この回答とまったく同じように実行しようとしましたが、複合型のメンバー プロパティに対しても null のみが返されます。

それとも、送信された XML が壊れているのでしょうか?

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

c# - MessageContractをWCFの順序にとらわれないようにする方法は?

MessageContracts を使用する WCF サービスがあります。頭を悩ませているのは、メッセージ内の要素の順序が変更されると、サービスがその要素を無視することです。以下に例を示します (関係のない詳細は削除されています)。

それはうまくいきます。しかし、代わりに私が送信した場合

Bananas の値は無視され、NULL として返されます。私の MessageContract クラスは次のようになります。

また、DataContractSerializer を使用していることにも言及する必要があります。ここでの例は単純な文字列ですが、実際のメッセージ オブジェクトははるかに複雑で、リストと DataContract オブジェクトが含まれています。

WCF はデフォルトでメンバーをアルファベット順に並べているようです。正直なところ、どの順序が使用されているかさえ気にしません。私が望むのは、消費者がこれらの値を好きな順序で渡して、サービスを引き続き機能させることができるようにすることです。XMLは順序が指定されていなくても読みやすいので、これは実行できそうです。

シリアライザーを変更したり、MessageContract から DataContract に変更したりしたくないことに注意してください。これは、実稼働環境の既存のサービスであり、WSDL が既存のコードと互換性がなくなるような変更を行うことはできません。これらの MessageContract を DataContract に変更して遊んだところ、WSDL の構造が変更され、既存のコードと互換性がなくなりました。

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

c# - WCF: メッセージ コントラクトを返す操作に値型パラメーターを渡す

状況:

私はこのサービス契約を持っています:

この場合、Group にはメッセージ コントラクトがあり、このメッセージ コントラクトはサービス コントラクトからセキュリティ レベルを継承します。グループは次のようになります。

GUIDWRAPPER 型は Guid の単純なラッパーであり、メッセージ コントラクトもあります。

問題:

サービス ホストを起動すると、戻り値の型「Group」にはメッセージ コントラクトがあり、値の型「int」には含まれていないため、操作「GetB」が無効であると不平を言います。これはセキュリティ上の欠陥の可能性があります。

戻り値の型とパラメーターの型の両方にメッセージ コントラクトがあるため、"GetA" は問題ありません。

可能な解決策:

1.) GUIDWRAPPER クラスで行ったように、すべての値の型をラップし、それらにメッセージ コントラクトを与えることができます。しかし、それは私には汚くて臭いと感じます。

2.) すべてのメッセージ コントラクトを削除し、データ コントラクトのみを使用します。次に、どのデータが送受信されるかを制御できなくなります。

私の質問:

メッセージ コントラクトの戻り値の型を持つサービス操作に単純な値の型 (この場合は int など) を渡すことは可能ですか? (この場合は GetB のように)

それを許可する操作コントラクトの属性はありますか?