| 

.NET C# Java Javascript Exception

5
Hallo, ich sitze hier vor ein Problem und komm nicht wirklich weiter.

Ich habe einen PDA mit Windows CE 6.0 als Betriebssystem. Nun will ich mit diesem PDA auf einen Webservice zugreifen der auf meinen PC läuft. Also habe ich mir den "Hello World"-Webservice mit VS2005 erstellt. Soweit funktioniert auch alles. Auch der eigentliche Zugriff auf dem Webservice und die Hello World Methode funktionieren einwandfrei.

Jetzt ist es aber so, dass ich bei einer der Webmethoden ein Bytearry zurück geben möchte. Und immer wenn ich diese Methode aufrufe, bekommen ich eine InvalidOperationException.

Weiß jemand was zu diesem Problem?
schon mal im vorraus danke ;)

Edit:
InvalidOperationException

at System.Xml.Serialization.XmlSerializationReader.DeserializeCustomElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue)
at System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget)
at System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean& firstElement)
at System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget)
at System.Xml.Serialization.XmlSerializationReader.DeserializeComplexElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue)
at System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget)
at System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean& firstElement)
at System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget)
at System.Web.Services.Protocols.SoapMessageParser.execute()
at System.Web.Services.Protocols.SoapMessageSerializer.Deserialize(XmlReader reader, SoapHttpClientProtocol client, LogicalSoapMethod soapMethod, Boolean soap12)
at System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke(String methodName, Object[] parameters, WebClientAsyncResult asyncResult)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at WebserviceCom.Client.UI.Service.Service.GetLastMessage()
at WebserviceCom.Client.UI.frmMain.cmdManualTest_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at WebserviceCom.Client.UI.frmMain.Main()


<System.Web.Services.Protocols.SoapDocumentMethodAttribute("X/GetLastMessage", RequestNamespace:="X", ResponseNamespace:="X", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)>  _
Public Function GetLastMessage() As <System.Xml.Serialization.XmlElementAttribute(DataType:="base64Binary")> Byte()
Dim results() As Object = Me.Invoke("GetLastMessage", New Object(-1) {})
Return CType(results(0),Byte())
End Function


Er stoppt int der Zeile: "Dim results() As Object = Me.Invoke..." läuft also die Methode auf dem Server erst durch und kracht dann.

Gruß
Christoph
News:
19.01.2012
Christoph_Wi 83 1 5
Kannst Du Deine Frage mindestens um die Message der InvalidOperationException ergänzen?
ffordermaier 19.01.2012
ja klar (total vergessen), hab es editiert
Christoph_Wi 19.01.2012
Das DeserializeCustomElement macht mich etwas stutzig. Kannst Du denn das Objekt, welches GetLastMessage() als Rückgabewert liefert mit dem XmlSerializer serialisieren und anschließend deserialiseren (in einem Testprogramm ohne Kommunikationsstrecke)?
ffordermaier 19.01.2012
ja, das geht ohne Probleme sowohl auf dem PC als auch auf dem PDA.
Christoph_Wi 19.01.2012
Sorry, mehr fällt mir im Moment dazu nicht ein. Ich meld mich, sollte ich noch eine Idee haben.
ffordermaier 19.01.2012
1 Antwort
1
So, ich habe nun selber noch ein wenig was raus gefunden. Es scheint so, als ob Microsoft die Serialisierung von Bytearrays nicht zulässt. Zumindest nicht über die Kommunikation eines Webservices. Als Grund geben sie an, das dies zu Performanceaufwändig ist.

Ich frage mich dann nur wieso die, dass dann überhaupt zulassen und nich gleich ganz raus lassen. O.o

Naja um die Daten nun übertragen zu können, blieb mir dann nur noch die Möglichkeit die Daten unserialisiert zu schicken in Form des Ursprunkobjektes. Dafür musste ich das Objekt ein wenig anpassen. D.h. einen parameterlosen Konstruktor hinzufügen und alle Variabelen des Objektes auf Public setzten. Finde ich persönlich zwar nicht so schön, funktioniert aber ;)

Danke nochmal, besonders an ffordermaier, für die Hilfe
24.01.2012
Christoph_Wi 83 1 5

Stelle deine Webservice-Frage jetzt!