.NET Framework validieren und reparieren

Saturday, October 16, 2010 5:48:39 PM (Mitteleuropäische Sommerzeit, UTC+02:00)

Ich stand vor kurzen vor einem Problem, welches bei der Installation eines Servicepacks für den SQL Server 2008 aufgetreten ist. Mitten im Installationsvorgang des Servicepacks bekam ich folgende Fehlermeldung:

The program can't start because MSVCR100_CLR0400.dll is missing from your computer. Try reinstalling the program to fix this problem.


Die fehlende DLL MSVCR100_CLR0400.dll ist Bestandteil des Visual Studio 2010. Das Visual Studio 2010 arbeitete aber trotzdem einwandfrei. Der Teil des Dateinamens “CLR 040” lässt auf die Common Language Runtime 4.0 schließen. Der Verdacht lag also nahe, dass das .NET Framework 4.0 nicht sauber installiert bzw. beschädigt war. Um die ordnungsgemäße Installation verschiedener Frameworkversionen zu prüfen, kann das kleine Programm .NET Framework Setup Verification Tool verwendet werden.

DotnetFrameworkVerificationTool

Beim Start des Programms werden alle installierten .NET Frameworkversionen ausgelesen, danach ist es möglich, jede einzelne Frameworkversion zu validieren. In meinem Fall waren alle Versionen des Frameworks in sauber bis auf die Version 4.0. Das kleine Tool erzeugt bei der Validierung eine Logdatei, in der eingesehen werden kann, was genau defekt ist. Um die Installation des .NET Frameworks zu reparieren, kann das Setup des Microsoft .NET Framework 4 (Standalone Installer) verwendet werden.

DotnetFrameworkRepair

Nach dem die Reparatur beendet war, meldete auch das .NET Framework Setup Verification Tool keine Fehler mehr und das Setup des SQL Server Servicepacks lief problemlos durch.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Suchanbieter für eine Webseite erstellen

Sunday, May 03, 2009 7:50:12 PM (Mitteleuropäische Sommerzeit, UTC+02:00)

Von vielen Webseiten kennt man Suchanbieter, die sich in das kleine Suchfenster aller gängigen Browser integrieren lassen. Mit diesen Suchanbietern kann auf der entsprechenden Webseite gesucht werden, auch wenn man sich gerade nicht auf dieser Webseite befindet. Dabei macht der Suchanbieter nichts anderes, als die bereits vorhandene Query-URL der Webseite aufzurufen und das gesuchte Wort an diese URL zu übergeben. Bei den meisten dynamischen Webseiten ist so eine Suchseite schon vorhanden. Hier zum Beispiel die URL für dotnet-snippets.de:

http://dotnet-snippets.de/dns/Default.aspx?query=Mathe

Um die Suchseite und den Browser zusammen zu bringen hat Amazon.com bzw. A9.com die OpenSearch Technik entwickelt. Die Integration dieser Technik in eigene Seiten ist einfach.
Als erstes legt man eine XML Datei mit dem folgenden Inhalt an.

<?xml version="1.0" encoding="UTF-8" ?> 
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>dotnet-snippets.de</ShortName>
<Description>Search .net Codesnippets</Description>
<Image>src="http://www.dotnet-snippets.de/dns/bilder/net.ico"</Image>
<Url type="text/html" template="http://dotnet-nippets.de/dns/default.aspx?query={searchTerms}" />
</OpenSearchDescription>

Diese Datei enthält die folgenden Parameter, die für dotnet-snippets.de gültig sind. Diese sollten für die eigene Webseite angepasst werden. Ich habe die Parameter als Beispiel drin gelassen.

