Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im folgenden Beispiel wird ein einfacher Webdienst mit einigen komplizierteren Aspekten implementiert. BinaryFormatter wird verwendet, da die Payload kompakter ist und das System weniger Zeit zum Serialisieren und Deserialisieren des Streams benötigt. Wenn IIS (Internet-Informationsdienste) zudem die integrierte Windows-Authentifizierung (auch als NTLM-Authentifizierung bezeichnet) verwendet, authentifiziert der Server den Client und gibt anschließend an den Client die von IIS authentifizierte Identität zurück. Schließlich können Sie den Webdienst schützen, indem Sie den URL in der Clientkonfigurationsdatei so ändern, dass "https" als Protokollschema verwendet wird, und IIS so konfigurieren, dass für das betreffende virtuelle Verzeichnis SSL-Verschlüsselung (Secure Sockets Layer) erforderlich ist. Dieser Prozess wird jedoch im Beispiel nicht dargestellt.
Vorsicht In der Standardeinstellung führt .NET Remoting keine Authentifizierung und Verschlüsselung aus. Daher empfiehlt es sich, alle erforderlichen Schritte auszuführen, um die Identität von Clients und Servern vor der Remoteinteraktion eindeutig zu ermitteln. Da .NET Remoting-Anwendungen für die Ausführung FullTrust-Berechtigungen erfordern, kann ein unbefugter Client, dem der Zugriff auf Ihren Server gewährt wurde, Code wie mit voller Vertrauenswürdigkeit ausführen. Authentifizieren Sie stets die Endpunkte, und verschlüsseln Sie die Kommunikationsstreams, entweder durch Hosten der Remotetypen in IIS, oder indem Sie für diese Aufgabe ein benutzerdefiniertes Channelempfängerpaar erstellen.
So kompilieren Sie dieses Beispiel und führen es aus
Speichern Sie alle Dateien im Verzeichnis RemoteIIS.
Kompilieren Sie das gesamte Beispiel, indem Sie an der Eingabeaufforderung die folgenden Befehle eingeben:
csc /noconfig /t:library /r:System.Web.dll /out:ServiceClass.dll ServiceClass.cs
csc /noconfig /r:System.Runtime.Remoting.dll /r:System.dll /r:ServiceClass.dll Client.cs
Erstellen Sie das Unterverzeichnis \bin, und kopieren Sie die Datei
ServiceClass.dllin dieses Verzeichnis.Erstellen Sie in IIS ein virtuelles Verzeichnis. Geben Sie für das virtuelle Verzeichnis den Alias HttpBinary an, und legen Sie das Quellverzeichnis auf das Verzeichnis RemoteIIS fest.
Setzen Sie die Authentifizierungsmethode für dieses virtuelle Verzeichnis auf integrierte Windows-Authentifizierung (früher als NTLM-Athentifizierung bezeichnet).
Vergewissern Sie sich, dass IIS gestartet wurde. Geben Sie an der Eingabeaufforderung im Verzeichnis RemoteIIS den Befehl client ein.
Diese Anwendung wird auf einem Einzelcomputer oder über ein Netzwerk ausgeführt. Wenn Sie die Anwendung über ein Netzwerk ausführen möchten, müssen Sie anstelle von "localhost" in der Clientkonfiguration den Namen des Remotecomputers einsetzen.
ServiceClass.cs
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Threading;
using System.Web;
public interface IService{
DateTime GetServerTime();
string GetServerString();
}
// IService exists to demonstrate the possibility of publishing only the interface.
public class ServiceClass : MarshalByRefObject, IService{
private int InstanceHash;
public ServiceClass(){
InstanceHash = this.GetHashCode();
}
public DateTime GetServerTime(){
return DateTime.Now;
}
public string GetServerString(){
// Use the HttpContext to acquire what IIS thinks the client's identity is.
string temp = HttpContext.Current.User.Identity.Name;
if (temp == null || temp.Equals(string.Empty))
temp = "**unavailable**";
return "Hi there. You are being served by instance number: "
+ InstanceHash.ToString()
+ ". Your alias is: "
+ temp;
}
}
Web.config
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown
mode="SingleCall" objectUri="SAService.rem"
type="ServiceClass, ServiceClass"/>
</service>
<channels>
<channel ref="http"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Client.cs
using System;
using System.Collections;
using System.Diagnostics;
using System.Net;
using System.Reflection;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Security.Principal;
public class Client{
public static void Main(string[] Args){
// Tells the system about the remote object and customizes the HttpChannel
// to use the binary formatter (which understands that base64 encoding is needed).
RemotingConfiguration.Configure("Client.exe.config");
// New proxy for the ServiceClass.
// If you publish only the IService interface, you must use Activator.GetObject.
ServiceClass service = new ServiceClass();
// Programmatically customizes the properties given to the channel. This sample uses the
// application configuration file.
// IDictionary Props = ChannelServices.GetChannelSinkProperties(service);
// Props["credentials"] = CredentialCache.DefaultCredentials;
// Reports the client identity name.
Console.WriteLine("ConsoleIdentity: " + WindowsIdentity.GetCurrent().Name);
// Writes what the server returned.
Console.WriteLine("The server says : " + service.GetServerString());
Console.WriteLine("Server time is: " + service.GetServerTime());
}
}
Client.exe.config
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="http" useDefaultCredentials="true" port="0">
<clientProviders>
<formatter
ref="binary"
/>
</clientProviders>
</channel>
</channels>
<client>
<wellknown
url="https://localhost:80/HttpBinary/SAService.rem"
type="ServiceClass, ServiceClass"
/>
</client>
</application>
</system.runtime.remoting>
</configuration>
Siehe auch
Remotingbeispiele | Konfiguration | Hosting von Remoteobjekten in Internet Information Services (IIS)