Laden...

Portable WebDAV Library

Erstellt von DecaTec vor 9 Jahren Letzter Beitrag vor 5 Jahren 14.646 Views
DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 9 Jahren
Portable WebDAV Library

Hallo!

Vor kurzem habe ich damit begonnen, mich mit der Programmierung von Apps für Windows Phone zu beschäftigen. Ich habe einige Ideen, die einen Up-/Download zu meiner "persönlichen Cloud" (ownCloud) benötigen. Das Mittel der Wahl ist hier WebDAV zur Übertragung von Dateien.
Nach kurzer Suche habe ich festgestellt, dass es bereits mehrere WebDAV Libraries gibt, jedoch haben alle einen Nachteil:*Entweder sind diese nicht voll kompatibel zur WebDAV-Spezifikation (RFC 4918). Besonders den Locking-Mechanismus vermisse ich bei vielen Libraries. *Oder sie sind nicht geeignet für die Entwicklung auf Mobil-Geräten, weil sie nicht als Portable Class Library implementiert sind.

Somit habe ich kurzerhand ein eigenes Projekt gestartet: Portable WebDAV Library

Und da ich denke, dass andere evtl. auch auf der Suche nach einer einfach zu bedienenden WebDAV library sein könnten, habe ich das Projekt nun als Open Source auf CodePlex veröffentlicht.

Anfoderungen*Kompatibilität: Volle Kompatibilität zu RFC 4918 (HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)). *Portabilität: Einsatz sowohl in Desktop- als auch mobilen Environments *Einfache Bedienung/Einbindung in eigene Projekte: Die Portable WebDAV Library bietet zwei Abstraktions-Level: Zum einen die Klasse WebDavSession, die für viele Belange ausreichen sollte und die direkte Kommunikation mit WebDAV Servern seht vereinfacht.
Wer dagegen mit der WebDAV-Spezifikation vertraut ist und einen direkten Zugriff auch WebDAV-Resourcen benötigt, der kann die Klasse WebDavClient verwenden. Diese ist abgeleitet von der Klasse System.Net.Http.HttpClient und erweitert diese um spezielle WebDAV-Methoden. *Fast and fluid: Alle Operationen, die u.U. länger dauern, sind als asynchrone Methoden implementiert. Besonders wichtig beim Einsatz auf Mobilgeräten. *WebDAV Object Model: Die Kommunikation läuft bei WebDAV hauptsächlich über XML-Strings ab, die in den Requests/Responses gesendet werden. Da es mühselig ist, diese Strings selbst zu erzeugen und dann wieder zu Parsen, bietet die Portable WebDAV Library das sog. WebDAV Object Model: Über WebDAV-spezifische Objekte ist es möglich, die Kommunikation mit WebDAV Servern erheblich zu vereinfachen. *Dokumentation: Last but not least sollte das Projekt gut dokumentiert sein, um die Verwendung möglichst einfach zu gestalten.

Zwei Versionen der Bibliothek
Anfänglich war die Bibliothek in einer einzelnen Portable Class Library implementiert, die alle Zielplattformen unterstütze.
Allerdings gab es bei der Verwendung in Apps der Universal Windows Platform (UWP) Probleme. So gab es keine Möglichkeit, auf WebDAV-Server zuzugreifen, die mit einem untrusted SSL-Zertifikat (z.B. self-signed Zertifikat) laufen.
Daher gibt es ab v0.3.0.0 der Portable WebDAV Library zwei Ausprägungen:*DecaTec.WebDav.NetFx: Für Projekte, die auf dem .NET Framework (ab Version 4.5), Windows 8, Windows Phone 8 oder ASP.NET Core basieren. ***DecaTec.WebDav.Uwp:**Für Projekte, die auf Windows 8.1, Windows Phone 8.1 oder Apps der Universal Windows Platform (UWP) basieren.

Der Unterschied zwischen den beiden Versionen besteht hauptsächlich darin, dass unterschiedliche APIs zum Zugriff auf Web-Ressourcen genutzt werden.

Die Trennung in zwei unterschiedliche Versionen war dabei die einfachste Möglichkeit, die Probleme mit UWP-Apps zu umschiffen und trotzdem eine maximale Kompatibilität zu allen Target-Plattformen zu garantieren.

Beispiel-Code ist in der (Online-)Dokumentation zu finden. Hier habe ich mir Mühe gegeben, eine möglichst vollständige Entwickler-Dokumentation zu verfassen, damit die Verwendung der Portable WebDAV Library so einfach wie möglich ist.

Links *Project home (GitHub) *Dokumentation *Dokumentation (CHM)

