2009-03-26 10 views
4

Niemals diese zuvor gesehen.Web-Service, der Objekt mit Nullfeldern zurückgibt

WebService.Implementation imp = new WebService.Implementation(); 
WebService.ImplementationRequest req = new WebService.ImplementationRequest(); 
return imp.GetValue(req); 

Das Objekt, das imp zurückgibt, ist nicht null. Es wird erwartungsgemäß eine ImplementationResponse zurückgegeben. Alle Felder in diesem Objekt sind jedoch null. Was nicht erwartet wird. Der WebService gibt derzeit nur einige konstante Dummy-Daten zurück. Wir haben dies auf einem anderen Entwickler-Rechner getestet, funktioniert gut.

Ich sollte auch beachten, dass der WebService eine Ausnahme auslösen sollte, wenn ich Null in die GetValue-Methode übergeben. Es tut es nicht. Nicht für mich.

Irgendeine Idee, was mit meiner Umgebung falsch sein könnte, die einen WebService veranlassen könnte, ein Objekt zurückzugeben, aber jeden Wert in diesem Objekt null zu machen? Und irgendwie 'magisch' dieses mysteriöse Objekt zurückgeben, wenn es eine Ausnahme geben sollte?

Antwort

9

Das tritt normalerweise auf, wenn eine Diskrepanz zwischen dem generierten Code und dem XML-Code besteht, der vom Webdienst zurückgegeben wird, sodass er nicht deserialisiert werden kann.

Besorgen Sie sich erneut die WSDL, regenerieren Sie alle Proxy-Klassen und versuchen Sie es erneut. Stellen Sie sicher, dass Sie die richtigen Dummy-Daten senden.

Update:

Diese verwendet, um mich viel zu passieren, da der Web-Service nicht von meinem Team verwaltet wurde, und wir würden keine Notiz von Änderungen an den Dienst gestellt bekommen. Wir haben die Soap-Nachrichten in der Web-Service-Pipeline zum Debuggen abgefangen. Here ist eine großartige Ressource, um Sie auf Ihrem Weg zu bekommen.

Sie müssen nichts in der Pipeline ändern, greifen Sie einfach die Soap-Nachrichten und speichern Sie sie, damit Sie später debuggen. In den meisten Fällen stellte sich heraus, dass es sich um eine Vertragsänderung handelte. In anderen Fällen hatten wir keinen Vertrag, so dass wir keine Änderungen feststellen konnten, ohne die Umschläge zu erfassen.

Wie auch immer, auch wenn es nicht Ihr Problem ist, denke ich, dass es eine gute Sache zu haben ist.

+0

Ich dachte, das könnte es sein, ich habe Ihrem Vorschlag eine Chance gegeben. Kein Würfel. – Xaiter

3

Sind die Felder mit < DataMember()> Attributen markiert, da sie sonst nicht serialisiert werden?

<DataMember()> _ 
Public Property SomeField() As String 
    Get 
     Return m_strSomeField 
    End Get 
    Private Set(ByVal value As String) 
     m_strSomeField= value 
    End Set 
End Property 

Verwenden Sie den Trace Viewer auch, um die zwischen dem Client und dem Server gesendeten Nachrichten zu analysieren. siehe Info:

https://stackoverflow.com/questions/560370/handling-wcf-proxy-null-return-issue

+0

Gut zu erwähnen, verwendet den WCF Log Viewer, um die Spur zu sehen, und hier ist das Bizzare Sache, es wird nicht in den Protokollen angezeigt. Nicht einmal ein Fehler, wie es nicht einmal versucht hat, die Anfrage zu stellen. – Xaiter

+0

Oh, ja, auch dafür gesorgt, dass das Zeug mit DataMember getaggt wurde. Es ist. – Xaiter

0

Ich glaube, ich sollte auch beachten, dass die WebService eine Ausnahme auslösen sollte wenn ich null in die Methode GetValue passieren

Sie nicht passieren Hier haben Sie ein Anforderungsobjekt übergeben.

Sie müssen auch in der Lage sein, in den Webdienst zu debuggen, um zu sehen, was dort vor sich geht. Ich gehe davon aus, dass Sie dies intern implementieren, da Sie es auf einen konstanten Dummy-Wert setzen können.

+0

Ich weiß, dass ich einen Wert im Beispielcode übergeben habe. Ich sage WENN ich null in die Methode gebe. – Xaiter

Verwandte Themen