ShortName: Eine kurze Beschreibung, zB. der Name der Webseite
Description: eine Beschreibung, die aussagt was auf der Webseite zu finden ist
Image: eine URL zu einem so genannten FavIcon, ein Icon welches 16x16 Pixel groß sein sollte
(Diese FavIcons kann man sehr komfortabel hier kostenlos erstellen: http://www.favicon-generator.de/)
Url type: Das ist die URL der Suchseite mit dem Platzhalter {searchTerms}. In diesen Platzhalter fügt dann der Suchanbieter den gesuchten Text ein.

Nach dem Hochladen dieser XML Datei auf den Webserver muss die Datei noch verlinkt werden. Den Link platziert man im Head der Webseite:

<link title="dotnet-snippets.de - Suche" type="application/opensearchdescription+xml" rel="search" href="http://dotnet-snippets.de/dns/Tools/dns.xml" />

Der Title und der href muss hier wieder individuell angepasst werden. Verwendet man eine ASP.NET Masterpage, sollte der Link im Head der Masterpage positioniert werden.

Wurde die XML Datei richtig verlinkt, erkennt nun der Browser den Suchanbieter und zeigt dies an:

suchanbieter

Möchte man den Besucher der Webseite auf den Suchanbieter hinweisen, kann man einen Link anbieten, um den Suchanbieter zu installieren:

<a href="javascript:window.external.AddSearchProvider("URL zur XML Datei");" onclick="">Suchprovider installieren</a>

Weiterführende Informationen und optionale Parameter für die XML Datei befinden sich auf der Webseite von opensearch.org und in der MSDN.

Ich denke, das ist eine sinnvolle Ergänzung für jede dynamische Webseite, die kaum Arbeit kostet.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Internet Explorer 8 - Was Webentwickler beachten sollten.

Monday, August 11, 2008 10:38:41 PM (Mitteleuropäische Sommerzeit, UTC+02:00)

Laut IEBlog soll noch im August die zweite Beta des Internet Explorers 8 erscheinen. Diese Beta ist öffentlich, das heißt,  jeder kann sich als Betatester bewerben. Bei der Entwicklung der  8. Version stand maximale Konformität mit Webstandards im Vordergrund. Was bedeutet das?
Mit dem IE8 sehen Webseiten teilweise "anders" aus als man es vom Firefox oder dem IE7 kennt. Anders bedeutet in diesem Fall, das Webseiten nicht immer so dargestellt werden, wie es sich der Webdesigner einst vorgestellt hat. Das standardkonforme Verhalten kann sogar so weit führen, dass Webseiten die für ältere Browserversionen optimiert wurden, nicht mehr funktionieren.
Microsoft nimmt also keine Rücksicht darauf, wenn mit dem IE8 in einem Internetshop keine Bestellvorgänge getätigt werden können  oder ob eine Firmenwebseite total verschoben und falsch dargestellt wird.
Ein gutes Beispiel für eine unbrauchbare Webseite, ist die Seite die-opelgalerie.de. Diese Webseite hatte ich vor ungefähr einem Jahr, mit allen, damals gängigen, Browsern erfolgreich  getestet.

die-opelgalerie.de
Diese Seite ist mit dem IE8 nicht zu gebrauchen.

Jeder Webseitenbetreiber bzw.  Webmaster steht in der Verantwortung, seine Seite(n) mit den Beta Versionen des IE8 zu testen und ggf. nachzubessern.
Um seine Webseite mit der Beta 1 zu testen, ist es empfehlenswert das VPC Image von Microsoft herunter zu laden. Das Image beinhaltet ein Windows XP mit IE8 Beta1.

Was kann der Webmaster tun, wenn die Seite nicht ordnungsgemäß angezeigt wird?

Es gibt zwei Möglichkeiten:

1. Webserver konfigurieren
Hat man administrativen Zugriff auf den Webserver, kann man den HTTP Header "X-UA-Compatible: IE=EmulateIE7" für die Webseite hinzufügen. Damit wird sichergestellt, dass der Internet Explorer 8 automatisch umschaltet und die gesamte Seite wie im IE7 richtig darstellt.
Hier sind einige weiterführende Links zum Hinzufügen des HTTP Headers:

Eigene HTTP Response Header im IIS7
Das HTTP Headers Tab im IIS6

Apache Module mod_headers in der Version 2.2
Apache Module mod_headers in der Version 2.0
Apache Module mod_headers in der Version 1.3

2. Metatag hinzufügen
Oft hat man keinen Zugriff auf den Webserver oder möchte nur einzelne Seiten im IE7 Mode rendern lassen. In diesem Fall kann man das Umschalten auf den IE7 Mode durch ein Metatag erzwingen der in den Head-Bereich der Webseite eingebaut wird.
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

Was kann der Anwender tun, wenn er auf Seiten stößt, die im Internet Explorer 8 nicht richtig angezeigt werden?

Im IE8 befindet sich dazu ein Button "Emulate IE7" in der Menüleiste:

EmulateIE7

Sollte eine Webseite für eine ältere Browserversion optimiert worden sein und wird deshalb nicht richtig angezeigt, kann der Anwender die Renderengine mit einem Knopfdruck umstellen.


Wer sich in Sachen IE8 auf dem Laufenden halten möchte sollte den Blog vom IE-Team und von Daniel Melanchton verfolgen.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Einführung in Linq to XML

Saturday, June 28, 2008 12:11:28 AM (Mitteleuropäische Sommerzeit, UTC+02:00)

Vor kurzem habe ich eine dreiteilige Artikelserie geschrieben die den Einstieg in das Thema Linq to XML erleichtern soll. Die Artikel sind analog zu dem 4 grundlegenden Datenbankoperationen CRUD (Create, Retrieve, Update und Delete ) gegliedert.
Zu jedem Artikel gibt es ein Beispielprojekt zum Download.

LINQ to XML Teil 1 – Erstellen einer XML Datei
LINQ to XML Teil 2 – Abfragen einer XML Datei
LINQ to XML Teil 3 – Manipulieren einer XML Datei

Viel Spaß beim Lesen!

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


dotnet-forum.de mit eigener Knowledge Base

Monday, June 09, 2008 8:04:00 AM (Mitteleuropäische Sommerzeit, UTC+02:00)

Im dotnet-forum.de gibt es ab sofort eine eigene  Knowledge Base. Die Knowledge Base ist eine strukturierte Sammlung von Fachartikeln aus den Bereichen .NET-Entwicklung, IT-Professional und Testberichten von Büchern und Entwicklersoftware.

Die Knowledge Base bietet gegenüber dem Forum einige Vorteile:

1. Artikel können mit dem Windows Live Writer veröffentlicht werden
2. Artikel können kommentiert werden, diese Kommentare können vom Autor moderiert werden
3. Artikel können von den Lesern bewertet werden
4. Die Kategorien der Knowledge Base können jederzeit flexibel angepasst werden
5. Es gibt RSS Feeds für jeden Autor und für jede Kategorie

Die Knowledge Base würde von Alex Bierhaus und Jan-Cornelius Molnar vom VB-Magazin.de entwickelt und uns freundlicherweise zu Verfügung gestellt. Jan und Alex haben bei der Entwicklung großen Wert darauf gelegt, die die neuen Sprachfeatures von VB 9.0 wie zum Beispiel Linq einzusetzen um so eine performante und skalierbare Anwendung zu schaffen die sich gut in den CommunityServer integrieren lässt.

Vielen Dank an Alex und Jan!

Zu erreichen ist die Knowledge Base unter diesem Link: http://dotnet-forum.de/KnowledgeBase/

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Automatisches Erstellen einer professionellen Codedokumentation mithilfe kostenloser Tools

Sunday, December 02, 2007 8:04:17 PM (Mitteleuropäische Zeit, UTC+01:00)
dotnet-magazin-0108

Viele Entwickler scheuen sich vor dem Anfertigen einer vollständigen Codedokumentation, da sie den Aufwand überschätzen.
Mit den richtigen Tools, die kostenlos zur Verfügung stehen, lässt sich eine komplette Codedokumentation sogar automatisch anlegen.

Diesen Artikel habe ich für die Weihnachtsausgabe des dotnet-magazin geschrieben.
Das Magazin erscheint am 5.12., viel Spaß beim lesen!

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


MS SQL Server Datenbanken kopieren

Thursday, November 22, 2007 12:56:07 AM (Mitteleuropäische Zeit, UTC+01:00)

Wie kann eine SQL Server Datenbank von einem SQL Server zu einem andern SQL Server kopiert werden, wenn nur eingeschränkte Zugriffsrechte zu Verfügung stehen?
Dies ist zum Beispiel der Fall, wenn die DB bei einem ISP gehostet ist.
Das Anlegen eines DB Backups ist auf Grund fehlender Schreibrechte oft nicht möglich. Was tun?
Mit dem SQL Manager von EMS ist es möglich, ein SQL Script zu erstellen, mit welchem die komplette Datenbank wiederhergestellt werden kann. Die Software erzeugt ein SQL Script in dem alle „Create Table“, „Insert Into“ usw. Anweisungen enthalten sind.
Dieses Script kann, je nach Größe der Datenbank, sehr groß werden. Dies sollte allerdings in Zeiten von großen Datenträgern, schnellen Netzwerkanbindungen und guten Packprogrammen kein Problem darstellen.

Wurde das Script erstellt und auf das Ziel – System kopiert, kann es einfach mit dem SQL Manager ausgeführt werden und die Datenbank wurde eins zu eins kopiert.

Beim Erstellen des Scripts kann ausgewählt werden, ob nur die Daten, nur die Struktur der DB oder beides erstellt werden soll.
Es folgt eine Kurzanleitung.

Erstellung eines SQL Script:
- Verbindung zur DB aufbauen
- Tools | DB extrahieren | speichern in Datei

Ausführen des SQL Script
- Verbindung zur neuen DB aufbauen
- Hauptmenü | SQL Script ausführen

Eine kostenlose Light Version des SQL Managers kann hier runtergeladen werden.
Der SQL Manager ist für alle gängigen DMS erhältlich.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Desktop anzeigen Icon verschwunden?

Wednesday, November 21, 2007 9:19:49 PM (Mitteleuropäische Zeit, UTC+01:00)

DesktopAnzeigen

Mir ist diese sehr nützliche Verknüpfung schon ein paar mal abhanden gekommen.

Zum Wiederherstellen der Funktion einfach diese Datei runterladen, entpacken und in die Quick Launch Bar ziehen. Funktioniert bei XP und Vista.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Ausgeben der aktuellen Serverzeit mit ASP.NET AJAX

Monday, November 12, 2007 11:12:32 PM (Mitteleuropäische Zeit, UTC+01:00)

Immer wieder wird in unterschiedlichen Foren gefragt wie man die aktuelle Zeit des Webservers auf einer Webseite anzeigen kann.
Dies ist mit reinem ASP.NET nicht möglich, es sei denn, man bringt den Benutzer der Webseite dazu, im Sekundentakt (oder schneller) die F5 Taste zu drücken :-)
Wie kann das Problem also gelöst werden? Vielleicht mit JavaScript? Nein, denn JavaScript wird auf der Client-Seite ausgeführt, das bedeutet, es wird die Uhrzeit des Client Rechners angezeigt und ob die immer stimmt, lasse ich mal offen.  Ganz ohne JavaScript geht es trotzdem nicht.
Im folgenden Beispiel wird ein JavaScript in regelmäßigen Abständen die aktuelle Uhrzeit vom Server abfragen und das Ergebnis in ein Textfeld schreiben.
Die aktuelle Uhrzeit liefert ein Webservice der sich auf dem Server läuft.
Als Proxy zwischen JavaScript und Webservice dient ein ASP.NET AJAX ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="WebServiceServerTime.asmx" />
    </Services>