Fehler und Ungereimtheiten sind natürlich nicht ausgeschlossen. Für entsprechende Hinweise oder Verbesserungsvorschläge bin ich daher dankbar.

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 9 Jahren

Portable WebDAV Library Version 0.1.1.0

Habe gestern ein Update der Library über CodePlex veröffentlicht.
**Änderungen:***Fehler beim URL-Handling der WebDavSession behoben. *Wenn bei der Verwendung der WebDavSession (v.a. bei der Methode ListAsync) etwas schief geht, kommt nun eine aussagekräftigere Exception. Damit sollte ein evtl. auftretender Fehler besser diagnostizierbar sein. *Wenn bei der Verwerdung der WebDavSession ein Fehler beim Parsen eines Responses auftritt, wird diese Exception auch an der entsprechenden Stelle mit einer aussagekräftigen Meldung geworfen. *Die Dokumentation wurde gerade bzgl. async/await verbessert.

Die neue Version kann wie immer über GitHub heruntergeladen werden.

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 8 Jahren

Das Projekt wird ab sofort auf GitHub gehostet:
Portable WebDAV Library auf GitHub.

Auf CodePlex habe ich das Projekt nicht gelöscht, sondern nur einen Hinweis auf den Umzug hinzugefügt. Allerdings wird das Projekt auf CodePlex nicht mehr gewartet.

Falls es bei der Verwendung der Bibliothek zu Problemen kommen sollte, bitte in Zukunkt den Bug-Tracker von GitHub verwenden.

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

M
177 Beiträge seit 2009
vor 8 Jahren

Wow, cooles Projekt! Werde ich mir definitiv genauer ansehen.

*bookmark*

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 7 Jahren

Nach einer sehr kurzlebigen Version v0.2.0.0 habe ich gleich v0.3.0.0 nachgeschoben:

**Änderungen:***Die Bibliothek ist nun zwecks Kompatibilität zu allen Target-Plattformen in zwei unterschiedliche Versionen verfügbar:
DecaTec.WebDav.NetFx: Zur Verwendung mit .NET Framework (4.5 oder neuer), Windows 8, Windows Phone 8 oder ASP.NET Core.
DecaTec.WebDav.Uwp: Zur Verwendung mit Windows 8.1, Windows Phone 8.1 und v.a. Apps der Universal Windows Platform, (UWP). *Kleinere Fehlerbehebungen *Verbesserte Dokumentation

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

S
406 Beiträge seit 2007
vor 7 Jahren

Hi,

coole sache ein NuGet Packet Link wäre hier noch sehr cool der die fertigen DLLs direkt enthält, macht es einfacher das ganze mal schnell einzubinden.

bzw. funktioniert wurderbar mit OwnCloud!

MFG
SquadWuschel

Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 7 Jahren

coole sache ein NuGet Packet Link wäre hier noch sehr cool der die fertigen DLLs direkt enthält, macht es einfacher das ganze mal schnell einzubinden.

Ja, würde das Einbinden auf jeden Fall einfacher machen.
Ist definitiv in Planung...

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 7 Jahren

Version 0.4.0.0 verfügbar:

Diesmal keine großen Änderungen. Dieser Release ist v.a. für die Einführung eines NuGet Paketes. Damit muss man sich keine Gedanken mehr machen, welche Version der Library verwendet werden soll (NetFx/Uwp). Mit dem Hinzufügen über NuGet wird automatisch die korrekte Version im Projekt referenziert.

**Änderungen:***Neue Überladungen für Methoden, die kein LockToken mehr benötigen *NuGet Paket verfügbar: https://www.nuget.org/packages/PortableWebDavLibrary/

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 7 Jahren

Puh, schon lange keine Updates mehr gepostet, es hat sich allerdings einiges getan:

Version 0.7.0.0 verfügbar:

Die Portable WebDAV Library ist nun eine .NETStandard 1.1 Library.
Als "Weiterentwicklung" des Konzepts der Portable Class Libraries ist .NETSTandard/.NET Core zunächst einmal plattformunabhängig. D.h. die Library kann nun prinzipiell neben Windows Devices auch auf Liniux/MacOS zum Einsatz kommen.

