2016-03-17 45 views
9

Sto cercando di aggiungere un riferimento di servizio al mio progetto e sto ricevendo costantemente lo stesso errore.Riferimento di servizio non caricato: schema con spazio dei nomi di destinazione non trovato

Ho creato un servizio di finto con SOAP UI che sembra che vada bene, poi cerco di aggiungere un riferimento al servizio di questo servizio finta e compare l'errore:

Warning 14 Custom tool warning: Cannot import wsdl:portType 
Detail: An exception was thrown while running a WSDL import extension:  System.ServiceModel.Description.DataContractSerializerMessageContractImporter 
Error: Schema with target namespace 'urn:oasis:names:tc:dss:1.0:core:schema' could not be found. 
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/esign']/wsdl:portType[@name='EsignServiceSoap11PortType']  

L'importazione sul WSDL cui schema con namespace urn: oasi: nomi: tc: dss: 1.0: nucleo: schema viene caricata è:

<wsdl:types> 

     <schema xmlns="urn:oasis:names:tc:dss:1.0:core:schema"> 

      <import namespace="urn:oasis:names:tc:dss:1.0:core:schema" schemaLocation="oasis-dss-core-schema-v1.0-os.xsd"/> 

     </schema> 

    ..... 
</wsdl:types> 

ho già provato a collegare lo schemaLocation direttamente al file nella stessa cartella che il WSDL, a un URL in cui è pubblicato in un server privato e in un uri pubblico in cui è anche pubblicato.

Ricevo sempre lo stesso errore e sto iniziando a sentire che forse mi sbaglio con la fonte del problema.

Qualsiasi intuizione sarà molto apprezzata.

AGGIORNAMENTO: Ho inserito urna: oasi: nomi: tc: dss: 1.0: core: definizione completa dello schema all'interno del file wsdl, invece di provare a importarlo. Quando faccio così, SOAP UI crea ancora correttamente il servizio di scherno, tuttavia, quando si tenta di aggiungere un riferimento al servizio, questo errore è gettato durante il rilevamento dei servizi:

The document was understood, but it could not be processed. 
    - The WSDL document contains links that could not be resolved. 
    - DTD is prohibited in this XML document. 
Metadata contains a reference that cannot be resolved: 'http://elite8100-3:8088/mockEsignServiceSoap11Binding?WSDL'. 
The content type text/html; charset=iso-8859-1 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 455 bytes of the response were: '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
    <soap:Body> 
    <soap:Fault> 
     <soap:Code> 
    <soap:Value>Server</soap:Value> 
    </soap:Code> 
    <soap:Reason> 
    <!--1 or more repetitions:--> 
    <soap:Text xml:lang="en">Missing operation for soapAction [null] and body element [null] with SOAP Version [SOAP 1.2]</soap:Text> 
    </soap:Reason> 
</soap:Fault> 
    </soap:Body> 
</soap:Envelope>'. 
The remote server returned an error: (500) Internal Server Error. 
If the service is defined in the current solution, try building the solution and adding the service reference again. 

EDIT2: ho usato Fiddler per controllare http traffico durante il tentativo di creare il proxy, come suggerito nella risposta. Durante la creazione, su Fiddler compare un errore del server interno 500 quando si tenta di raggiungere l'url mockService, la risposta dal server è stata "Operazione mancante per soapAction [null] e body element [null] con SOAP versione [SOAP 1.2]".

Questo è, attualmente, il WSDL che sto usando per creare il mockService.

<wsdl:types> 

     <schema xmlns="http://www.w3.org/2001/XMLSchema"> 

      <import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://aplicaciones.serpasa.es/CONTROLAMBIENTAL/oasis-dss-core-schema-v1.0-os.xsd"/> 

     </schema> 

     <schema xmlns="http://princast.es/esign/2.0/esign.xsd"> 

      <import namespace="http://princast.es/esign/2.0/esign.xsd" schemaLocation="http://aplicaciones.serpasa.es/CONTROLAMBIENTAL/esign.xsd"/> 

     </schema> 

</wsdl:types> 


<wsdl:message name="SignRequestMessage"> 

     <wsdl:part element="dss:SignRequest" name="payload"/> 

