ここにはこの領域を取り巻くいくつかの質問がありますが、今は少し冗長です。それらに対する回答も高く評価されますが、この質問は私の主な関心事です。WSE 3.0 - バイナリに "MTOM-ing"ではなく、Base64としてエンコードされているバイト配列
MTOM/XOPがWSE 3.0でどのように機能し、プロジェクトが必要と思われるように正確にセットアップされているか、多くの例を追ってきました。 DataType:-base64Binaryとして指定されているByte配列フィールドがあります。これで、私が追加したい添付ファイルのバイト配列を配置します。アプリケーションを実行してリクエストをチェックすると、データはbase64としてインラインでエンコードされます。つまり、XOPインクルード要素と関連するMIME部分はありません。
WSE 3.0内のMTOMを理解すると、エンコードするときにbase64Binaryと指定されたフィールドをすべてバイナリとしてエンコードし、MIMEパートに移動してXOP Includeエレメントに置き換えるということでした。すなわち、それはちょうど働いた。しかし、私は、参照ファイルでMicrosoft.Web.Services3.WebServicesClientProtocol
を継承し、RequireMtom
フラグをtrueに設定したサービスを設定しましたが、それでも正しくエンコーディングされていません。
ここに何か忘れましたか?これが機能するために実装すべき他のステップはありますか?
EDIT:100回目のコードを調べた後、ProcessMessageメソッドを実行する前にペイロードをシリアル化する必要があるかどうかは疑問です。これは問題のように聞こえますか?私たちが直列化した理由は、使用するメソッドがContentプロパティを持つ "Payload"パラメータを受け入れるためです。このコンテンツプロパティはXMLElementプロパティであり、これを取得できる唯一の方法は必要なクラスをシリアル化することです。しかしこれは、MTOMがbase64フィールドのデータ型を認識するのを止め、MIME部分とXOPを使ってバイナリに変換しないのですか?ちょうど実際にストローで握っている。
編集2:私は以下の解決策がありますが、サードパーティの企業は現在、私たちの名前空間接頭辞が間違っていると言っています!我々は<q1:Attachment xmlns:q1="http://whatever" />
のようなものを持っていて、彼らはそれが<s:Attachment xmlns:s="http://whatever" />
であることを要求しています。私は怒っているのですか?それは問題ではありませんか?名前空間接頭辞をどのように割り当てるのかを教える方法はありますか?
変更を加えずに実施した例はありますか? –
私が見つけたすべての例では、動作するために1つの変更が必要でした。それは、 'System.Web.Services.Protocols.SoapHttpClientProtocol'の代わりに' Microsoft.Web.Services3.WebServicesClientProtocol'を継承するようにクラスを変更することでした。その変更が行われると、すべて正常に機能しました。しかし、この変更はメソッドを呼び出す前に直列化ステップと関係があると思われるので、私のコードに違いはありません。 – anothershrubery
サンプルがうまく動作しているのにコードがそうでない状況に陥ると、実際のサンプルから始めて、まず_slowly_リファクタリングしてコードを実行する必要があります。私はそれを壊すとすぐに、私は以前の作業コードに戻ってから、もっとゆっくりと必要なものに移動します。そうすれば、私は最終的に何が間違っているのかを見つける。 –