Ein großer Vorteil an der neuen Version ist, dass die Library nicht mehr zweigeteilt ist (NetFx/UWP) - eine Assembly für alles!
Damit dies möglich ist, waren ein paar Änderungen notwendig:
*Für bisherige Verwender des NetFx-Parts ändert sich fast nichts, da die .NETStandard-Version auf System.Net.Http.HttpClient basiert (wie zuvor auch die NetFx-Version). *Upload/Download mit Fortschritt ist nun direkt in der Portable WebDAV Library implementiert, d.h. kann nun auch in .NET Framework-Projekten (ohne Umwege wie bisher) verwendet werden. Dazu gibt es neue Methoden der Klassen WebDavSession und WebDavClient. Dazu habe ich hier habe ich auf GitHub ein kurzes HowTo veröffentlicht. *Etwas umstellen müssen sich die Verwender des (ehemaligen) UWP-Parts der Library: Weil im Untergrund nun System.Net.Http.HttpClient verwendet wird, hat sich die Schnittstelle nun geringfügig geändert. Allerdings sollten sich die dafür notwendigen Änderungen in Grenzen halten.

Hier nochmal das komplette Changelog (diesmal auf Englisch):*The library now targets .NETStandard 1.1 (.NET Core) and can be used on any platform supporting .NETStandard 1.1. *Due to .NETStandard support, the library is not separated into two parts (UWP/NetFx) anymore. One library for all the target platforms. *Breaking change: The whole library is now based on System.Net.Http.HttpClient. Therefore, there are some changes in the API (e.g. method signatures). *Upload/download with progress is generally supported, even on projects targeting .NET Framework (formerly the NetFx part of the library). *The xml:lang attribute is now supported for prop elements.

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Download:
Direkt über die Projektseite, oder über NuGet.

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Links *Project home (GitHub) *Dokumentation (online) *Dokumentation (offline, CHM)

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 6 Jahren

Version 0.8.0.0 verfügbar:

Seit der letzten Version hat sich wieder einiges getan. Ich habe endlich eine Lösung gefunden, um vernünftige Unit Test schreiben zu können. Das bisherige Problem war, dass es lediglich Unit Integration Tests hab, die gegen einen konkreten WebDAV-Server gefahren wurden. Da nicht jeder WebDAV-Server die gleichen Features unterstützt, war es hier immer etwas schwierig, die "richtigen" Tests laufen zu lassen.
Ich verwende intern (nur für die Unit Tests) nun die Library mockhttp. Das ganze ist zwar etwas umständlich zu bedienen, das liegt allerdings an den bescheidenen Mocking-Fähigkeiten der Klasse HttpClient (kein Interface).
Vielleicht ist das ja mal für jemanden interessant. 😁

