2011-06-28 29 views
4

WCF SOAPリクエストの名前空間プレフィックスを変更する方法はありますか?名前空間を変更するプレフィックスWCFエンベロープ

下の例のように、エンベロープには接頭辞「a」の名前空間「http://www.w3.org/2005/08/addressing」があります。私はこれを 'foo'に変更したいと思います。どうやってやるの。 注意サービスコードを制御できませんWSDLからのみプロキシクラスを作成できます。

<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Header> 
<a:Action s:mustUnderstand="1">http://www.starstandards.org/webservices/2005/10/transport/operations/MyAction</a:Action> 
<h:payloadManifest xmlns="http://www.starstandards.org/webservices/2005/10/transport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://www.starstandards.org/webservices/2005/10/transport"> 
<manifest contentID="Content0" namespaceURI="http://www.starstandard.org/STAR/5" element="TESTMETHOD" version="5.2.4"></manifest> 
</h:payloadManifest> 
<h:Identity xmlns="urn:xxx/xxx/" xmlns:h="urn:xxx/xxx"> 
<SiteCode>XXXXXX</SiteCode> 
</h:Identity> 
<a:To>urn:xxx/xxx/Method1</a:To> 
<MessageID xmlns="http://www.w3.org/2005/08/addressing">XXXXX</MessageID> 
<a:ReplyTo> 
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
</a:ReplyTo> 
</s:Header> 
+0

なぜプレフィックスを変更したいと思いますか? XMLを正しく理解しているものには何の違いもありません。 –

+0

私はちょうど私が消費しようとしているサービス、私はそれを制御することはできませんし、どのようにSOAP要求を処理するか分からない接頭辞を変更する必要はありません知っている。現在、プレフィックスを期待している要素に関連するサーバーエラーメッセージが表示されています。その排除のプロセス。 thx – daehaai

+0

すべての返信をありがとう。私はこれを達成することができると思う1つの方法は、IClientMessageInspector、IEndpointBehaviorをhttp://social.technet.microsoft.com/wiki/contents/articles/how-to-inspect-wcf-message-headers-using-iclientmessageinspector .aspx。イベントの1つはリクエストが送信される直前に発生します。その時点で、Row SOAPメッセージを取得して操作できます(問題ありません)。これが他人に役立つことを願っています。 – daehaai

答えて

0

WCFは、メッセージ契約を使用してほとんどのSOAPエンベロープの詳細を制御できます。 しかし、あなたが名前空間プレフィックスで何かできるかどうかは疑問です。ただし、名前空間を制御することはできます。

私はWCFは、その標準メッセージエンコーダで使用するプレフィックスを制御する方法を認識していないよUsing Message Contracts

+0

ありがとうございますが、メッセージ契約を使用するということは、サーバー側のコードを制御することを意味します。私は持っていない。 – daehaai

+1

そうである必要はありません。全体として、WCFはサービスを書く技術ではありません。そのコミュニケーションのため。非WCFサービスでもWCFクライアントを記述できます。あなたのケースでは、WCFを使用してクライアントを作成することができます。また、クライアントサイドコードのメッセージ契約を作成することもできます。Visual Studioを使用している場合、サービス参照ダイアログには、[詳細設定]オプションでメッセージ契約を作成するオプションが表示されます。 svcutil.exeを使用してクライアントを作成する場合は、/ mcスイッチを使用してメッセージ契約を作成できます。 – SaravananArumugam

0

を参照してください。

異なるプレフィックスを使用するようにメッセージに電信メッセージを表示するには、カスタムメッセージエンコーダを作成する必要があります。

2

これは、MessageFormatterを使用してクライアント側またはサーバー側で実行できます。 MessageEncoderでこれを変更することもできますが、これには多くの問題があります。あなたがする必要がどのような

http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix

MessageFormatterクライアント側を適用することです(多分ApplyClientBehaviorを使用して:

この記事はMessageFormatterを使用して、サーバー側でこれを行うともMessageEncoderの下振れする方法について説明しますApplyDispatchBehaviorの代わりに)。また、カスタムメッセージクラスでは、OnWriteStartEnvelopeメソッド内に "foo"という接頭辞を付けて、名前空間を属性として追加する必要があります。

残念ながら、必要な変更を行う簡単な方法(一部の属性を適用するなど)はありません。

関連する問題