デフォルトのネームスペースを扱わないように見えますが、SOAPエンベロープレベルで宣言されたグローバルな名前空間と名前空間プレフィックスでうまく動作するSOAPサービスとのインターフェースに取り組んでいます。WCFクライアント:グローバルネームスペースを強制する
問題は、WCFはルートにこれらのグローバル名前空間を作成せず、むしろサービスが明らかに窒息している明示的に接頭されていないデフォルトの名前空間を使用することです。今私はこれが本当にWCFのせいではないことを知っています - 私はWCF生成メッセージが有効なXMLだと信じていますが、それにもかかわらずサービスはそれに悩まされます。このような
使用してWCF出力生成ルックス:動作しません
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:Security xmlns:h="http://docs.oasis-open.org/wss/2004/01/oasis-
...
</h:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<cancelShipmentRequest xmlns="http://www.royalmailgroup.com/api/ship/V2">
<integrationHeader>
<dateTime xmlns="http://www.royalmailgroup.com/integration/core/V1">2016-03-26T01:44:37.0493801Z</dateTime>
<version xmlns="http://www.royalmailgroup.com/integration/core/V1">2</version>
<identification xmlns="http://www.royalmailgroup.com/integration/core/V1">
<applicationId>RMG-API-G-01</applicationId>
<transactionId>ozhckwej6sxg</transactionId>
</identification>
</integrationHeader>
<cancelShipments>
<shipmentNumber>TTT001908905GB</shipmentNumber>
</cancelShipments>
</cancelShipmentRequest>
</s:Body>
</s:Envelope>
。
が動作しない(手動SOAPUIで)次のSOAPエンベロープを使用する:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:oas="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:v2="http://www.royalmailgroup.com/api/ship/V2"
xmlns:v1="http://www.royalmailgroup.com/integration/core/V1">
<soapenv:Header>
<h:Security xmlns:h="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
</h:Security>
</soapenv:Header>
<soapenv:Body>
<v2:cancelShipmentRequest>
<v2:integrationHeader>
<v1:dateTime>2016-03-02T14:55:00Z</v1:dateTime>
<v1:version>2</v1:version>
<v1:identification>
<v1:applicationId>RMG-API-G-01</v1:applicationId>
<v1:transactionId>wftdaife96gv</v1:transactionId>
</v1:identification>
</v2:integrationHeader>
<v2:cancelShipments>
<v2:shipmentNumber>TTT001908905GB</v2:shipmentNumber>
</v2:cancelShipments>
</v2:cancelShipmentRequest>
</soapenv:Body>
</soapenv:Envelope>
2つの違いは、v1とv2名前空間は、ドキュメントの先頭にグローバルに宣言されているということではありませんし、何があります2番目のドキュメントのローカルの名前空間宣言
多分、私は何かが欠けているかもしれませんが、WCFが生成したXMLは有効であるように見え、名前空間に関しては同じ文書状態を表します。
唯一の違いは、名前空間が宣言されていることです。 WCFのバージョンは有効で、同じ名前空間を生成しているように見えますが、このサービスは無効な名前空間参照について不平を言っています。
スキーマの検証に失敗しました:メッセージはスキーマの検証に失敗しました:スキーマの有効性エラー:要素 'xmlns':この要素は期待されていません。予想されるのは({http://www.royalmailgroup.com/api/ship/V2} integrationHeader)です。
質問は、WCFにインラインではなく上部の名前空間参照を追加するように強制する最良の方法は何ですか?私が今までに見つけた唯一の方法は、メッセージインスペクタを使用して明示的にメッセージを書き換えることですが、もし私がすべてを行っても、手動でメッセージを作成することができます。
WCFにメッセージを手動で書き換えずに明示的な名前空間プレフィックスを使用させようとすることができるアイデアはありますか?
私は最近、既存の名前空間を新しい名前空間にマージしようとしているのと同じ状況でした。私は決定的な答えを与えることはできません。私が見つけたのは、マージ、リビルド、VSを終了して既存のコードを統合しようとする試みを取り除いた後、すべてがうまくいったということでした。不自由な答え、私は同意します。私はそれがVSのバグだと思ったが、再現シナリオを試みるにはあまりに複雑であった。幸運にも、私はあなたの状況に対してより良い解決策/答えを待っています。 – JamieMeyer
[このブログの記事](http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix)または[この回答](http://stackoverflow.com/a/17798306/124386)で提案を試しましたか? –
リチャードに感謝します。ブログの投稿は役に立ちましたし、正しい方向に私を指摘しました。 –