7

svcutil.exe を使用して WCF プロキシを作成することにより、WSDL を使用して指定された Web サービスを使用しようとしていますが、WSDL では、一部の操作にオプションのパラメーター (minOccurs="0") があることが指定されています。次に例を示します。

<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" /> 

残念ながら、生成されたプロキシでは値を指定しないことはできません (パラメーターは null 可能ではありません)。また、値を送信しないようにプロキシに指示する呼び出しの一部として「指定された」フィールドはありません。

これを可能にするプロキシを生成するために svcutil を使用する方法はありますか?

(ちなみに、私の調査では、他の人が「サービス参照の追加」機能を使用してこれらの追加の「指定された」フィールドを正しく生成できることに気付きましたが、何らかの理由で、Visual Studio は後でプロキシを生成したくないようです。参照を追加します(その後は何も起こりません))

WSDL ファイル 生成プロキシ

使用するコマンド: svcutil http://sas-int.elluminate.com/site/external/adapter/default/v1/webservice.wsdl /internal /n:*,Elluminate.WebService.WebServiceProxy /o:WebServiceProxy.cs /config: App.config /nologo

4

3 に答える 3

8

によって生成されたクライアント プロキシ クラスには、型svcutilと呼ばれるフィールド/プロパティがあると思います。はい、これはnull不可です-しかし、ブール値のフィールド/プロパティも呼び出されているに違いありません-これが設定されている場合にのみ、サービスは実際にそれを調べます。設定しないと、サービスは値を調べないため、ほとんど where のようになります。meetingIdintmeetingIdSpecifiedtrueNULL

また、XSDでフィールドをnull可能に指定していませんでした-オプションとして指定しました。null 可能にするには、次の構文を使用します。

<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" 
            nillable="true" />

「nullable」属性を参照してください。これは、フィールドを実際に nullable にするために使用されるものです。XML に次のようなエントリを含めることができます。

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <meetingId xsi:nil="true" />
</root>

マルク

于 2009-06-19T16:47:19.883 に答える
1

うまくいかない場合は、SVCUtil を使用しないでください。サービスがそれほど複雑でない場合は、サービス インターフェイスを手動で記述してみて、ChannelFactory<> を使用してプロキシを作成できます。

于 2009-06-18T14:15:32.580 に答える
1

minOccurs="0" では 'meetingId' 値を発行できないはずなのに、生成されたプロキシがそれを許可しないため、これは問題です。

サービスを消費するだけなので、wsdl を制御できず、プロキシで「meetingId」をオプションにするために wsdl に nillable="true" を追加することはできません。

svcutil.exe ではなく wsdl.exe を使用してプロキシを生成する場合、「meetingIdSpecified」フィールドが追加され、フィールド meetingId を送信するかどうかを選択できます。

wsdl.exe http:///myservice?wsdl

ただし、wsdl.exe を使用すると、WCF ではなく、asp.net Web サービスでサービスを利用できます。

欠落しているフィールドは svcutil.exe のバグだと思います (私にとっては 4.0.30319.17929)。オプション /wrapped を使用して生成すると:

svcutil.exe /wrapped http:///myservice?wsdl

..次に、「meetingIdSpecified」フィールドも生成されます。

于 2016-02-05T10:41:18.560 に答える