</asp:ScriptManager>

Im Scriptmanager wird der Webservice referenziert, der die Zeit als String zurückgibt.
Der Webservice liegt im gleichen Verzeichnis wie die Webseite, die die Zeit ausgeben soll. Der Webservice ist sehr übersichtlich:

using System;
using System.Web.Script.Services;
using System.Web.Services;

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class WebServiceServerTime : WebService
{
    [WebMethod]
    public string GetTime()
    {
        return DateTime.Now.ToString();
    }
}

Wichtig ist hierbei das Attribut [ScriptService]. Mit diesem Attribut ist der Webservice auch für JavaScript-Clients verfügbar.
Kommen wir nun zur Client Seite, wie bereits erwähnt, geht es nicht ohne JavaScript:

<script language="javascript" type="text/javascript">

    function CallTimeservice() 
    {
        ret = WebServiceServerTime.GetTime(onGetTime);
        setTimeout('CallTimeservice()', 500);                        
    }

    function onGetTime (arg) 
    {
        var textfeld = document.getElementById('input1');          
        textfeld.value = arg;          
    }

</script>

Das dazugehörige Textfeld:

<input id="input1" readonly="readonly" type="text" />

Das Script beinhaltet eine Methode und einen Ereignishandler.
Die Methode CallTimeservice () wird alle 500 ms neu aufgerufen.
Die aktuelle Zeit die vom Webserver übertragen wurde, wird durch den Handler onGetTime() in das Textfeld geschrieben.
Leider gibt es in JavaScript keine Sleep() oder Wait() Methode desshalb muss die SetTimeout() Methode verwendet werden.

