3

この質問をここに投稿しました。しかし、答えは得られませんでした。だから私もここに投稿しています。


WSDLについて質問があります。

私は以下の2つのメソッドを持つWSDLを持っています:

<portType name="TestService">
    <operation name="add">
        <input
            wsam:Action="http://service.psvm.com/testservice/TestService/addRequest"
            message="tns:add"
            name="InputNums" />
        <output
            wsam:Action="http://service.psvm.com/testservice/TestService/addResponse"
            message="tns:addResponse"
            name="Result" />
    </operation>
    <operation name="subtract">
        <input
            wsam:Action="http://service.psvm.com/testservice/TestService/subtractRequest"
            message="tns:subtract"
            name="InputNums" />
        <output
            wsam:Action="http://service.psvm.com/testservice/TestService/subtractResponse"
            message="tns:subtractResponse"
            name="Result" />
    </operation>
</portType>

ご覧のとおり、加算と減算の両方の操作には、それぞれ「InputNums」と「Result」という同じ名前の入力メッセージと出力メッセージがあります。

このWSDLを検証しようとすると、次のエラーが発生します。

この入力要素に指定された名前'InputNums'は一意ではありません。入力要素の名前は、「TestService」ポートタイプで定義されている他のすべての入力要素および出力要素の名前とは一意である必要があります。

私はここでWSDL仕様を読みましたが、理由は明確に示されていません(少なくとも私には)。それは言う:

input要素とoutput要素のname属性は、囲んでいるポートタイプ内のすべての入力要素と出力要素の中で一意の名前を提供します。操作内の各入力要素と出力要素に名前を付ける必要がないように、WSDLは操作名に基づいていくつかのデフォルト値を提供します。

各入力/出力要素に名前を付けることを避けるために、WSDLはデフォルトを提供します。しかし、なぜそれがルールなのですか?警告ではないですか?開発者は、必要に応じて自分で名前を提供することはできませんか?

さらに、クライアントがWebサービスを呼び出すときに、「add」または「subtract」と呼ばれる特定の操作名で呼び出すため、これが問題になる理由がわかりません。最後に私の質問は-操作名が異なる限り、なぜパラメーター名が重要なのですか?誰かが、もしあれば、このようなWSDLを持つことの結果を説明できますか?

4

1 に答える 1

0

と記載していただければ、より良い回答が得られると思いますwhy not?。代わりにデフォルトに固執すると、どうなりますか? そして、名前を付けたい場合は、ルールに従ってみませんか?

これは、あなたが多少正しくないということではありません。実際、WSDL 2.0 ではこの属性が完全に削除されました。したがって、仕様に取り組んでいる人々は、このルールの実際の使用を示す 1.1 ノートに基づく実装で証拠を見つけられなかったと思います。その精神で、彼らは属性とともにそれを落としました。これらの名前は、RPC スタイルのバインディングでも役に立たないことは確かです。

初期の頃、誰かがこのルールを設定した理由がわかりました。名前の残りのルールと一致しています。そして、その後のバインディング仕様では、これらの名前が一意であるための用途が見つかる可能性があると主張されたと思います.

他の名前規則と同様に、WSDL 1.1 の XSD で強制されなかった理由を尋ねて私の主張を主張する人がいる場合、XSD はこの制約を表現できないと答えます (同時に一致する可能性のある 2 つの異なるセレクターにまたがっているため)。時間)。

なぜ気にするのかが重要だと思います。私がテストしたすべてのツール (.NET および JAX-WS) は、それをあまり気にしませんでした。コントラクトからコードへのバインディングを行うことができます。WS-I BP 1.x および 2.x は、それに対処していないようです。これらすべてと、WSDL 2.0 がそれらをまとめて削除したことを確認すると、あなたの言うとおりであり、役に立たない/役に立たないことがわかります。

また、あなたのような WSDL を検証しないツールも知っています。一方、.NET はきしむことさえありません。

それにもかかわらず、実用的である以上にうるさい検証結果が気になる場合は、ルールに固執する必要があります...または無視する必要があります.

于 2012-10-18T03:56:26.853 に答える