質問

WCFサービスの一方向法を作成したかった。すべて問題ない限り 障害メッセージを返します - あれば。

WSDLファイルと契約ファイルにはWSCFブルーコードジェネレータを使用しています。

WSDL操作要素では、「入力」と「障害」の子要素のみがあります。 私がサービスを実行するとき、私は片道通信で障害メッセージを宣言できない情報を得た情報を得ました。エラーが発生した場合、メッセージが表示されます。

しかし私は私がWebサービス/ WSDLの作成規則を破ったかどうか疑問に思っています... WSDL Service Schema Generatorから、一方向の通信( 'true'に設定されている)やその他のプログラミング言語では、おそらくその他同じ...

だから私がしたことは正しいですか?ジェネレータがコードを適切に作成できるように、WSDLを変更する方法は?

理論的には片道通信で障害を使用できない場合は、誤りを返すための応答に追加の構造が必要ですか?

ありがとう!

役に立ちましたか?

解決

一方向操作は失敗を返すことができないということです。 a>クライアントへ。 void を生成したい場合は、WCFでサービス操作ではなく、WSDL契約でその操作に空の出力要素を追加する必要があります。

.NETベースのWSDLパーサー( wscf.blue svcutil )は、 n't <wsdl:operation>要素に対して一方向のサービス操作を生成します。対応する<wsdl:output>要素を持っています。

次に、このWSDL操作片道

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>
. 一方、空の<wsdl:output>要素(すなわち、空シーケンスを含むXSDタイプ)を用いて動作を定義すると、void にマッピングされます。 .NETでは、障害宣言を任意に含めることができます:

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
           <wsdl:output message="tns:FooResponse" />
           <wsdl:fault message="tns:FooFault" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>
.

<tns:FooResponse>タイプは単に次のように定義されています。

<xs:element name="FooResponse">
    <xs:complexType>
        <xs:sequence/>
    </xs:complexType>
</xs:element>
.

他のヒント

WCFでは、一方向の手段では返された値が返されず、クライアントは呼び出しの成功または失敗を気にしません。

WCFでは、WCFを介してMSMQを操作するなど、一方向の他の操作も行っています。その後、操作は通常一方向に設定されています。

だから、呼び出し状況を示すために何かを返す場合は、一方的な選択肢ではないが、代わりに一方向ではない通常のWCF操作を使用することができます。

一方向操作のために、ここにあなたの参照の記事 WCF一方向

あなたが正しいことをしたと感じます。任意の種類のクライアント(C#、Java、C ++、PHP)に対して、プロキシを作成するためにWSDLが必要です。私はそれが他の言語でも働くべきだと思います。SOAPUI(Neutral SOAPクライアント)を使用してサービスをテストするのに最適です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top