問題タブ [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.
c# - WCF メッセージ コントラクトとストリーミング
私はボーダーラインに夢中になっています.1日以上これを使っていますが、なぜうまくいかないのかまだわかりません.
ストリームを送信するために使用している MessageContract がありますが、次のエラーが発生します。
データ コントラクト名が「FileStream: http://schemas.datacontract.org/2004/07/System.IO」の「System.IO.FileStream」と入力することは想定されていません。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加することにより、静的に認識されていない型を既知の型のリストに追加します。
どんな助けも大いに当てはまり、
.net - WCF: メッセージ コントラクトに変換されるデータ コントラクト
私の WCF サービスは、サービスへの共通のエントリ ポイントを表すために、キャッチオール アクションと応答アクションでマークされた単一の操作をエクスポートします。
クライアント プロキシは引き続きデータコントラクトとして生成されます。
しかし、私が見つけたのは、クライアントがデータ コントラクトを送信しているにもかかわらず、シリアル化されている場合、本体はデータ コントラクト自体ではなく、データ コントラクトとmsg
同等のメッセージコントラクトのように見えるということです。
内部のデータ コントラクトを抽出するには、受信した XML を手動で解析する必要があることを除けば、これでも問題ありません。サービス自体には使用する実際のMessageContract
型がないため、本体にアクセスすることは、ノードの抽出、要素の再ラベル付けなどを意味します。これは、公開された操作がMessage
ベースではない場合に、おそらく WCF が隠れて処理しているものの手動プロセスです。
データ コントラクト間のデータ コントラクトの場合、WCF はどのようにこれを行うのですか? 同じプロセスを使用できる方法はありますか?
xml - WCF メッセージ コントラクトで XML を直接操作するにはどうすればよいですか?
私は WCF を使用して、SOAP を介して非常に (非常に) 複雑な一連の対話 (コンピューターについて聞いたことがない人々によって管理されている委員会によって処理されています) を実装しています。次のようなメッセージが表示されます。
xsd.exe
...そして、本文のコンテンツをorによって作成されたオブジェクト モデルに解析したくありませんsvcutil.exe
(これらのツールが、この特定の XML を正常にシリアル化/逆シリアル化できるオブジェクト モデルを生成できるかどうかは、活発な議論の問題です)。これらのサービスを実装するメッセージ コントラクトを作成する予定ですが、次のようなことができるかどうか疑問に思っています。
...そして、リクエストメッセージとレスポンスメッセージで出入りするXMLを直接操作します。これにより、開発が大幅に簡素化されます。これは、メッセージに表示される可能性のある XML の小さなサブセットのみを操作する必要があり、生成されたオブジェクト モデルが許容するよりも簡単に操作できるためです。
このパターン (XmlElement
メッセージ コントラクトでの使用) は私の目的に適していますか? Message
そうでない場合、オブジェクトを直接操作することなく、XML を直接操作するという目標を達成するにはどうすればよいでしょうか?
c# - WCF "常にメッセージ コントラクトを生成する" は MessageContract を生成しません
WSDL をサービス定義 (サービスへのインバウンド) としてインポートしていますが、なんらかの理由でクライアントがリクエストをフォーマットしているため、プロキシ クラスにMessageContract
装飾がないと WCF がデシリアライズできません。
メイン コンテナー クラスに属性を追加することで、このように機能するようになりましたMessageContract
。これは、WCF がこれらを部分クラスとしてビルドするため、問題ありません。つまり、パーツを装飾し、生成されたパーツをそのままにしておくことができます。ただし、メイン コンテナー クラスのプロパティを正しく逆シリアル化するにはMessageBodyMember
、名前空間を指定する属性でそれらを装飾する必要があります。
これは明らかに悪いことです。つまり、WSDL から再生成するたびに、クライアントからメッセージを受信できなくなるということです。サービス参照構成で「常にメッセージ コントラクトを生成する」を既に設定していますが、それは嘘のようです。部分クラスを装飾したままにしているかどうかに関係なく、メッセージ コントラクトは生成されMessageContract
ません。
WCF にこれらの s を強制的に生成させる方法はありますMessageContract
か?
編集
関係あるかどうかわかりませんが、svcutil がプロキシ クラスを生成するときに、プロパティを次のように装飾します。
そして、MessageContract
属性を追加すると、サービスがメッセージで中断されます
パラメータまたは戻り値に対して明示的な順序付けを使用することはできません。カスタム属性から Order プロパティを削除してください。
XmlElement
サービスを正常に呼び出す前に、生成された属性からすべての Order ディレクティブを削除する必要があります。
wcf - Soapヘッダーの情報をC#のWCFサービスに送信します
WebアプリケーションでWCFサービスへのサービス参照を作成し、soap呼び出しのヘッダーに情報を挿入して、WCFメソッドを呼び出したい。
私はMessageContract属性について読み、インターフェースファイルで宣言しました:
私のWCfインターフェースは次のとおりです。
BasicServiceHeaderをGetData関数のパラメーターとして渡したくないのですが、関数をそのままにして、関数内にBasicServiceHeaderを抽出したいのですが、それはできますか?
wcf - WCF MesageContract - 送信 SOAP メッセージのカスタマイズ - 複数の本文
処理する SOAP メッセージ形式に関して非常に要求の厳しい (標準外の) Web サービスを呼び出さなければなりません。私はサーバー側の実装を制御できず、利用可能な WSDL もありません。私が持っているのは、以下に添付された傍受されたメッセージだけです。
私の最初の考えは WCF+MessageContract でしたが、最後に何をしても、正しい結果が得られないようです。発信メッセージは次のようになります。最もトリッキーな部分は、複数の本文コンテンツ ("ProxyInfo" および "PayloadInfo" 以下) のようです。それに加えて、WCF で SOAP メッセージ ヘッダーから "Action" 要素を削除することもできません。これが WCF にとって不可欠な要素であることは理解していますが、Web サービスにそれを受け入れるよう説得できるかどうかは疑問です。返事はまた別の話になるかもしれませんが、その橋に着いたら渡ります。
現在、カスタムのシリアル化と、送信/受信メッセージの後/前処理を検討しています。最悪の場合、Web リクエストとシリアル化を手動で行う必要があると思います。助けてください、私は本当に必死になっています...
c# - XMLファイルをMessageContractクラスのインスタンスに変換するにはどうすればよいですか?
既存のサンプルメッセージに対してクラスをテストしようとしています。サンプルメッセージファイルをクラス[MessageContract]
のインスタンスに読み込んで、それがどのように機能するかを確認することで、開発を簡素化する方法を探しています([MessageContract]
ここでは特に複雑な契約であり、WCF以外の起源のものです)。
私[MessageContract]
のクラスは次のようになります。
Message
次のようなコードを使用して、ファイルをクラスのインスタンスに読み込むことができます。
[MessageContract]
ただし、クラスをまったくテストできないため、特に役に立ちません。
WCFの内臓のどこかに、このMessage
インスタンスを特定の[MessageContract]
クラスのインスタンスに変換するためのシステムがありますが、それは何ですか?
wcf - WCF MessageContract リストのシリアル化
リクエストとして使用する次の MessageContracts があります。
ただし、SoapUI でテストする場合、getLimited リクエストの本文は次のように作成されます。
どこでv2
= Api2Information.Namespace. 私が本当に望んでいるのは、PropertyList に含まれる文字列がv2
ではなくとして名前空間化されることarr
です。とにかく私がそれを達成することはありますか?WCF を使用するように ASMX サービスを変換していますが、再コンパイルして再配布する余裕がないアプリケーションがいくつかあります。
助けてくれてありがとう!
wcf - メソッド パラメーターが WCF プロキシ クラスにありません
以下のように定義された WCF メソッドがあります。
実際の実装は次のようなものです。
SourceDataQuery オブジェクト:
私の問題は、この WCF サービスを別のプロジェクトに追加し、サービス参照を追加してプロキシを作成すると、プロキシ クラスに GetSourceData メソッドがありますが、その入力パラメーターがありません。パラメーターは必要ありません。ただし、プロキシ クラス内で SourceDataQuery オブジェクトが正しく生成されていることがわかります。
入力パラメーターが欠落している理由は何ですか?
wcf - WCF サービス Wsdl エラー: 操作は、既にエクスポートされているメッセージ要素を参照しています
同じメッセージ コントラクトを持つ 2 つの操作 (Operation1 と Operation2) を持つ WCF サービスがあります。Wsdl (Get/Http) にアクセスすると、次のエラーが発生します。
System.InvalidOperationException: WSDL エクスポート拡張機能の呼び出しで例外がスローされました: System.ServiceModel.Description.DataContractSerializerOperationBehavior
コントラクト: Xxxxx ----> System.InvalidOperationException: Xxxx.IServiceInterface.Operation1 操作は、Xxxx から既にエクスポートされているメッセージ要素 [http://schemas.somecompany.com/namespace/version/:MessageContract] を参照しています。 IServiceInterface.Operation2 操作。
メソッド名を変更するか、OperationContractAttribute の Name プロパティを使用して、いずれかの操作の名前を変更できます。または、MessageContract プログラミング モデルを使用して、要素名をより詳細に制御できます。
異なるサービス操作に同じメッセージを再利用できるように思えます。エラーに示されている解決策は理解していますが、さまざまな操作に対して同じメッセージを表示したいと考えています。
考え?
詳細: イベント pub/sub メカニズムを実装しています。イベント サブスクライバーは、処理するイベントの種類でサービス操作を宣言し、それを汎用メッセージ コントラクト クラスにラップします。この汎用メッセージ クラスは、メッセージ コード属性を使用して、単一のメッセージ構造である event-publisher xml 名を使用します。すべてのイベント サブスクライバーは UDDI に登録され、pub/sub メカニズムはこれらのエンドポイントを使用してイベントをサブスクライバーにプッシュします。UDDI でのサービス操作の登録では、特定のイベント名前空間を検出して、それらのサービス操作をイベント ハンドラーとして登録します (req/response 操作ではありません)。