2010-01-30 19 views
7

Ok, questo mi sta facendo impazzire. Ho cercato di costruire il servizio codice di implementazione da un WSDL predefinito ed è sempre restituire un messaggio sul contratto di servizio/Interfaccia:Generare codice da WSDL in WCF continua a restituire il messaggio non corrisponde al valore predefinito

// 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); 

ho cercato di farlo usando svcutil.exe e generare servizio di WSCF codice wizard, ed entrambi restituiscono lo stesso risultato.

Di seguito è riportato il WSDL che sto utilizzando. Ho aggiunto i tipi qui, li ho suddivisi in un xsd separato, semplicemente non volevo postarli entrambi. Anche l'utilizzo di questo wsdl (con tutti i tipi incorporati) genera gli stessi problemi.

Ho letto questo post (http://pzf.fremantle.org/2007/05/handlign.html), è tutto quello che ho potuto trovare riguardo a questo problema. Penso di aver fatto tutto ciò che dice di fare, ma sto ancora avendo problemi.

Qualcun altro ha incontrato questo? È molto irritante, forse mi manca qualcosa di ovvio. Qualsiasi aiuto sarà molto apprezzato.

<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> 

marc_s Grazie,

Ok, che sembrava funzionare. Era solo una mancanza 's nel tipo di risposta. DOH!

Ora il codice di servizio sembra generare correttamente, ma quando si accede al mio servizio non c'è nessun contratto dati/xsd e non ci sono operazioni su wsdl.

appena si presenta come:

<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> 

mi aspetterei farlo sembrare come il WSDL ho generato il codice, no?

+0

Penso che questo è legato al fatto che hai a che fare con tipi complessi – JohnIdol

+0

Qual è il messaggio di errore che si stanno ottenendo – RedDeckWins

risposta

5

Prova questo - la vostra richiesta e messaggi di risposta in WSDL dovrebbe essere

  • lo stesso nome l'operazione per la richiesta ("GetMetrics")
  • il nome dell'operazione + "risposta" per la vostra risposta ("GetMetricsResponse")

in modo da provare a cambiare il vostro 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> 

e aggiorna anche il tuo portType:

Questo aiuta?

In caso contrario: prova ad aggiornare i <xs:element> nel vostro XSD per abbinare lo stesso andamento reale - il tipo di richiesta deve essere lo stesso l'operazione che si sta chiamando, l'oggetto risposta deve essere (MethodName) Response.

+1

Ora il codice di servizio sembra essere la generazione di multa , ma quando cerco il mio servizio non c'è nessun contratto dati/xsd e non ci sono operazioni su wsdl. – Brutus35

3

Rimuovere il "*" nel ReplyAction("*") del OperationContract

+0

Sembra che non ci sia un "da rimuovere dalla sua ReplyAction nella prima sezione di codice. – JoshDM

Problemi correlati