Freigeben über


Netzwerkprogrammierung in .NET Compact Framework

Aktualisiert: November 2007

.NET Compact Framework bietet integrierte Unterstützung für XML-Webdienste und unterstützt die folgenden Protokolle und Funktionen:

  • HTTP-basierte Protokolle

  • NTLM-Authentifizierung

  • SOAP-codierten XML-Inhalt Hierbei wird auch das Übergeben von ADO.NET-DataSets unterstützt.

  • Methoden für Webanforderungen und Webantworten, die HTTP-SOAP-Meldungen senden und SOAP-Meldungen als Antwort empfangen können.

  • SOAP-Bibliotheken und -Methoden, die Methodenaufrufe und beliebige Objekte in und aus XML-SOAP-Meldungen serialisieren und deserialisieren können.

HTTP-Anforderungen

Die folgenden Elemente betreffen das Senden und Empfangen von HTTP-Anforderungen:

  • Wenn Sie den Emulator nutzen, verwenden Sie nicht localhost für den Servernamen. Geben Sie den Computernamen oder die IP‑Adresse des Entwicklungscomputers an, auf dem der Webdienst bereitgestellt wird.

    Der Emulator hat wie ein Gerät eine eigene IP‑Adresse. Wenn Sie localhost verwenden, weist dies den Emulator an, zum Herstellen einer Verbindung zum Webdienst sich selbst und nicht den Webdienst zu verwenden, der in der Entwicklungsumgebung oder auf einem anderen Desktopcomputer bereitgestellt wird.

    Verwenden Sie z. B. nicht:

    https://localhost/myWebService/Service1.asmx

    Geben Sie Folgendes an:

    http://ComputerName/myWebService/Service1.asmx

  • Beim Erstellen einer HTTP-Anforderung mit HttpWebRequest initiiert das Gerät eine neue Netzwerkverbindung, falls keine vorhanden ist. Wenn Sie also eine HTTP‑Anforderung nur erstellen, um zu ermitteln, ob eine Verbindung verfügbar ist, versucht das Gerät u. U., eine Verbindung zu initiieren, beispielsweise eine GPRS‑Verbindung.

  • .NET Compact Framework speichert keine Proxydaten in der GlobalProxySelection.Select-Eigenschaft, verwendet diese Eigenschaft aber für HTTP-Verbindungen, wenn Sie im Code einen Wert angeben.

  • Um eine Internetverbindung herzustellen, müssen Sie u. U. Ihre lokalen Proxyeinstellungen angeben. Im folgenden Codebeispiel wird der Proxy auf Anschluss 80 festgelegt:

    System.Net.GlobalProxySelection.Select = new WebProxy("http://myproxy:80");
    
  • Wenn Sie AllowWriteStreamBuffering auf false festlegen, werden die Daten nicht im Arbeitsspeicher gepuffert und unterstützen keine Authentifizierungsanforderungen oder Umleitungen durch den Webserver.

  • Um einen fehlerfreien Betrieb zu gewährleisten, geben Sie absolute Pfadinformationen an.

    Beachten Sie das folgende Windows CE-Verhalten beim Auflösen relativer Dateispezifikationen:

    file://myfile wird als \\myfile aufgelöst.

    file:///myfile wird als \myfile im Stammverzeichnis aufgelöst.

  • Es ist ein bekanntes Problem, dass die Dns.GetHostName-Methode von .NET Framework eine Ausnahme auslöst, wenn mehr als 50 Netzwerkprotokolle auf dem aktuellen Computer installiert sind.

    Um dieses Problem zu umgehen, deinstallieren Sie die nicht benötigten Netzwerkprotokolle. Eine Möglichkeit besteht darin, nicht verwendete Netzwerkkarten mit dem Windows Geräte-Manager zu entfernen. Sie können auch die Anwendungen deinstallieren, die über installierte Protokolle verfügen.

Sichere mobile Kommunikation

