このエリアについて他にもいくつか質問がありますが、今は少し冗長です。それらへの回答もいただければ幸いですが、この質問は現時点での私の主な関心事です。
私は、WSE 3.0 で MTOM/XOP がどのように機能するかを示す多くの例に従い、必要と思われるとおりにプロジェクトをセットアップしました。DataType:-base64Binary として指定された Byte 配列フィールドがあります。この中に、追加したい添付ファイルの Byte 配列を入れます。アプリケーションを実行してリクエストを確認すると、データはインラインで base64 としてエンコードされます。つまり、XOP の Include 要素と関連する MIME 部分はありません。
WSE 3.0 内の MTOM についての私の理解では、エンコード時に base64Binary として指定された任意のフィールドを取得し、それをバイナリとしてエンコードして MIME パーツに移動し、XOP の Include 要素に置き換えます。つまり、それはうまくいきました。しかし、参照ファイルでサービスを継承するMicrosoft.Web.Services3.WebServicesClientProtocol
ように設定し、RequireMtom
フラグを true に設定しましたが、まだ正しくエンコードされていません。
ここで何かを見逃しましたか?これが機能するために実装する必要がある他の手順はありますか?
編集: 100 回目のコードを調べた後、ProcessMessage メソッドを実行する前にペイロードをシリアル化する必要があるためではないかと考えています。これは問題になる可能性があるように聞こえますか?シリアル化した理由は、使用する必要があるメソッドが、コンテンツ プロパティを持つ「ペイロード」パラメーターを受け入れるためです。このコンテンツ プロパティは XMLElement プロパティであり、これを取得できる唯一の方法は、必要なクラスをシリアル化することです。しかし、これにより、MTOM が base64 フィールドのデータ型を認識しなくなり、MIME パーツと XOP でバイナリに変換されなくなりますか? 今は本当にストローをつかんでいます。
編集 2: 以下に解決策がありますが、サードパーティの会社は、名前空間のプレフィックスが間違っていると言っています! のようなものが<q1:Attachment xmlns:q1="http://whatever" />
あり、彼らはそれを要求しています<s:Attachment xmlns:s="http://whatever" />
。私は怒っていますか、それとも問題ではありませんか?名前空間プレフィックスを割り当てる方法を教えてくれる方法はありますか?