App funktioniert im Release-Stand nicht richtig
Hallo,
ich verwende im Programm einen WebClient mit dessen Hilfe ich einen Webservice abfrage.
Jetzt habe ich das Problem dass sobald ich einen Relese Stand auf das Smartphone bringe dieser nicht mehr funktioniert.
Ich komme ohne Probleme zu der Suche hin, gebe dort was ein und drücke dann auch Suchen. Die Suche endet aber nie, das gleiche funktioniert aber mit der Debug-Version einwandfrei.
Was mache ich falsch? Hat jemand eine Idee?
MfG Johann Löwen
AW: App funktioniert im Release-Stand nicht richtig
Nein, habe ich nirgends verwendet.
---------- Hinzugefügt um 16:09 ---------- Vorheriger Beitrag war um 15:32 ----------
Ich habe mich mit hilfe von MessageBoxen an das Problem herangetatet. Es ist auf jeden Fall nicht der WebClient.
In der Methode "Private Sub WebClient_UploadStringCompleted(sender As Object, e As System.Net.UploadStringCompletedEventArgs)"
befindet sich folgender Code:
Code:
Dim mediaItems As New Collections.ObjectModel.ObservableCollection(Of MediaItem)()
Dim mediaItemElements As IEnumerable(Of Xml.Linq.XElement) = xdoc.Root.Element(xns + "Body").Element(xns1 + "GetXMLStructureResponse").Element("GetXMLStructureReturn").Descendants("item")
Dim mediaItem = From item In mediaItemElements _
Select New MediaItem() With _
{ _
.Altersfreigabe = item.Element("Altersfreigabe").Value, _
.AmazonID = item.Element("AmazonID").Value, _
.Ausstattung = item.Element("Ausstattung").Value, _
.Auszeichnungen = item.Element("Auszeichnungen").Value, _
.Bemerkung = item.Element("Bemerkung").Value, _
.Beschreibung = item.Element("Beschreibung").Value, _
.Bild3D = item.Element("Bild3D").Value, _
.BildAbtastung = item.Element("BildAbtastung").Value, _
.BildFarbe = item.Element("BildFarbe").Value, _
.BildFormat = item.Element("BildFormat").Value, _
.BildNorm = item.Element("BildNorm").Value, _
.CoverHaupt = item.Element("CoverHaupt").Value, _
.CoverSonstige = item.Element("CoverSonstige").Value, _
.CoverVorab = item.Element("CoverVorab").Value, _
.Cut = item.Element("Cut").Value, _
.Darsteller = item.Element("Darsteller").Value, _
.Drehbuch = item.Element("Drehbuch").Value, _
.DVDDB_ID = item.Element("DVDDB_ID").Value, _
.EAN = item.Element("EAN").Value, _
.Genre = item.Element("Genre").Value, _
.HiddenFeatures = item.Element("HiddenFeatures").Value, _
.ImdbID = item.Element("ImdbID").Value, _
.Indiziert = item.Element("Indiziert").Value, _
.Kamera = item.Element("Kamera").Value, _
.KinoReleaseDatum = item.Element("KinoReleaseDatum").Value, _
.Label = item.Element("Label").Value, _
.Laufzeit = item.Element("Laufzeit").Value, _
.Medium = item.Element("Medium").Value, _
.MediumBox = item.Element("MediumBox").Value, _
.MediumReleaseDatum = item.Element("MediumReleaseDatum").Value, _
.MediumReleaseLand = item.Element("MediumReleaseLand").Value, _
.MediumType = item.Element("MediumType").Value, _
.Musik = item.Element("Musik").Value, _
.ProdJahr = item.Element("ProdJahr").Value, _
.ProdLand = item.Element("ProdLand").Value, _
.Produzent = item.Element("Produzent").Value, _
.RCode = item.Element("RCode").Value, _
.Regie = item.Element("Regie").Value, _
.Schnitt = item.Element("Schnitt").Value, _
.Szenenfotos = item.Element("Szenenfotos").Value, _
.Titel = item.Element("Titel").Value, _
.TitelDeutsch = item.Element("TitelDeutsch").Value, _
.TitelOriginal = item.Element("TitelOriginal").Value, _
.TitelZusatz = item.Element("TitelZusatz").Value, _
.TonFormat = item.Element("TonFormat").Value, _
.Trailer = item.Element("Trailer").Value, _
.Untertitel = item.Element("Untertitel").Value, _
.UntertitelHG = item.Element("UntertitelHG").Value, _
.Verleihversion = item.Element("Verleihversion").Value}
MessageBox.Show("1")
Try
For Each mi As MediaItem In mediaItem
MessageBox.Show("2")
mediaItems.Add(mi)
Next
Catch ex As Exception
MessageBox.Show("3")
End Try
MessageBox.Show("4")
RaiseEvent SearchCompleted(Me, New DVDDBEventArgs(True, mediaItems))
Die MessageBox "1" wird noch ausgegeben alle weiteren nicht. Ich habe auch versucht das "Count" von "mediaItem" auszulesen aber das funktioniert auch nicht mehr.
AW: App funktioniert im Release-Stand nicht richtig
So, habe ein paar neue Erkentnisse aber auch wieder ein ppar Fragen. Zuerst war ich sehr verwundert das ich im Release-Mode auch Debuggen kann. Dies hat mir aber sehr weiter geholfen wobei aber sachen aufgetreten sind die ich nicht verstehe.
Das Einfrieren findet in dieser Zeile statt:
Code:
.CoverHaupt = item.Element("CoverHaupt").Value, _
Bei der Zuweisung der Property werden noch ein paar sachen durchgeführt:
Code:
Private _CoverHaupt As String = String.Empty
Public Property CoverHaupt As String
Get
Return _CoverHaupt
End Get
Set(ByVal value As String)
If Not String.IsNullOrEmpty(value) Then
_CoverHaupt = CleanValue(value)
If Not String.IsNullOrEmpty(_CoverHaupt) Then
If Not App.Cache.FileExists("cover_" & _CoverHaupt & ".jpg") Then
App.Cache.DownloadFile("http://www.domain.de?idc=" & _CoverHaupt & "&size=135", "cover_" & _CoverHaupt & ".jpg", AddressOf DownloadCompleted)
Else
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CoverHauptImage"))
End If
End If
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CoverHaupt"))
End If
End Set
End Property
Und hier noch die Funktionen die oben erwähnt werden:
Code:
Private Sub DownloadCompleted(ByVal e As Cache.DownloadCompletedEventArgs)
If Not e.Success Then
_UseCoverHauptImageUri = True
End If
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CoverHauptImage"))
End Sub
Public Function FileExists(ByVal fileName As String) As Boolean
Dim res As Boolean = False
If Not fileName.StartsWith(CACHEDIR) Then
fileName = IO.Path.Combine(CACHEDIR, fileName)
End If
Try
Using isoStore As IO.IsolatedStorage.IsolatedStorageFile = IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication()
If isoStore.FileExists(fileName) Then
res = True
End If
End Using
Catch ex As Exception
End Try
Return res
End Function
Public Sub DownloadFile(ByVal uri As String, ByVal fileName As String, methode As Action(Of DownloadCompletedEventArgs))
If Not fileName.StartsWith(CACHEDIR) Then
fileName = IO.Path.Combine(CACHEDIR, fileName)
End If
If (Microsoft.Phone.Net.NetworkInformation.DeviceNetworkInformation.IsNetworkAvailable) Then
Using isoStore As IO.IsolatedStorage.IsolatedStorageFile = IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication()
If isoStore.AvailableFreeSpace > 1048576 Then
Dim webClient = New WebClient()
webClient.OpenReadAsync(New Uri(uri), New DowloadHelper(fileName, methode))
AddHandler webClient.OpenReadCompleted, AddressOf WebClient_OpenReadCompleted
End If
End Using
End If
End Sub
Private Sub WebClient_OpenReadCompleted(ByVal sender As Object, ByVal e As OpenReadCompletedEventArgs)
If e.Error Is Nothing Then
Dim fileName As String = DirectCast(e.UserState, DowloadHelper).FileName
Dim str As IO.Stream = e.Result
Try
Using isoStore As IO.IsolatedStorage.IsolatedStorageFile = IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication()
DeleteFile(fileName)
Dim buffer As Byte() = New Byte(1023) {}
Using isoStorStr As IO.IsolatedStorage.IsolatedStorageFileStream = isoStore.OpenFile(fileName, IO.FileMode.CreateNew)
Dim bytesRead As Int32 = str.Read(buffer, 0, 1024)
While (bytesRead > 0)
isoStorStr.Write(buffer, 0, bytesRead)
bytesRead = str.Read(buffer, 0, 1024)
End While
isoStorStr.Flush()
End Using
End Using
Catch ex As Exception
End Try
End If
Try
If DirectCast(e.UserState, DowloadHelper).Methode IsNot Nothing Then
Dim fileName As String = DirectCast(e.UserState, DowloadHelper).FileName
DirectCast(e.UserState, DowloadHelper).Methode(New DownloadCompletedEventArgs(e.Error Is Nothing, fileName))
End If
Catch ex As Exception
End Try
End Sub
Wenn ich debugge komme ich bis zu dieser Zeile:
Code:
If Not App.Cache.FileExists("cover_" & _CoverHaupt & ".jpg") Then
Ich habe auch versucht direkt in die Funktion ein Haltepunkt zu setzen aber dieser wird nie erreicht.
Sobald er versucht die Zeile abzuarbeiten, wird das Visual Studio ausgelastet. Nach einer Zeit, etwa 30-45 Sekunden bekomme ich eine OutOfMemoryException.
Warum denn das da wird doch nix besonderes gemacht, oder?
Und warum dies nur im Release und nicht im Debug-Modus?
AW: App funktioniert im Release-Stand nicht richtig
So es funktioniert nun.
ich habe zwar nicht wirklich verstanden was da genau falsch war aber ich habe es nun so umgeschrieben das es funktioniert.
MfG Johann Löwen
AW: App funktioniert im Release-Stand nicht richtig
Könnte schlicht und ergreifend ein Compiler-Fehler sein. Hatten so ein Problem mal mit .Net 1.1 und einem Switch-Statement - da hat die Optimierung irgendwie zu einem Fehler geführt (und damit taucht das im Debug-Code dann auch nicht auf, weil dort einiges an Optimierungen nicht passiert).
AW: App funktioniert im Release-Stand nicht richtig
Ist natürlich möglich. Das lehr einen nicht immer allen im Debug-Modus zu machen.
AW: App funktioniert im Release-Stand nicht richtig
Na ja, solche Probleme sind letzten Endes selten (sonst wären sie bei Microsofts Tests aufgefallen). Da muss oft einiges zusammenkommen. Aber natürlich schadet es nicht das ganze nochmal im Release zu testen bevor man es in den Market lädt.
AW: App funktioniert im Release-Stand nicht richtig
Habe es zum Glück nur als Beta hochgeladen.