Es gibt im Wesentlichen zwei Hilfsmittel für eine sichere mobile Kommunikation:

  • HTTP-Authentifizierung

    .NET Compact Framework unterstützt Basis- und Digestauthentifizierung. Diese Authentifizierungsmechanismen sind einfach zu handhaben. Ihr Sicherheitsgrad und ihre Nachteile sind hinreichend bekannt, z. B. dass der Webdienst auf eine HTTP-Bindung beschränkt ist.

    .NET Compact Framework, Version 2.0, unterstützt Server, auf denen NTLM bzw. Kerberos ("Integrierte Windows-Authentifizierung") ausgeführt wird und die keine Codeänderungen an der bestehenden Basis- und Digestauthentifizierung erfordern.

  • Benutzerdefinierte Sicherheitsheader

    .NET Compact Framework unterstützt derzeit weder Web Services Security (WS-Security) noch Web Service Enhancements (WSE).

    Sie können unabhängig davon, ob Sie die Authentifizierung mittels HTTP oder eines benutzerdefinierten Headers durchführen, zur Erhöhung der Sicherheit zusätzlich SSL verwenden. Bei der Basisauthentifizierung werden Name und Kennwort als Text übertragen. Diese Methode ist also nicht besonders sicher, sofern sie nicht zusammen mit SSL verwendet wird. Bei Verwendung von SSL ist hinreichende Sicherheit gewährleistet. Allerdings müssen Sie darauf achten, Anmeldeinformationen gegenüber dem Zielserver nicht versehentlich offen zu legen.

Hinweis   .NET Compact Framework unterstützt keine clientseitige Authentifizierung mit X509-Zertifikaten.

Überlegungen zur Inhaltslänge

Beim Senden einer HTTP-Webanforderung mit Streaminhalt über das POST-Protokoll müssen Sie die Länge des Inhalts angeben. Wenn SendChunked den Wert false hat und Method = POST lautet, geben Sie einen Wert für ContentLength an.

Anders als beim vollständigen .NET Framework werden die Daten in .NET Compact Framework nicht vorgepuffert, um Speicherbeschränkungen Rechnung zu tragen. Um die Pufferung sicherzustellen, legen Sie SendChunked auf false fest.

Ein Anforderungsstream mit der Inhaltslänge 0 (null) löst ObjectDisposedException aus, falls er nicht ordnungsgemäß abgerufen und geschlossen wird. Um Anforderungen mit der Inhaltslänge 0 (null) zu behandeln, müssen Sie zuerst die GetRequestStream-Methode explizit aufrufen und dann die Close-Methode für den zurückgegebenen Stream aufrufen, ohne die Write-Methode aufzurufen. Siehe dazu das folgende Codebeispiel.

private static void ZeroLengthRequest()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
        requestUri + "?dummy=true");
    request.AllowWriteStreamBuffering = true;
    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    request.Credentials = netCred;
    request.ConnectionGroupName = "mygroup";
    request.ContentLength = 0;
    request.KeepAlive = true;
    request.Method = "POST";
    request.ServicePoint.UseNagleAlgorithm = false;
    request.Timeout = System.Threading.Timeout.Infinite;
    request.UnsafeAuthenticatedConnectionSharing = true;
    Stream req = request.GetRequestStream();
    req.Close();
    using (request.GetResponse())
    {
        ...
    }
}
Private Shared Sub ZeroLengthRequest()
        Dim request As HttpWebRequest = _
           CType(WebRequest.Create(requestUri + "?dummy=true"), _
           HttpWebRequest)
        request.AllowWriteStreamBuffering = true
        request.Credentials = CredentialCache.DefaultNetworkCredentials
        request.Credentials = netCred
        request.ConnectionGroupName = "mygroup"
        request.ContentLength = 0
        request.KeepAlive = true
        request.Method = "POST"
        request.ServicePoint.UseNagleAlgorithm = false
        request.Timeout = System.Threading.Timeout.Infinite
        request.UnsafeAuthenticatedConnectionSharing = true
        Dim req As Stream = request.GetRequestStream
        req.Close
        request.GetResponse
End Sub

Siehe auch

Weitere Ressourcen

Netzwerk und Konnektivität in .NET Compact Framework