Génération de code de WSDL dans WCF continue de retourner un message ne correspond pas à la valeur par défaut

StackOverflow https://stackoverflow.com/questions/2166668

Question

Ok, cela me rend fou. J'ai essayé de construire le code de mise en œuvre de services d'un wsdl prédéfini et il est toujours retournais un message sur le contrat / Interface de service:

// CODEGEN: Generating message contract since the wrapper name (GetMetricsRequest) of message GetMetricsRequest does not match the default value (GetMetrics)

    [System.ServiceModel.OperationContractAttribute(Action="GetMetrics", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
    GetMetricsResponse GetMetrics(GetMetricsRequest request);

J'ai essayé de le faire en utilisant svcutil.exe et générer l'assistant de code de service de la FUACE, et les deux le même résultat.

Ci-dessous le WSDL j'utilise. J'ai ajouté les types ici, je ne les ont réparties dans une vue séparée xsd, ne voulait pas publier les deux. L'utilisation de ce fichier WSDL (avec tous les types embarqués) génère également les mêmes problèmes.

J'ai passé en revue ce blog ( http://pzf.fremantle.org/ 2007/05 / handlign.html ), il est tout ce que je pouvais trouver en ce qui concerne ce problème. Je pense que je l'ai fait tout ce qu'il dit de faire, mais je suis toujours des problèmes.

Quelqu'un at-il rencontré ce? Il est très rageant, peut-être que je manque quelque chose d'évident. Toute aide sera grandement appréciée.

<wsdl:definitions
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:tns="urn:MyNameSpace:V1_0"        


 targetNamespace="urn:MyNameSpace:V1_0">


 <wsdl:types>
  <xs:schema targetNamespace="urn:MyNameSpace:V1_0">
   <xs:element name="GetMetricsRequest">
    <xs:complexType>
     <xs:sequence>
      <xs:element  nillable="true" name="GetMetricRequestElement" type="tns:GetMetricRequestType"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>   
   <xs:element name="GetMetricResponse">
    <xs:complexType>
     <xs:sequence>
      <xs:element  nillable="true" maxOccurs="unbounded" name="GetMetricResponseElement" type="tns:GetMetricResponseType"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>

   <xs:complexType name="GetMetricResponseType">
    <xs:sequence>
     <xs:element  nillable="true" name="Metrics" type="tns:MetricsType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:complexType name="GetMetricRequestType">
    <xs:sequence>
     <xs:element  minOccurs="1" maxOccurs="1" name="MetricCriteria" nillable="true" type="tns:MetricCriteriaType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:simpleType name="AvailableMetricType"> 
    <xs:restriction base="xs:string">
     <xs:enumeration value="MetricType1"/>
     <xs:enumeration value="MetricType2"/>
     <xs:enumeration value="MetricType3"/>
     <xs:enumeration value="MetricType4"/>
    </xs:restriction>
   </xs:simpleType>

   <xs:complexType name="AvailableMetricsType">
    <xs:sequence>
     <xs:element minOccurs="1" nillable="true" maxOccurs="unbounded" name="MetricType" type="tns:AvailableMetricType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:simpleType name="MetricDimensionType">
    <xs:restriction base="xs:string">
     <xs:enumeration value="Store"/>
     <xs:enumeration value="Workgroup"/>
     <xs:enumeration value="BusinessDate"/>
     <xs:enumeration value="JobClass"/>
    </xs:restriction>
   </xs:simpleType>

   <xs:complexType name="MetricDimensionsType">
    <xs:sequence>
     <xs:element minOccurs="1" maxOccurs="unbounded"  nillable="true" name="MetricDimension" type="tns:MetricDimensionType"/>
    </xs:sequence>
   </xs:complexType>    

   <xs:complexType name="MetricCriteriaType">
    <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="1" name="storeNumber" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="workgroup" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="jobClass" nillable="true" type="xs:string"/>
     <xs:element maxOccurs="1" nillable="true" name="dateStart" type="xs:dateTime"/>
     <xs:element maxOccurs="1" nillable="true" name="dateEnd" type="xs:dateTime"/>
     <xs:element maxOccurs="1" name="dimensions" nillable="true" type="tns:MetricDimensionsType"/>
     <xs:element maxOccurs="1" name="metricTypes" nillable="true" type="tns:AvailableMetricsType"/>
    </xs:sequence>
   </xs:complexType>

   <xs:complexType name="MetricType">
    <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="1" name="businessDate"  nillable="true" type="xs:dateTime"/>
     <xs:element minOccurs="0" maxOccurs="1" name="store" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="workgroup" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="jobClass" nillable="true" type="xs:string"/>
     <xs:element minOccurs="0" maxOccurs="1" name="metricValue"  nillable="true" type="xs:decimal"/>     
    </xs:sequence>
   </xs:complexType>

   <xs:complexType name="MetricsType">
    <xs:sequence>
     <xs:element minOccurs="0" maxOccurs="unbounded" name="Metric" nillable="true" type="tns:MetricType"/>
    </xs:sequence>
   </xs:complexType>

  </xs:schema>
 </wsdl:types>

 <wsdl:message name="GetMetricsRequestMessage">
  <wsdl:part name="parameters" element="tns:GetMetricsRequest"/>
 </wsdl:message>

 <wsdl:message name="GetMetricsResponseMessage">
  <wsdl:part name="parameters" element="tns:GetMetricResponse"/>
 </wsdl:message>

 <wsdl:portType name="Metric">
  <wsdl:operation name="GetMetrics">
   <wsdl:input message="tns:GetMetricsRequestMessage"/>
   <wsdl:output message="tns:GetMetricsResponseMessage"/>
  </wsdl:operation>
 </wsdl:portType>

 <wsdl:binding name="MetricService" type="tns:Metric">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  <wsdl:operation name="GetMetrics">
   <soap:operation soapAction="GetMetrics" style="document"/>
   <wsdl:input>
    <soap:body use="literal"/>    
   </wsdl:input>
   <wsdl:output>
    <soap:body use="literal"/>
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding>

 <wsdl:service name="Metric">
  <wsdl:port name="GetMetrics" binding="tns:MetricService">
   <soap:address location="http://myurl/myproj/1.0/MyService.svc"/>
  </wsdl:port>
 </wsdl:service>

</wsdl:definitions>

Merci marc_s,

Ok, cela semblait fonctionner. Il était juste un dans le type de réponse manquante « s ». DOH!

Maintenant, le code de service semble générer bien, mais quand je passe en revue à mon service il n'y a pas de contrat de données / xsd et il n'y a aucune opération sur le wsdl.

Il ressemble:

<wsdl:definitions name="MetricServiceImplementation" targetNamespace="http://tempuri.org/">
  <wsdl:import namespace="urn:GiantEagle:Services:Systems::Metric:V1_0" location="http://localhost:2814/Services/MetricService.svc?wsdl=wsdl0"/>
  <wsdl:types/>
    <wsdl:binding name="BasicHttpBinding_MetricService" type="i0:MetricService">
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
  </wsdl:binding>
  <wsdl:service name="MetricServiceImplementation">
    <wsdl:port name="BasicHttpBinding_MetricService" binding="tns:BasicHttpBinding_MetricService">
      <soap:address location="http://localhost:2814/Services/MetricService.svc"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Je me attends à ressembler wsdl j'ai produit le code de, non?

Pas de solution correcte

Autres conseils

Essayez ceci - votre demande et les messages de réponse dans WSDL doivent être

  • le même nom que votre opération pour la demande ( "GetMetrics")
  • le nom de l'opération + "réponse" pour votre réponse ( "GetMetricsResponse")

Donc, essayez de changer votre WSDL à:

<wsdl:message name="GetMetrics">
   <wsdl:part name="parameters" element="tns:GetMetricsRequest"/>
</wsdl:message>

<wsdl:message name="GetMetricsResponse">
   <wsdl:part name="parameters" element="tns:GetMetricResponse"/>
</wsdl:message>

et mettre à jour également votre portType:

<wsdl:portType name="Metric">
   <wsdl:operation name="GetMetrics">
      <wsdl:input message="tns:GetMetrics"/>
      <wsdl:output message="tns:GetMetricsResponse"/>
   </wsdl:operation>
</wsdl:portType>

Est-ce que l'aide du tout?

Dans le cas contraire: essayez de mettre à jour votre <xs:element> réelle dans votre XSD pour correspondre au même schéma - le type de demande doit être la même que l'opération que vous appelez, l'objet de réponse doit être (MethodName) Réponse.

Retirez le "*" dans le ReplyAction("*") du OperationContract

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top