**Changelog:***When using WebDavClient.DownloadFileWithProgressAsync, the passed Stream does not get disposed automatically. Disposing of this Stream is up to the client calling this method. *Strongly typed versions of Lock-Token formats as defined in WebDAV specification. *When using the Portable WebDAV Library on Xamarin, there was a problem when relative URLs (strings) where used (e.g. webDavSession.ListAsync(@"/folder")). *When using WebDavSession, a base URL (string) can now be specified. *The 'Translate' header is always set to 'f' for IIS WebDAV serving unmapped file types (see https://msdn.microsoft.com/en-us/library/cc250063.aspx). *Bugfix: When using WebDavSession with BaseUri and calling methods passing only the relative Uri/URL to a file, these operations always failed. *Bugfix: When using WebDavSession.UploadFileWithProgressAsync with a URL, there was a stack overflow exception because the method called itself instead of the correct overload.

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Download:
Direkt über die Projektseite, oder über NuGet.

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Links *Project home (GitHub) *Dokumentation (online) *Dokumentation (offline, CHM)

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 6 Jahren

Version 0.9.0.0 verfügbar:

Wir kommen v1.0 langsam näher. 😉

**Changelog:***The library now implements RFC 4918, RFC 4331, Additional WebDAV Collection Properties and a some WebDAV properties specific to IIS WebDAV. *New properties available for WebDavSessionListItem: Keep in mind that not every WebDAV server supports the same properties. Often a server only supports a subset of the specifications or even adds additional properties. So, when a property of a WebDavSessionListItem is null, the WebDAV server may not support these properties.

  • Some properties of WebDavSessionListItem are strongly-typed now (DateTime and numeric values).
  • WebDavSession now exposes some protected members, so that the class can be overridden for special purposes (e.g. when new types should be added to the WebDAV object model in a project).

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Download:
Direkt über die Projektseite, oder über NuGet.

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Links *Project home (GitHub) *Dokumentation (online) *Dokumentation (offline, CHM)

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 6 Jahren

Version 1.0.0.0 verfügbar:

So, nachdem noch eine wichtige Änderung eingeflossen ist (Zugriff auf Properties, die der Library zunächst einmal unbekannt sind), konnte nun v1.0.0.0 veröffentlicht werden. Daneben gibt es aber noch weitere Neuerungen:

**Changelog:***Extension of the Portable WebDAV Library's WebDAV object model: Properties which are not defined in RFC 4918, RFC 4331, Additional WebDAV Collection Properties or IIS WebDAV specification can now also be accessed through the library's WebDAV object model. These unknown properties are exposed as XML (when using WebDavClient) or are handled by the class AdditionalProperties (when using WebDavSession/WebDavSessionItem). See the documentation for instructions on how to use unknown WebDAV properties with the library. *Renamed WebDavSesionListItem to WebDavSessionItem. *WebDavSession now supports Proppatch operations with the methods UpdateItemAsync and UpdateItemsAsync: Use the ListAsync methods to retrieve WebDavSessionItems, then change the properties of these items. Finally you can use the methods UpdateItemAsync/UpdateUtemsAsync of WebDavSession passing the changed WebDavSessionItems in oder to update the item's properties on the server (Proppatch). Note that not all WebDAV servers support Proppatch for all properties. So maybe you will not be able to change properties of a WebDAV element with these methods. *The methods of WebDavSession (e.g. copy, mode, delete, etc.) can now be used by specifying a WebDavSessionItem.

  • New methods for WebDavSession (GetSupportedPropertyNamesAsync) to retrieve a list of WebDAV properties supported by a WebDAV item.

*The library now contains a DebugHttpMessageHandler: This handler can be used for WebDavClient and WebDavSesion in order to get the request/response (and their content) printed on the debug console. Note that this message handler should not be used in a productive environment. *The constructors expecting credentials now use the interface ICredentials for credentials. *Bugfix: UriHelper.CombineUri sometimes threw exception when both URIs were the same.

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Download:
Direkt über die Projektseite, oder über NuGet.

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Links *Project home (GitHub) *Dokumentation (online) *Dokumentation (offline, CHM)

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 6 Jahren

Version 1.0.1.0 verfügbar:

Diesmal nur ein kleines Update, welches die Verwendung unter Xamarin betrifft.
Bei Xamarin verhalten sich einige Eigenschaften der Klasse Uri nicht wie unter Windows. Daher war hier eine kleine Anpassung notwendig.

**Changelog:***Bugfix [Xamarin]: WebDavSession.ListAsync returned wrong URLs when used with folders containing spaces. *Bugfix [Xamarin]: WebDavSession.ListAsync returned the containing folder when used with folders containing spaces.

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Download:
Direkt über die Projektseite, oder über NuGet.

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Links *Project home (GitHub) *Dokumentation (online) *Dokumentation (offline, CHM)

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

C
1 Beiträge seit 2018
vor 6 Jahren
WebDav Login

Hey,

super Library. Die ist wirklich nützlich.

Ist es irgendwie möglich eine Exception auszuwerfen, wenn man für die WebDavSession die falschen Credentials eingibt?

Viele Grüße

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 6 Jahren

Hi,

ich vermute mal, du meinst, dass direkt eine Exception geworfen werden soll, wenn eine WebDavSession mit User Credentials angelegt wird. Das ist so erst einmal nicht möglich, da beim anlegen einer WebDavSession keine HTTP-Request ausgeführt wird.

Erst wenn ein tatsächlicher Request ausgeführt wird (z.B. ListAsync), dann kommen die Credentials "zum Einsatz" (diese werden immer mit jedem HTTP-Request übermittelt).

In diesem Fall bekommst du auch eine WebDavException, mit den genauen Infos, was schief gelaufen ist (also HTTP 401):> Fehlermeldung:

Error while executing ListAsync (wrong response status code). Expected status code: 207 (MultiStatus); actual status code: 401 (Unauthorized)

Um das manuell abzufangen, könntest du direkt nach dem Instantiieren der WebDavSession ein 'ExistsAsync' (z.B. auf die Base-URI) aufrufen. Wenn das dann auf Grund von falschen Credentials schief geht, könnte man im Client-Programm eine Fehlermeldung o.ä. bringen.

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

DecaTec Themenstarter:in
210 Beiträge seit 2005
vor 5 Jahren

Version 1.1.8.0 verfügbar:

Nach langer Zeit mal wieder ein kleines Update.

**Changelog:***HTTP/2 is used by default now. *Updated dependencies.

Projekt-Homepage:
Portable WebDAV Library auf GitHub

Download:
Direkt über die Projektseite, oder über NuGet.

Bin für Feedback, Verbesserungsvorschläge, o.ä. immer dankbar...

Links *Project home (GitHub) *Dokumentation (online) *Dokumentation (offline, CHM)

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows