I am new to web services and C #, so please forgive me if my question is too simple. I searched around but can't find an answer - at least one based on my keywords.
I am trying to call a web service through C # (Visual Web Developer 2010 Express), but I am getting an error in response. When I call the same web service through soapUI, I do not get an error. When I compare a SOAP request with C # with a SOAP request with soapUI, there is no intentionally empty <aclObjectId> parameter in the SOAP SOA request. When I take an empty parameter from soapUI request, I get the same error. For me, the answer is to get C # to send the parameter, even if it is empty. I tried this by setting it to null or "", but to no avail. Is there a way to get my C # web service client to send an empty parameter, or maybe send all the parameters even if they don't matter?
Wsdl
<?xml version="1.0" encoding="UTF-8"?><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 (not working)
<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 (works)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://search.services.redacted/"> <soapenv:Header/> <soapenv:Body> <sear:getACLUsers> <ACLUsersRequest> <docbase>edmsdev</docbase> <aclName>my_acl</aclName> <aclObjectId></aclObjectId> </ACLUsersRequest> <userCredentials> <userName>spoonyfork</userName> <password>my_password</password> <wsl4cookie></wsl4cookie> <endUserForProxyId></endUserForProxyId> <ip></ip> <docbase>edmsdev</docbase> </userCredentials> </sear:getACLUsers> </soapenv:Body> </soapenv:Envelope>
EDRSearch XSD
<?xml version="1.0" encoding="UTF-8"?><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 # code
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);
source share