</wsdl:message> 

<wsdl:message name="SignResponseMessage"> 

     <wsdl:part element="dss:SignResponse" name="payload"/> 

</wsdl:message> 


<wsdl:message name="VerifyRequestMessage"> 

     <wsdl:part element="dss:VerifyRequest" name="payload"/> 

</wsdl:message> 

<wsdl:message name="VerifyResponseMessage"> 

     <wsdl:part element="dss:VerifyResponse" name="payload"/> 

</wsdl:message> 


<wsdl:message name="GetSignInfoFromDocumentRequestMessage"> 

     <wsdl:part element="esign:SignInfoRequest" name="payload"/> 

</wsdl:message> 

<wsdl:message name="GetSignInfoFromDocumentResponseMessage"> 

     <wsdl:part element="esign:SignInfo" name="payload"/> 

</wsdl:message> 


<wsdl:message name="GetSignConfigurationRequestMessage"> 

     <wsdl:part element="esign:SignConfigurationRequest" name="payload"/> 

</wsdl:message> 

<wsdl:message name="GetSignConfigurationResponseMessage"> 

     <wsdl:part element="esign:SupportedSignConfiguration" name="payload"/> 

</wsdl:message> 


<!-- Port --> 


<wsdl:portType name="EsignServiceSoap11PortType"> 


     <wsdl:operation name="sign"> 

      <wsdl:input message="impl:SignRequestMessage" name="signRequest"/> 

      <wsdl:output message="impl:SignResponseMessage" name="signResponse"/> 

     </wsdl:operation> 


     <wsdl:operation name="verify"> 

      <wsdl:input message="impl:VerifyRequestMessage" name="verifyRequest"/> 

      <wsdl:output message="impl:VerifyResponseMessage" name="verifyResponse"/> 

     </wsdl:operation> 


     <wsdl:operation name="getSignConfiguration"> 

      <wsdl:input message="impl:GetSignConfigurationRequestMessage" name="getSignConfigurationRequest"/> 

      <wsdl:output message="impl:GetSignConfigurationResponseMessage" name="getSignConfigurationResponse"/> 

     </wsdl:operation> 


     <wsdl:operation name="getSignInfoFromDocument"> 

      <wsdl:input message="impl:GetSignInfoFromDocumentRequestMessage" name="getSignInfoFromDocumentRequest"/> 

      <wsdl:output message="impl:GetSignInfoFromDocumentResponseMessage" name="getSignInfoFromDocumentResponse"/> 

     </wsdl:operation> 


</wsdl:portType> 


<!-- Binding --> 

<wsdl:binding name="EsignServiceSoap11Binding" type="impl:EsignServiceSoap11PortType"> 


     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 


     <wsdl:operation name="sign"> 

      <wsdl:documentation> 

      Realiza una firma digital delegada sobre un 
      documento segun el estandard OASIS Digital Signature Service (DSS) 
      </wsdl:documentation> 


      <wsdlsoap:operation soapAction="urn:sign"/> 

      <wsdl:input name="signRequest"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:input> 

      <wsdl:output name="signResponse"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:output> 

     </wsdl:operation> 


     <wsdl:operation name="verify"> 

      <wsdl:documentation> 

      Verifica una firma digital OASIS Digital 
      Signature Service (DSS) 
      </wsdl:documentation> 


      <wsdlsoap:operation soapAction="urn:verify"/> 

      <wsdl:input name="verifyRequest"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:input> 

      <wsdl:output name="verifyResponse"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:output> 

     </wsdl:operation> 


     <wsdl:operation name="getSignConfiguration"> 

      <wsdl:documentation> 

      Obtiene los certificados con los que una 
      aplicacion en el MC de Firma Digital puede realizar 
      una firma 
      </wsdl:documentation> 


      <wsdlsoap:operation soapAction="urn:getSignConfiguration"/> 

      <wsdl:input name="getSignConfigurationRequest"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:input> 

      <wsdl:output name="getSignConfigurationResponse"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:output> 

     </wsdl:operation> 


     <wsdl:operation name="getSignInfoFromDocument"> 

      <wsdl:documentation> 

      Obtiene informacion de un fichero de firma 
      </wsdl:documentation> 


      <wsdlsoap:operation soapAction="urn:getSignInfoFromDocument"/> 

      <wsdl:input name="getSignInfoFromDocumentRequest"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:input> 

      <wsdl:output name="getSignInfoFromDocumentResponse"> 

       <wsdlsoap:body use="literal"/> 

      </wsdl:output> 

     </wsdl:operation> 


