Я новичок в веб-службах и C #, поэтому, пожалуйста, прости меня, если мой вопрос слишком прост.Я искал вокруг, но не могу найти ответ - по крайней мере, один на основе моих ключевых слов.
Я пытаюсь вызвать веб-службу через C # (Visual Web Developer 2010 Express), но в ответ я получаю сообщение об ошибке.Когда я вызываю тот же веб-сервис через soapUI, я не получаю сообщение об ошибке.Когда я сравниваю запрос SOAP от C # с запросом SOAP от soapUI, в запросе C # SOAP отсутствует преднамеренно пустой параметр <aclObjectId>
.Когда я беру пустой параметр из запроса soapUI, я получаю ту же ошибку.Для меня ответ - заставить C # отправить параметр, даже если он пуст.Я попробовал это, установив его на ноль или "", но безрезультатно.Есть ли способ заставить моего клиента веб-службы C # отправить пустой параметр или, возможно, отправить все параметры, даже если они не имеют значения?
WSDL
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-b02-. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-b02-. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://search.services.redacted/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://search.services.redacted/" name="EDRSearchServiceSOAPImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://search.services.redacted/" schemaLocation="http://wwwdev.redacted:80/EDRSearch?xsd=1"></xsd:import>
</xsd:schema>
</types>
<message name="processSearch">
<part name="parameters" element="tns:processSearch"></part>
</message>
<message name="processSearchResponse">
<part name="parameters" element="tns:processSearchResponse"></part>
</message>
<message name="getAttributes">
<part name="parameters" element="tns:getAttributes"></part>
</message>
<message name="getAttributesResponse">
<part name="parameters" element="tns:getAttributesResponse"></part>
</message>
<message name="getACLUsers">
<part name="parameters" element="tns:getACLUsers"></part>
</message>
<message name="getACLUsersResponse">
<part name="parameters" element="tns:getACLUsersResponse"></part>
</message>
<portType name="EDRSearchServiceSOAPImpl">
<operation name="processSearch">
<input message="tns:processSearch"></input>
<output message="tns:processSearchResponse"></output>
</operation>
<operation name="getAttributes">
<input message="tns:getAttributes"></input>
<output message="tns:getAttributesResponse"></output>
</operation>
<operation name="getACLUsers">
<input message="tns:getACLUsers"></input>
<output message="tns:getACLUsersResponse"></output>
</operation>
</portType>
<binding name="EDRSearchServiceSOAPImplPortBinding" type="tns:EDRSearchServiceSOAPImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="processSearch">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
<operation name="getAttributes">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
<operation name="getACLUsers">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<service name="EDRSearchServiceSOAPImplService">
<port name="EDRSearchServiceSOAPImplPort" binding="tns:EDRSearchServiceSOAPImplPortBinding">
<soap:address location="http://wwwdev.redacted:80/EDRSearch"></soap:address>
</port>
</service>
</definitions>
C # SOAP (нене работает)
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<getACLUsers xmlns="http://search.services.redacted/">
<ACLUsersRequest xmlns="">
<docbase>edmsdev</docbase>
<aclName>my_acl</aclName>
</ACLUsersRequest>
<userCredentials xmlns="">
<userName>spoonyfork</userName>
<password>my_password</password>
<docbase>edmsdev</docbase>
</userCredentials>
</getACLUsers>
</s:Body>
</s:Envelope>
soapUI SOAP (работает)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://search.services.redacted/">
<soapenv:Header/>
<soapenv:Body>
<sear:getACLUsers>
<!--Optional:-->
<ACLUsersRequest>
<docbase>edmsdev</docbase>
<aclName>my_acl</aclName>
<aclObjectId></aclObjectId>
</ACLUsersRequest>
<!--Optional:-->
<userCredentials>
<userName>spoonyfork</userName>
<!--Optional:-->
<password>my_password</password>
<!--Optional:-->
<wsl4cookie></wsl4cookie>
<!--Optional:-->
<endUserForProxyId></endUserForProxyId>
<!--Optional:-->
<ip></ip>
<!--Optional:-->
<docbase>edmsdev</docbase>
</userCredentials>
</sear:getACLUsers>
</soapenv:Body>
</soapenv:Envelope>
EDRSearch XSD
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-b02-. --><xs:schema xmlns:tns="http://search.services.redacted/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://search.services.redacted/">
<xs:element name="getACLUsers" type="tns:getACLUsers"></xs:element>
<xs:element name="getACLUsersResponse" type="tns:getACLUsersResponse"></xs:element>
<xs:element name="getAttributes" type="tns:getAttributes"></xs:element>
<xs:element name="getAttributesResponse" type="tns:getAttributesResponse"></xs:element>
<xs:element name="processSearch" type="tns:processSearch"></xs:element>
<xs:element name="processSearchResponse" type="tns:processSearchResponse"></xs:element>
<xs:complexType name="getACLUsers">
<xs:sequence>
<xs:element name="ACLUsersRequest" type="tns:ACLUsersRequest" minOccurs="0"></xs:element>
<xs:element name="userCredentials" type="tns:UserCredentials" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ACLUsersRequest">
<xs:sequence>
<xs:element name="docbase" type="xs:string"></xs:element>
<xs:element name="aclName" type="xs:string"></xs:element>
<xs:element name="aclObjectId" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="UserCredentials">
<xs:sequence>
<xs:element name="userName" type="xs:string"></xs:element>
<xs:element name="password" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="wsl4cookie" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="endUserForProxyId" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="ip" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="docbase" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getACLUsersResponse">
<xs:sequence>
<xs:element name="return" type="tns:ACLUsersResponse" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ACLUsersResponse">
<xs:sequence>
<xs:element name="user" type="xs:string" maxOccurs="unbounded"></xs:element>
<xs:element name="largeGroups" type="xs:string" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="processSearch">
<xs:sequence>
<xs:element name="searchRequest" type="tns:searchRequest" minOccurs="0"></xs:element>
<xs:element name="userCredentials" type="tns:UserCredentials" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="searchRequest">
<xs:sequence>
<xs:element name="version" type="xs:string"></xs:element>
<xs:element name="docbase" type="xs:string"></xs:element>
<xs:element name="searchCriteria" type="tns:logicalOp" maxOccurs="unbounded"></xs:element>
<xs:element name="maxNumberOfDocuments" type="xs:string"></xs:element>
<xs:element name="folderPaths" type="xs:string" maxOccurs="unbounded"></xs:element>
<xs:element name="metaDataList" type="xs:string" maxOccurs="unbounded"></xs:element>
<xs:element name="objectType" type="xs:string"></xs:element>
<xs:element name="documentLaunchSettings" type="tns:documentLaunchSettings"></xs:element>
<xs:element name="documentACLSettings" type="tns:documentACLSettings"></xs:element>
<xs:element name="oracleHint" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="logicalOp">
<xs:sequence>
<xs:element name="type" type="xs:string"></xs:element>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="value" type="xs:string"></xs:element>
<xs:element name="logical" type="xs:string"></xs:element>
<xs:element name="relational" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="documentLaunchSettings">
<xs:sequence>
<xs:element name="launcher" type="xs:string"></xs:element>
<xs:element name="useChronicleId" type="xs:boolean"></xs:element>
<xs:element name="showLink" type="xs:boolean"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="documentACLSettings">
<xs:sequence>
<xs:element name="returnACL" type="xs:boolean"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="processSearchResponse">
<xs:sequence>
<xs:element name="return" type="tns:searchResponse" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="searchResponse">
<xs:sequence>
<xs:element name="docbase" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="documents" type="tns:document" nillable="true" minOccurs="0" maxOccurs="unbounded"></xs:element>
<xs:element name="numberOfDocuments" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="document">
<xs:sequence>
<xs:element name="objectId" type="xs:string"></xs:element>
<xs:element name="linkLocation" type="xs:string"></xs:element>
<xs:element name="metaDataList" type="tns:metaDataItem" maxOccurs="unbounded"></xs:element>
<xs:element name="aclInfo" type="tns:ACLInfo" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="metaDataItem">
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="value" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ACLInfo">
<xs:sequence>
<xs:element name="ACLName" type="xs:string"></xs:element>
<xs:element name="ACLObjectId" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getAttributes">
<xs:sequence>
<xs:element name="attributesRequest" type="tns:objectType" minOccurs="0"></xs:element>
<xs:element name="userCredentials" type="tns:UserCredentials" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="objectType">
<xs:sequence>
<xs:element name="docbase" type="xs:string"></xs:element>
<xs:element name="objectType" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getAttributesResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
C # код
ServiceReference1.UserCredentials uc = new ServiceReference1.UserCredentials();
uc.userName = "spoonyfork";
uc.password = "my_password";
uc.docbase = "edmsdev";
ServiceReference1.ACLUsersRequest aurt = new ServiceReference1.ACLUsersRequest();
aurt.aclName = "my_acl";
aurt.docbase = "edmsdev";
ServiceReference1.EDRSearchServiceSOAPImplClient client = new ServiceReference1.EDRSearchServiceSOAPImplClient();
ServiceReference1.ACLUsersResponse aure = new ServiceReference1.ACLUsersResponse();
aure = client.getACLUsers(aurt, uc);