Warum habe ich 500 ms gewählt?
Das Nyquist-Shannon-Abtasttheorem besagt, dass die Abtastfrequenz mindestens doppelt so hoch sein muss wie das Ursprungssignal um Informationsverlust zu vermeiden.
Das bedeutet im Klartext: Die Zeit die auf dem Server mit DatTime.Now.ToString() abgefragt wird, ändert sich mit 1Hz, also muss die Zeit mit 2 Hz (f=1/s --> 1/2 Hz = 0,5s) abgefragt werden, damit der User einen gleichmäßigen Timer ticken sieht. Der Wert darf natürlich auch kleiner als 500ms sein, dies wäre genauer, erhöht aber die Netzwerklast des Servers zusätzlich.

Zum Erstellen des Projektes sollte man zuerst ASP.Net AJAX installieren, dann kann im Visual Studio eine „Ajax Enabled Webseite“ erstellt werden.

AjaxEnabledWebsite

Diese Vorlage hat den Vorteil, dass die Web.config für Ajax vorbereitet ist und dass sich der Scriptmanager in jeder .aspx Datei befindet.

Mit dieser kleinen Anleitung sollte es nicht schwer fallen einen Countdown oder ähnliches zu realisieren.

Vielleicht sollte Ebay auch mal drüber nachdenken.
So ein Auktionscountdown wäre sicher sinnvoll.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


