svcutil.exe-生成されたプロキシがnull値を許可するフィールドを許可しない
-
06-07-2019 - |
質問
svcutil.exeを使用してWCFプロキシを作成することにより、WSDLを使用して指定されたWebサービスを使用しようとしていますが、WSDLでは、一部の操作にオプションのパラメーターがあることが指定されています(minOccurs = <!> quot; 0 <!> quot;)、例:
<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" />
残念ながら、生成されたプロキシでは値を指定できません(パラメーターはnull値にできません)。<!> quot; specified <!> quot;値を送信しないことをプロキシに指示する呼び出しの一部としてのフィールド。
これを可能にするプロキシを生成するためにsvcutilを使用する方法はありますか?
(補足として、他の人が<!> quot; specified <!> quot;フィールドを<!> quot; Add Service Reference <!> quot;を使用して正しく生成できることに気付きました。機能ですが、何らかの理由で、Visual Studioは、参照を追加した後にプロキシを生成したくないようです(その後は何も起こりません))
使用したコマンド: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
解決
svcutil
によって生成されたクライアントプロキシクラスには、meetingId
型のint
というフィールド/プロパティがあると思います-右ですか?はい、これはnull不可です-しかし、meetingIdSpecified
と呼ばれるブールフィールド/プロパティもあると思います-これがtrue
に設定されている場合のみ、サービスは実際にそれを見るでしょう。設定しない場合、サービスは値を参照しないため、NULL
。
また、XSDでフィールドをNULL可能に指定していません-オプションに指定しました。 NULL可能にするには、次の構文を使用します。
<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int"
nillable="true" />
<!> quot; nullable <!> quot;を参照してください。属性?これは、フィールドを実際にヌル可能にするために使用されるものです。XMLに次のようなエントリを含めることができます。
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<meetingId xsi:nil="true" />
</root>
マーク
他のヒント
SVCUtilが機能しない場合は使用しないでください。 サービスがそれほど複雑でない場合は、サービスインターフェイスを手動で記述して、ChannelFactory <!> lt; <!> gt;を使用してみてください。プロキシを作成します。
minOccurs = <!> quot; 0 <!> quot; 'meetingId'値を発行しないようにする必要があり、生成されたプロキシはそれを許可しません。
サービスを消費するだけなので、wsdlを制御することはできず、nillable = <!> quot; true <!> quot;を追加することはできません。プロキシで「meetingId」をオプションにするためにwsdlで。
svcutil.exeではなくwsdl.exeを使用してプロキシを生成する場合、追加フィールド「meetingIdSpecified」があり、meetingIdフィールドを発行するかどうかを選択できます。
wsdl.exe http:///myservice?wsdl
ただし、wsdl.exeを使用すると、WCFではなくasp.net Webサービスでサービスを使用できます。
オプション/ wrappedを使用して生成した場合、不足しているフィールドはsvcutil.exe(私の場合は4.0.30319.17929)のバグだと思います。
svcutil.exe /wrapped http:///myservice?wsdl
..その後、フィールド 'meetingIdSpecified'が生成されます!