</wsdl:binding> 


<wsdl:service name="EsignService"> 


     <wsdl:documentation> 

     Servicio web de firma digital 
     </wsdl:documentation> 


     <wsdl:port binding="impl:EsignServiceSoap11Binding" name="EsignServiceSoap11Port"> 


      <wsdlsoap:address location="http://someexternalsite.com"/> 


     </wsdl:port> 


</wsdl:service> 

Ho scaricato ogni singolo associato XSD e pubblicato su un server pubblico, anche ho cambiato schemaLocations in modo che puntano agli indirizzi di questo server pubblico, tuttavia , il problema sembra essere correlato alla struttura WSDL.

+0

Per l'aggiornamento, sembra che l'intestazione del tipo di contenuto non sia impostata correttamente, text/html anziché (application/soap + xml; charset = utf-8), sebbene il payload assomigli ad una busta di sapone. Anche il server genera un errore interno del server (500). Hai accesso agli errori su quel server? – Dijkgraaf

+0

@Dijkgraaf L'errore del tipo di contenuto mi disorienta totalmente, poiché quando includo lo schema non c'è alcun problema con esso. Purtroppo non ho accesso per vedere gli errori sul server remoto. – Bardo

+0

Una piccola domanda veloce, hai provato a vedere cosa succede quando cerchi di connetterti a uno schema di test locale? uno schema nella stessa posizione dello schema problematico? La domanda di fondo è, è un problema con l'accesso agli schemi in generale o a questi schemi specifici? So che non risolverà il problema, ma localizzerà il problema. – user3569147

risposta

1

Il problema principale prima dell'aggiornamento deve essere la sintassi errata. Dove dici <schema xmlns="urn:oasis:names:tc:dss:1.0:core:schema"> lo strumento si aspetta <schema xmlns="http://www.w3.org/2001/XMLSchema">. Per importare semplicemente un file XSD esterno, lo spazio dei nomi XML predefinito sopra è tutto ciò di cui hai bisogno.

Lo schema di importazione/inclusione può essere abbastanza disordinato; per quei casi, quando li si inserisce all'interno del WSDL, come è stato suggerito, è facile commettere errori, in quanto non si tratta semplicemente di un semplice copia-incolla. Ad esempio, alcuni strumenti potrebbero avere problemi nella gestione dei riferimenti che originariamente erano basati su xsd: include; i chameleon include non possono essere riprodotti all'interno di un WSDL; e tutto il tuo xsd: importazioni NON DEVE usare l'attributo schemaLocation.

Per risolvere problemi relativi a riferimenti non funzionanti, consiglio vivamente l'uso di un debugger HTTP, come ad esempio Fiddler. Ti dirà almeno quali riferimenti hai dimenticato di pulire, o qualsiasi header HTTP che la tua soluzione di simulazione non sia impostata correttamente.

Se quanto sopra lascia ancora con alcune domande, sarà necessario pubblicare il WSDL modificato.

+0

Ho aggiunto il WSDL completo. Ho controllato Fiddler durante il servizio di riferimento e ho ricevuto il seguente errore: "Operazione mancante per soapAction [null] e body [null] con SOAP Version [SOAP 1.2]" – Bardo

+0

@Bardo, devi correggere il tuo WSDL come da mio primo suggerimento . Assicurati che lo spazio dei nomi dell'elemento dello schema sia 'http: // www.w3.org/2001/XMLSchema' non può/non dovrebbe funzionare nel modo in cui lo hai. –

+0

L'ho fatto anche io, ma non ho cambiato nulla. Lo stesso errore. Ho riflettuto sulla modifica del frammento di codice della domanda. – Bardo