ASP.NET: Emailadressen vor Spam schützen

Tuesday, November 06, 2007 10:18:34 PM (Mitteleuropäische Zeit, UTC+01:00)

Emailadressen im Internet im Klartext anzuzeigen, ist mit einem Problem verbunden, den Spambots. Diese Roboter durchsuchen Webseiten nach Emailadressen, um diese später mit unerwünschter Emailwerbung zu überfluten.
Eine Möglichkeit die Emailadresse für Spambots unsichtbar zu machen, ist die Emailadresse in eine Grafik umzuwandeln.
Das Umwandeln geht mit dem .NET Framework relativ einfach wie dieser Snippet zeigt.
Ausprobieren kann man das auf der Webseite email2image.com.
Die zweite Möglichkeit ist JavaScript:

<script language="javascript"><!--
var localpart="name";
var domainpart="domain.com";
document.write('<a href="mailto:'+localpart+'@'+domainpart+'">'+localpart+'@'+domainpart+'</a>');
//--></script>

Das Script kennt nur 2 Variablen den local-part (vor dem @) und den domain-part (nach dem @).
Wenn die Webseite aufgerufen wird die Emailadresse per document.write als Link in die Seite geschrieben. So wird verhindert, dass die Emailadresse im Quelltext der Seite auftaucht.
Da sich die meisten ASP.NET Entwickler nicht gern mit JavaScript rumärgern, habe ich die folgende kleine Methode geschrieben:

/// <summary>
/// Gets the JavaScript.
/// </summary>
/// <param name="email">The email.</param>
/// <returns></returns>
private string GetJavaScript(string email)
{
MailAddress emailadress = new MailAddress(email);
StringBuilder stringBuilder = new StringBuilder();

stringBuilder.AppendLine("<script language=\"javascript\"><!--");
stringBuilder.AppendLine(string.Format("var localpart=\"{0}\";", emailadress.User));
stringBuilder.AppendLine(string.Format("var domainpart=\"{0}\";", emailadress.Host));
stringBuilder.AppendLine("document.write('<a href=\"mailto:'+localpart+'@'+domainpart+'\">'+localpart+'@'+domainpart+'</a>');");
stringBuilder.AppendLine("//--></script>");
stringBuilder.AppendLine(string.Format("<noscript>{0}&nbsp;[at]&nbsp;{1}</noscript>", emailadress.User, emailadress.Host.Replace(".", "&nbsp;[dot]&nbsp;")));

return stringBuilder.ToString();
}

