Question

Im trying to consume a web service using the below WSDL from a .NET C# project.

I've added the web reference etc and tried invoking the method (getPatients) but it always returns an error:

"MyService.PatientType[] PatientService.getPatients(MyService.getPatients getPatients1)"
"No overload for method 'getPatients' takes 0 arguments"

I thought my code was ok (same as I've used successfully before) but I must be doing something wrong...

MyService.PatientService ws = new MyService.PatientService();
string message = ws.getPatients();

Does anyone have any ideas?

Thanks

WSDL:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions name="patient"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:tns="http://www.example.org/patientservice/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:p1="http://www.example.org/patientservice/patient_types/"
targetNamespace="http://www.example.org/patientservice/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/patientservice/patient_types/" 
xmlns:tns="http://www.example.org/patientservice/patient_types/"    
xmlns:ns1="http://www.example.org/patient"
elementFormDefault="qualified">

<xsd:complexType name="patientType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="age" type="xsd:int"/>
<xsd:element name="ssn" type="xsd:string"/>
<xsd:element name="pid" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>

<xsd:element name="getPatients">
<xsd:complexType/>
</xsd:element>

<xsd:element name="getPatientsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="patient" type="tns:patientType" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="getPatient">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ssn" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="getPatientResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="patient" type="tns:patientType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

</xsd:schema>
</wsdl:types>
<wsdl:message name="getPatientsRequest">
<wsdl:part element="p1:getPatients" name="in"/>
</wsdl:message>
<wsdl:message name="getPatientsResponse">
<wsdl:part element="p1:getPatientsResponse" name="out"/>
</wsdl:message>
<wsdl:message name="getPatientRequest">
<wsdl:part name="in" element="p1:getPatient"></wsdl:part>
</wsdl:message>
<wsdl:message name="getPatientResponse">
<wsdl:part name="out" element="p1:getPatientResponse"></wsdl:part>
</wsdl:message>
<wsdl:portType name="patient">
<wsdl:operation name="getPatients">
<wsdl:input message="tns:getPatientsRequest"/>
<wsdl:output message="tns:getPatientsResponse"/>
</wsdl:operation>
<wsdl:operation name="getPatient">
<wsdl:input message="tns:getPatientRequest"></wsdl:input>
<wsdl:output message="tns:getPatientResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="patientSOAP" type="tns:patient">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getPatients">
<soap:operation  style="document" soapAction=""/>
<wsdl:input name="getPatientsRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getPatientsResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getPatient">
<soap:operation  style="document" soapAction=""/>
<wsdl:input name="getPatientRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getPatientResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PatientService">
<wsdl:port binding="tns:patientSOAP" name="PatientSOAPPort">
<soap:address location="http://192.168.100.1:8080/patientservice"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Was it helpful?

Solution

I've generated a proxy against the wsdl and it seems the method getPatients takes a parameter.

try this:

PatientService ws = new PatientService();
getPatients getPatients1 = new getPatients();
patientType[] patients = ws.getPatients(getPatients1);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top