WSDL-Webservice in Windows Phone App
Hallo,
Wie kann ich ein Webservice (http://url.wsdl) in meine Windows Phone App einbinden?
Ich kann den Webservice ohne Probleme in eine Windows .NET Anwendung einbinden aber in einem Windows Phone Projekt ist die Schaltfläche "Webservice hinzufügen" ausgegraut.
Gibt es dort eine Möglichkeit ein solches Webservice einzubinden?
Vielen Dank schon mal im vorraus.
Johann Löwen
AW: WSDL-Webservice in Windows Phone App
normalerweise machst du in deinem Solution Explorer rechtesklick auf References und dann wählt man "Add Service Reference..." aus. In dem oberen Feld gibst du die Adresse ein und unten der NameSpace, den du im Programm benutzen willst, ABER so wie ich das hier (http://forums.create.msdn.com/forums...px?PageIndex=2) herausgelesen habe funktioniert es iwie nicht ganz. also wenn du ein WCF Service nutzt, dann geht das ohne Probleme, aber bei anderen scheint es wohl Probleme bei der Rückgabe zu geben. Viele sagen, es kommen "null" Objekte/Daten zurück. Dies scheint aber nicht bei den Standardtypen zu sein wie String oder int. Lies dir am besten den Thread komplett durch, dort werden auch ein paar workarounds vorgeschlagen, vielleicht funktioniert ja einer.
und nicht vergessen "using ..." einzufügen ;)
AW: WSDL-Webservice in Windows Phone App
Danke für die Antwort.
In dem oben genannten Thread scheint es aber um ein anderes Problem zu gehen. Ist aber mein Fehler da meine Angaben nicht vollständig waren.
Ich habe gerade das ganze noch einmal versucht und mir ist die folgende Warnung aufgefallen:
Warnung für benutzerdefiniertes Tool: Contract is not compatible with Silverlight 3 because it contains one or more operations with SOAP Encoding (use='encoded'). Only the non-encoded operations will be generated.
Gibt es für mich als Benutzer des Dienstes eine Möglichkeit diesen Webservice dennoch zu verwenden?
AW: WSDL-Webservice in Windows Phone App
Das Problem ist, dass Microsoft in Silverlight die Verwendung von SOAP-WebServices nicht unterstützt (das sind die, die das .Net Framework bis Version 3.0 standardmässig generiert hat mit ASP.Net). Mit Silverlight gehen meines Wissens nur noch REST-Services. Du kannst jedoch das WebService einfach selbst mittels HTTP aufrufen und das XML selbst parsen - das geht immer.
AW: WSDL-Webservice in Windows Phone App
Ich habe mal ein wenig recherchiert.
Mit dem Soap Message Generator http://soapclient.com/soapmsg.html habe ich mir eine SoapMessage erstellt die wie folgt aussieht:
HTML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typens="urn:WebService_Customer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<SOAP-ENV:Body>
<mns:GetSessionID xmlns:mns="urn:WebService_Customer" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<UserID xsi:type="xsd:integer">0000000</UserID>
<UserCallname xsi:type="xsd:string">Name1</UserCallname>
<UserName xsi:type="xsd:string">Name2</UserName>
<PasswordHash xsi:type="xsd:string">PasswordHash</PasswordHash>
</mns:GetSessionID>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Diese Message schicke ich nun mit der folgenden Methode an den Server:
Code:
Public Function SoapRequest(ByVal webserviceURL As String, ByVal soapMessage As String) As Xml.XmlDocument
Dim res As New Xml.XmlDocument()
Using webClient As New Net.WebClient()
webClient.Headers.Add("Content-Type", "application/soap+xml; charset=utf-8")
res.LoadXml(webClient.UploadString(webserviceURL, soapMessage))
End Using
Return res
End Function
Ich bekomme auch eine Antwort aber die Antwort besteht aus der Definition des Webservices also genau das glaeich wenn ich die URL der WSDL-Datei einfach in den Browser packe und Enter drücke.
AW: WSDL-Webservice in Windows Phone App
Wies sieht denn da deine webserviceURL aus? Wenn du da an die URL mit dem *.wsdl schickst, dann kriegst du bei einem Get trotzdem die WSDL zurück.
AW: WSDL-Webservice in Windows Phone App
Die URL lautet: http://www.dvd-datenbank.com/webserv..._Customer.wsdl
Und als Antwort bekomme ich die gleiche XML-Struktur wie wenn ich die URL alleine im Browser ansteuere.
AW: WSDL-Webservice in Windows Phone App
Ich habe mir jetzt mal "soapUI" heruntergeladen und es damit versucht. Es klappte auf anhieb also habe ich mir die Soap Messages von dort kopiert aber wenn ich die aus meinem Programm absende dann bekomme ich immer noch die gleiche Antwort wie bisher auch.
HTML-Code:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:WebService_Customer">
<soapenv:Header/>
<soapenv:Body>
<urn:GetSessionID soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<UserID xsi:type="xsd:integer">?</UserID>
<UserCallname xsi:type="xsd:string">?</UserCallname>
<UserName xsi:type="xsd:string">?</UserName>
<PasswordHash xsi:type="xsd:string">?</PasswordHash>
</urn:GetSessionID>
</soapenv:Body>
</soapenv:Envelope>
Ist die Funktion "SoapRequest" die etwas weiter oben schon steht falsch? Was kann man da verändern um doch noch das richtige Ergebnis zu bekommen?
AW: WSDL-Webservice in Windows Phone App
Habe das Problem nun endlich beheben können.
Die SOAP Nachrichten sind korrekt. Ich musste die "SoapRequest" Methode anpassen.
Für den der auch über solche Probleme stolpern sollte hinterlasse ich hier mal meine jetzt funktionierende Methoden:
Code:
Private Sub SoapRequest(ByVal url As String, ByVal soapMessage As String, ByVal encoding As Text.Encoding)
If (Microsoft.Phone.Net.NetworkInformation.DeviceNetworkInformation.IsNetworkAvailable) Then
Try
Dim webClient As New Net.WebClient()
webClient.Headers(HttpRequestHeader.ContentType) = "text/xml"
webClient.Encoding = encoding
AddHandler webClient.UploadStringCompleted, AddressOf WebClient_UploadStringCompleted
webClient.UploadStringAsync(New System.Uri(url, UriKind.Absolute), "POST", soapMessage)
Catch ex As Exception
End Try
End If
End Sub
Private Sub WebClient_UploadStringCompleted(sender As Object, e As System.Net.UploadStringCompletedEventArgs)
Dim xdoc As Xml.Linq.XDocument = Xml.Linq.XDocument.Parse(e.Result)
'Weiter verarbeitung
End Sub