Der Aufruf der Methode ist denkbar einfach:

labelEmailAdresse.Text = "Kontakt: " + GetJavaScript(local@domain.com);

Die Darstellung der Emailadresse ist von einer Normalen Adresse nicht zu unterscheiden:

NoSpamJavaOn

Wird JavaScript vom Browser nicht unterstützt wird die Adresse in folgendem Format ausgegeben:

NoSpamJavaOff

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Ermitteln der öffentlichen IP (WAN IP)

Thursday, November 01, 2007 4:41:20 PM (Mitteleuropäische Zeit, UTC+01:00)

Immer wieder taucht in Foren die Frage auf, wie die öffentliche IP eines Computers ermittelt wird wenn sich der Computer hinter einem Router im Internet befindet.
Fakt ist, wenn der Computer über einem Router mit dem Internet verbunden ist und der Router eine IP Adresse vom ISP (Internet Service Provider) bekommen hat, kennt der Computer nur die IP Adresse aus dem lokalen Netzwerk.
Diese lokale Adresse wird entweder fest vom Router zugeordnet oder per DHCP vom vergeben.
Da der Router beide Netze nämlich Internet (WAN) und das lokale Netz (LAN) miteinander verbindet, kennt der Router beide IPs.
Der PC könnte also den Router fragen welche öffentliche Adresse der ISP vergeben hat. Leider gibt es dazu keinen Weg der bei allen Routern funktioniert. Um diese Adresse herauszubekommen gibt es Seiten wie zum Beispiel www.wieistmeineip.de.
Es ist also nötig einen Computer im WAN zu fragen mit welcher Source Adresse diese Seite aufgerufen wurde. Diese Source Adresse steckt in jedem IP Paket das zum Webserver gesendet wird.
Im IP Paket das vom lokalen PC zum Router geschickt wird, ist die Source Adresse zunächst die Adresse des lokalen PC. Der Router ersetzt nun diese Source Adresse durch die Adresse mit der der lokale PC aus dem Internet zu erreichen ist. Diese Funktion wird als NAT bezeichnet.
Mit ASP.NET ist es sehr einfach diese Source Adresse auszulesen und auszugeben, dies ist am einfachsten einen so genannten generischen Handler, da dieser kein „HTML Overhead“ erzeugt sondern nur die IP Adresse als String zurück gibt:

<%@ WebHandler Language="C#" Class="myIP" %> 

using System.Web; 

public class myIP : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write(HttpContext.Current.Request.UserHostAddress);
    } 

    public bool IsReusable
    {
        get{return false;}
    }
} 

Alle die nicht die Möglichkeit haben, den Handler zu hosten, können gern folgende URL nutzen: http://service.jan-welker.de/myip.ashx
Ich kann natürlich keine hundertprozentige Verfügbarkeit dieses Services garantieren. Dieser Link sollte nur zu Testzwecken genutzt werden.
Jetzt kann die IP Adresse im Browser angesehen werden, wie kann diese nun aus einem C# Programm ausgelesen werden?
Das .NET Framework bietet dazu die Klassen HttpWebRequest und HttpWebResponse mit denen sich dieser String recht einfach auslesen lässt:

/// <summary>
/// Gets the public IP.
/// </summary>
/// <returns></returns>
private static string GetPublicIP()
{
    HttpWebRequest httpWebRequest =
        (HttpWebRequest)WebRequest.Create("http://service.jan-welker.de/myip.ashx");
    HttpWebResponse httpWebResponse =
        (HttpWebResponse)httpWebRequest.GetResponse(); 

    Stream responseStream = 
  httpWebResponse.GetResponseStream();
    StreamReader responseStreamReader =
        new StreamReader(responseStream, Encoding.UTF8); 

 string url = responseStreamReader.ReadToEnd();
 httpWebResponse.Close();
    responseStream.Close(); 

    return url;
}

Viel Spaß damit!

Nachtrag: Der Snippet wurde von Tim in Visuaul Basic übersetzt und ist hier zu finden. Danke Tim!

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de