2012-07-09 1 views
1

Je tente de consommer un service Web en utilisant le WSDL ci-dessous à partir d'un projet .NET C#.C# erreur de consommation de service Web

J'ai ajouté le etc référence web et essayé d'appeler la méthode (getPatients), mais il retourne toujours une erreur:

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

Je pensais que mon code était ok (comme je l'ai utilisé avec succès avant) mais je dois faire quelque chose de mal ...

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

Quelqu'un a-t-il des idées?

Merci

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> 

Répondre

1

J'ai produit une procuration contre le wsdl et il semble que la méthode getPatients prend un paramètre.

essayez ceci:

PatientService ws = new PatientService(); 
getPatients getPatients1 = new getPatients(); 
patientType[] patients = ws.getPatients(getPatients1); 
+0

Salut alex, qui a fonctionné, mais il l'habitude de convertir la chaîne. J'ai également essayé usingthe Patient Type mais cela n'a pas fonctionné. J'étais sûr que j'avais essayé ce que vous avez suggéré aussi :) – Developr

+1

vous pouvez toujours essayer en utilisant var response = ws.getPatients (getPatient1) et le débogage pour voir de quel type il retourne. – Troy

+1

Ce que dit Troy fonctionnera, mais si vous voulez utiliser le type réel retourné, j'ai modifié le code avec le bon type de retour qui est un tableau de patientType. –

Questions connexes