noobvb.net Geschrieben 8. Juli 2009 Geschrieben 8. Juli 2009 Hi Leute, hab mal wieder eine Frage. Ich möchte via https eine XML-Datei und ein Zip-Archiv versenden. hat jemand von euch vielleicht einen Tip, wie sich das umsetzen lässt? Die bisherigen Beispiele die ich gefunden habe, waren recht wenig hilfreich. Hoffe, ihr könnt mir auch diesmal helfen. Beste Grüße noob Zitieren
noobvb.net Geschrieben 9. Juli 2009 Autor Geschrieben 9. Juli 2009 Hi Leute, hab mittlererweile eine Lösung für das Problem gefunden. Habe damit aber immernoch ein paar Probleme, vielleicht kann mir ja jemand sagen, woran es liegen könnte. Der Code sieht folgendermaßen aus:Public Function UploadFile(ByVal filePath As String, _ ByVal address As String, _ ByRef pb As System.Windows.Forms.ToolStripProgressBar) _ As Boolean 'Get the length of the selected file Dim fi As IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath) Dim fileLength = fi.Length 'Create the request Dim request As HttpWebRequest = _ DirectCast(HttpWebRequest.Create(address), HttpWebRequest) 'Configure request request.Credentials = New System.Net.NetworkCredential("BENUTZER", "PWD") request.Method = "POST" 'WebRequestMethods.Http.Post request.ContentLength = fileLength.ToString() 'request.UserAgent = "http 1.1" ' request.ContentType = "http 1.1" 'This is required for our WebDav server (will error without it) 'request.SendChunked = True 'request.Headers.Add("Translate: f") 'request.AllowWriteStreamBuffering = True Dim s As IO.Stream = request.GetRequestStream() Dim fs As New IO.FileStream(filePath, IO.FileMode.Open, IO.FileAccess.Read) 'Größe des Files in KB pb.Maximum = CInt(fileLength \ 1024) pb.Minimum = 0 pb.Value = 0 pb.Visible = True Dim bytes(1023) As Byte '1024 bytes Dim bytesRead As Integer = 0 Dim totalBytesRead As Long = 0 Do bytesRead = fs.Read(bytes, 0, bytes.Length) If bytesRead > 0 Then totalBytesRead += bytesRead 'Write to stream s.Write(bytes, 0, bytesRead) 'Update progress pb.Value = CInt(totalBytesRead \ 1024) End If Loop While bytesRead > 0 s.Close() s.Dispose() s = Nothing fs.Close() fs.Dispose() fs = Nothing Try Dim response As HttpWebResponse = _ DirectCast(request.GetResponse(), HttpWebResponse) MsgBox(response.ProtocolVersion) 'Check the ContentLength of the Response Dim code As HttpStatusCode = response.StatusCode response.Close() response = Nothing pb.Visible = False 'Return Success Return (code = HttpStatusCode.OK) Catch ex As WebException 'MsgBox(ex.Response.ResponseUri.AbsoluteUri) MsgBox(ex.Message) Catch e As Exception MsgBox(e.Message) End Try End Function Möchte ich nun die Datei versenden, bekomme ich immer den Fehler: "Der Remoteserver hat einen Fehler zurückgegeben: (405) Unzulässige Methode". Hat jemand eine Ahnung, ob das Problem im Code steckt oder in der Administration des WebServers? Ich habe zwar die Vermutung, dass es am Server liegt, habe aber keinen Einfluss auf dessen Administration. Wäre super, wenn mir jemand dabei weiterhelfen könnte. Beste Grüße noob Zitieren
Amstelchen Geschrieben 10. Juli 2009 Geschrieben 10. Juli 2009 sende doch mal testweise ein HTTP POST an den server (z.b. mittels firefox), dann siehst du ja, ob der server die methode unterstützt. wenn nicht, wird das eben administrativ deaktiviert sein oder der server kann nur HTTP GET. s'Amstel Zitieren
noobvb.net Geschrieben 13. Juli 2009 Autor Geschrieben 13. Juli 2009 Hi Amstelchen, vielen Dank für deine Antwort. Kannst du mir bitte sagen, wie ich einen Post request via Browser ausführen muss? Steh grad irgendwie auf dem Schlauch. Habe mir auch schon gedacht, dass es vielleicht an der falschen Methode liegen könnte. Mit Get hat es aber auch nicht funktioniert. Hier erscheint dann anstatt der Fehlermeldung "405 Unzulässige Methode" der Fehler "Inhaltsteil mit dem Verbtyp kann nicht gesendet werden". Mit dieser Fehlermeldung kann ich aber leider genauso wenig anfangen. Weißt du zufällig, was damit gemeint sein könnte? Gruß noob Zitieren
T3D Geschrieben 13. Juli 2009 Geschrieben 13. Juli 2009 "Inhaltsteil mit dem Verbtyp kann nicht gesendet werden". Inhaltsteil mit dem Verbtyp kann nicht gesendet werden - Google-Suche guck dir den ersten eintrag in google an. der hatte genau das selbe Problem und geloest Ted Zitieren
noobvb.net Geschrieben 13. Juli 2009 Autor Geschrieben 13. Juli 2009 Hi Ted, hab mir die Beiträge durchgelesen. Habe die Lösung aber immernoch nicht gefunden. Wenn ich das gezeigte Beispiel verwende (Methode Get), kommt zwar kein Fehler mehr, aber es wird trotzdem kein File geuploadet. Bin mittlererweile wirklich ratlos. Hat niemand ein gutes Beispiel oder Tutorial für mich? Beste Grüße noob Zitieren
Amstelchen Geschrieben 14. Juli 2009 Geschrieben 14. Juli 2009 lade dir z.b. livehttpheaders für firefox herunter (oder verwende telnet) und setze ein POST an den server ab. eventuell ist ja schon da was im argen. s'Amstel Zitieren
noobvb.net Geschrieben 14. Juli 2009 Autor Geschrieben 14. Juli 2009 Hi Amstelchen, danke, das hat für Klarheit gesorgt und auch gleich wieder Fragen aufgeworfen. Diesmal liegt es aber eher an meiner mangelden Kenntnis von telnet. Ich habe den Aufruf auf den Server und den dazugehörigen Ordner gestartet (Server/Ordner). War dies falsch oder richtig? Kenne mich mit telnet leider gar nicht aus. Beste Grüße noob Zitieren
Amstelchen Geschrieben 15. Juli 2009 Geschrieben 15. Juli 2009 darum auch der hinweis, livehttpheaders bevorzugt zu verwenden - wenn du dich mit telnet nicht auskennst. ansonsten: Chapter 1. HTTP dort 1.5. s'Amstel Zitieren
noobvb.net Geschrieben 15. Juli 2009 Autor Geschrieben 15. Juli 2009 Hi Amstelchen, habe herausgefunden wie es mit telnet geht. Dabei habe ich festgestellt, dass Port 23 des Servers zu ist. Kann das die Lösung sein? Oder ist das nur der telnet-Port und nicht die Lösung meines Problems? Kann es durch Einstellungen am Server leider nicht herausfinden, da ich keine Rechte auf dem Server besitze. Gruß noob Zitieren
noobvb.net Geschrieben 15. Juli 2009 Autor Geschrieben 15. Juli 2009 Hi Leute, habe jetzt nun noch ein wenig recherchiert und dabei habe ich auf der msdn Seite ein Anleitung gefunden, nach der ich folgenden Code erstellt habe: Private Sub ExchangeXMLByHttps() Try Dim Path As String Dim Adress As String Dim FileName As String Path = "C:\bin\Debug\testfiles\" FileName = "20090713-125202-RueckmeldungKontakt.xml" Adress = "https://Server/Upload/" Dim myWebClient As New WebClient myWebClient.Credentials = CredentialCache.DefaultCredentials Dim responseArray As Byte() = myWebClient.UploadFile(Adress, "POST", Path & FileName) MsgBox(responseArray.Length) Catch webex As WebException MsgBox(webex.Message) MsgBox(webex.Response) Catch ex As Exception MsgBox(ex.Message) End Try 'Dim content() As Byte 'content = ReadFile(Path & FileName) 'MsgBox(content) 'UploadFile(Adress, "", FileName, content) End Sub Nun habe ich jedoch immernoch die selben Probleme. Bei der Methode POST kommt Fehler 405 Unzulässige Methode und bei Get kommt ebenfalls eine Fehlermeldung. Nun habe ich in einem anderen Forum gelesen, dass man zum Dateiupload auf dem Server ein entsprechendes CGI Programm braucht, dass die Datei entgegennimmt. Stimmt das? Wenn ja, kann mich mal jemand aufklären, wie das Ganze zusammenhängt? Wenn es daran nicht liegt, kann es sein, dass ich für den Upload die falschen Methoden für https verwende? Beste Grüße noob P.S. Würde mich auch sehr über Beispielcode freuen Zitieren
Amstelchen Geschrieben 15. Juli 2009 Geschrieben 15. Juli 2009 habe herausgefunden wie es mit telnet geht. Dabei habe ich festgestellt, dass Port 23 des Servers zu ist. Kann das die Lösung sein? Oder ist das nur der telnet-Port und nicht die Lösung meines Problems? du musst auf port 80 (HTTP), nicht auf den telnet-port 23. s'Amstel Zitieren
noobvb.net Geschrieben 22. Juli 2009 Autor Geschrieben 22. Juli 2009 Hi Leute, habs hinbekommen!!! Der Fehler lag sowohl beim Server als auch daran, wie ich den Code verwendet habe. Bei der Angabe der URI ist unbedingt darauf zu achten, dass das File, das geuploaet werden soll, bereits mit angegeben wird, auch wenn das auf den ersten Blick nicht logisch erscheint, da es sich ja noch nicht auf dem Server befindet. Der Grund hierfür ist der, dass die Methode aber eine Ressource beim WebServer benötigt, auf die sie sich beziehen kann und das geht nur so. Beste Grüße und nochmal vielen Dank euch allen für die Hilfe. noobvb Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.