Riesco a vedere l'oggetto in Fiddler ma l'oggetto non deserializza dalla mia parte. Qualcuno ha visto questo prima?Le proprietà in un oggetto risposta dopo una chiamata al servizio web sono nulle
risposta
L'unico motivo per cui posso pensare è un disallineamento del contratto. Anche se è strano se non viene lanciato nessun errore di validazione. Stai utilizzando un client generato dal WSDL corretto? È un client WCF o SOAP? La prima è convalidata, ne sono sicuro, ma i disallineamenti dello schema potrebbero scivolare nel secondo.
Si verifica quando si genera la classe proxy dallo strumento wsdl e quando viene aggiunta come riferimento di servizio tramite la GUI VS2010. Questo è un client SOAP. – Sean
Usa svcutil.exe, non wsdl.exe. O semplicemente utilizzare "Aggiungi riferimento servizio" e puntare all'endpoint WSDL o metadati. –
Ho esattamente lo stesso problema di questo: gli spazi dei nomi che vedo nella risposta WSDL e XML (in Fiddler) sono esattamente gli stessi. Anche utilizzando un client SOAP. L'oggetto risposta è un semplice wrapper attorno a un array generico (dal server (Java) che è annotato con @XmlElementRefs ({@ XmlElementRef (type = Class1.class, ...}) l'XML passato a il client C# sembra corretto come:
"La risposta è nulla" o "La risposta contiene valori null" o "La richiesta è nulla" o "La richiesta contiene valori null" significa quasi sempre che si verifica una mancata corrispondenza di spazio dei nomi. Ad esempio, la risposta può contenere:
<response xmlns="http://foo.com"/>
ma dovrebbe essere infatti
<response xmlns="http://bar.com"/>
In questo caso, saranno ricevuti nullo.
SÌ ! Grazie – mikey
Ogni volta che ciò accade a me, è perché ho bisogno di aggiornare i miei riferimenti di servizio. Prova quello e fammi sapere cosa succede :)
grazie per la risposta, ma fidati di me, ho cancellato e ricreato circa mille volte = ( Tuttavia è possibile che mi manchi qualcosa di ugualmente semplice o sto facendo uno stupido errore da qualche altra parte (la mia prima app C#) Ho provato con VS 2010 e SharpDevelop, tutto inutilmente ... – earcam
Ok, lo apprezzerei da quando hai chiesto la domanda se potessi farlo ancora una volta, per favore. Cioè aggiornare il riferimento del servizio, piuttosto che eliminare e ricreare. Supponendo che non funzioni, sarebbe ideale vedere la definizione/contratto per l'oggetto (s) e il metodo coinvolto :) –
Ho aggiornato in SharpDevelop ed era lo stesso di prima. Quando ho aggiornato il riferimento per i servizi Web in VS Express 2010, ho modificato lo spazio dei nomi C# che prefiggeva lo spazio dei nomi predefinito del progetto al riferimento del servizio (come DefaultNamespace.ServiceReference). L'esecuzione da entrambi i risultati IDE nello stesso oggetto risposta con campi null. – earcam
Risolto esso ... o almeno hanno soluzione. Nel codice Java, @XmlElementRefs e @XmlElementRef avrebbero dovuto essere rispettivamente @XmlElements e @XmlElement (oltre all'attributo "type" era necessario un attributo "nome").
Indovinando se avessi postato questa come una nuova domanda con un tag Java e C# e servizi web, uno stackoverflower con gli occhi spalancati avrebbe individuato questo errore scolastico.
Ho avuto un problema simile che ho risolto controllando il valore dell'ordine in Reference.cs. [System.Xml.Serialization.XmlElementAttribute (Order = 0)]
L'ordine dei parametri di ritorno era cambiata ma aggiornare il mio riferimento al servizio in Visual Studio non ha modificato il valore "Ordine".
Verificare che i parametri restituiti in Fiddler/SoapUI siano gli stessi della classe generata da proxy.
Ho avuto un caso simile in cui ho creato un client tramite SVCUTIL/Service Reference di VS. La risposta è stata ricevuta correttamente con dati corretti (confermata tramite il metodo IClientMessageInspector.AfterReceiveReply) tuttavia i valori a livello di oggetto non venivano popolati. Non ci sono stati errori di de-serializzazione (confermati tramite l'uscita system.diagnostics)
Il problema era duplice:
1) Alcuni oggetti sono stati nominati esattamente come i loro tipi, ma aveva spazi dei nomi diversi dai loro tipi. Questo sembra aver confuso il generatore di proxy nell'assegnazione del parametro namespace (nell'annotazione System.Xml.Serialization.XmlElementAttribute) della classe a quello dell'oggetto
2) Il parametro dell'ordine (in System.Xml. Serialization.XmlElementAttribute annotazione) delle proprietà non è stata richiesta e anche il parametro namespace mancava
in modo da: [System.Xml.Serialization.XmlElementAttribute (IsNullable = true, ordine = 0)]
a: [ System.Xml.Serialization.XmlElementAttribute (IsNullable = true, Namespace = "http: //www.whathevernamespaceiscorrect.com ")]
Fondamentalmente, nel proxy generato avevo bisogno di correggere lo spazio dei nomi della classe su quello specificato nel tipo e sostituire il parametro di ordine con il parametro namespace impostandolo nello spazio dei nomi corretto in base al wsdl
ho avuto lo stesso problema, e come suggerito il problema dello spazio dei nomi è stata la cause.However radice, la mia classe proxy è annidato classi e lunga catena di namespace nidificato.
era confusa per identificare lo spazio dei nomi corretto si applica in codice Cs per la classe proxy. Qui, descrivo come capire lo spazio dei nomi che è necessario aggiornare nel proxy client.
Quello che ho fatto è stato intercettare la richiesta nella classe ClientMessageInspector, metodo AfterReceiveReply (Abilita l'ispezione o la modifica di un messaggio dopo che è stato ricevuto un messaggio di risposta ma prima di passarlo all'applicazione client.) Verificato lo spazio dei nomi dell'oggetto che erano restituendo null in Response usando XMLDocument. Ho aggiornato la classe proxy con lo spazio dei nomi ripreso da XML. Dopo aver apportato le modifiche, gli oggetti non erano nulli in risposta.
public class MyMessageInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message request, object correlationState)
{
MemoryStream ms = new MemoryStream();
XmlWriter writer = XmlWriter.Create(ms);
request.WriteMessage(writer);
writer.Flush();
ms.Position = 0;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(ms);
this.ReadMessage(xmlDoc);
ms = new MemoryStream();
xmlDoc.Save(ms);
ms.Position = 0;
XmlReader reader = XmlReader.Create(ms);
Message newMessage = Message.CreateMessage(reader, int.MaxValue, request.Version);
newMessage.Properties.CopyProperties(request.Properties);
request = newMessage;
}
private void ReadMessage(XmlDocument xmlDoc)
{
XmlNode v1 = xmlDoc.GetElementsByTagName("XPAth");
//Actual Namespace in XML, which should be used in Proxy Class
string namespaceURIForObjectInXML = v1.NamespaceURI;
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
}
}
Verificare che la definizione/specifica corrisponda all'uscita. Confronta il WSDL (nel browser) e la risposta (in SOAP-UI, Fiddler), ad es.
- WSDL utilizza caso di cammello (lastName) e la risposta
- utilizza trattini (cognome).
- 1. attraversa un oggetto e trova le proprietà non nulle
- 2. Chiamata al servizio Web da Jenkins
- 3. Riproduzione: risposta al servizio web binario
- 4. REST - risposta al servizio web - tipo mime?
- 5. Le proprietà di sistema Java sono sempre non nulle?
- 6. Errore XML durante la chiamata al servizio web
- 7. Come aggiungere un riferimento al servizio Web in una DLL
- 8. La migliore strategia per memorizzare una costosa chiamata al servizio web in Grails
- 9. Riempimento automatico del testo sul servizio di risposta al servizio web
- 10. chiamata interdominio con jQuery jsonp al servizio Web ASP.NET
- 11. Il valore intero viene perso nella chiamata al servizio web
- 12. UIViewController IBOutlets sono nulle
- 13. Mockito modello per una chiamata di servizio Web Primavera
- 14. attributi timestamp sono nulle
- 15. Risposta del servizio Web in stringa Formato
- 16. Chiamata di metodi Web dallo stesso servizio Web
- 17. Passo oggetto con la proprietà complesso con servizio web
- 18. Come attendere il risultato della chiamata al servizio web asincrono in ASP.NET per le migliori prestazioni
- 19. Chiamata al servizio Web JSON con parametri - Objective C - iOS
- 20. Asp.net Webservice - Chiamata sicura al servizio web con jquery AJAX
- 21. Oggetto persistente in C#. NET Servizio Web
- 22. Quali sono le differenze tra un servizio Web e un servizio Windows?
- 23. Aggiunta SOAPHeader personalizzata in C# per una chiamata al servizio Web
- 24. Flask e/o Tornado - gestione della chiamata che richiede molto tempo al servizio web esterno
- 25. Intercettazione di ConnectException in una chiamata al servizio web JAX-WS
- 26. Helper per copiare proprietà non nulle da un oggetto all'altro? (Java)
- 27. Come eseguire una chiamata al servizio Web SOAP dalla classe Java?
- 28. AngularJS trasmesso da un servizio che non attiva una chiamata al secondo servizio
- 29. Cosa significano le parentesi quadre attorno al nome di una proprietà in un oggetto letterale?
- 30. le variabili globali sono nulle quando si utilizza PHPUnit
Ho lo stesso problema e attualmente sto tirando i capelli (soprattutto perché sembra che non ci sia modo di eseguire il debug del codice M $ C# che deserializza il WS). – earcam