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.
Dieses Beispiel veranschaulicht, wie eine Schnittstelle von einer COM+-Anwendung als Windows Communication Foundation (WCF)-Dienst verfügbar gemacht wird und wie diese von einem WCF-Client aus aufgerufen wird. Dieses Beispiel besteht aus einem Clientkonsolenprogramm (.exe) und einer Enterprise Services-Bibliotheksanwendung (.dll), die in COM+ registriert ist.
Tipp
Die Setupprozedur und Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
Tipp
Die Visual Basic-Version dieses Beispiels muss als Serveranwendung konfiguriert sein und prozessextern gehostet werden, um auf einem 64-Bit-Windows-Betriebssystem ausgeführt werden zu können. Weitere Informationen über das Konfigurieren des Beispiels als Serveranwendung finden Sie unter Konfigurieren von COM+-Anwendungen (möglicherweise nur in englischer Sprache).
Die Enterprise Services-Anwendung enthält eine einzige Komponente, die eine einzige ICalculator-Schnittstelle implementiert, die wiederum mathematische Methoden (Summieren, Subtrahieren, Multiplizieren und Dividieren) verfügbar macht.
// Define the component's interface.
public interface ICalculator
{
double Add(double n1, double n2);
double Subtract(double n1, double n2);
double Multiply(double n1, double n2);
double Divide(double n1, double n2);
}
Diese Schnittstelle wird als ein Dienstvertrag verfügbar gemacht, der ein Anforderungs-Antwort-Kommunikationsmuster definiert. Der Client stellt synchrone Anforderungen an einen mathematischen Vorgang, und der Dienst sowie grundlegende Komponenten antworten mit dem Ergebnis. Die Clientaktivität ist im Konsolenfenster sichtbar.
Der Dienst wird prozessintern durch Internetinformationsdienste (IIS) gehostet und durch die erste an den Dienst gesendete Nachricht aktiviert. Die Implementierung der ESCalculatorService-Klasse berechnet das entsprechende Ergebnis und gibt es zurück.
// Supporting implementation for the ICalculator interface.
public class ESCalculatorService : ServicedComponent, ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
Tipp
Die Klasse umfasst keinen ServiceModel-spezifischen Code und stellt eine typische Enterprise Services-Assembly dar, die den Enterprise Services-Attributen zugeschrieben sowie signiert und dem globalen Assemblycache (GAC) hinzugefügt ist.
Das COM+ Service Model Configuration Tool (ComSvcConfig.exe) wird verwendet, um einen unterstützenden Dienst für die ausgewählte Schnittstelle hinzuzufügen. Dazu wird die folgende Syntax verwendet.
ComSvcConfig.exe /install /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator hosting:was /webDirectory:ServiceModelSamples /mex /verbose
In diesem Fall fügt das Tool einen Dienst für die ICalculator-Schnittstelle der ServiceModelSample.ESCalculator-Komponente hinzu, die sich in der ServiceModelSample-Anwendung befindet. Der Dienst wird durch IIS im virtuellen Verzeichnis ServiceModelSample gehostet. Der hinzugefügte Dienst macht einen einzigen Endpunkt zur Kommunikation mit dem Dienst verfügbar. Standardmäßig wird die Endpunktadresse für die Kommunikation mit dem Dienst aus der ProgID der Komponente (d. h. https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc) erstellt. Diese Dienstendpunktadresse kann jedoch durch Ändern des Namens der Dienstdatei .svc geändert werden. Das Tool fügt die Konfiguration der Dienstbindung der Datei "Web.config" hinzu. Die Konfiguration der Dienstbindung wird standardmäßig auf eine wsHttpBinding-Bindung festgelegt, die HTTP-Kommunikation über SOAP 1.2 und Webdienststandards für die Adressierung und Sicherheit bietet.
Das Tool macht außerdem einen Metadatenaustausch-Endpunkt (MEX-Endpunkt) unter https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex verfügbar sowie die Möglichkeit, auf WSDL-Metadaten von einem Browser über HTTP-GET unter https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc?wsdl zuzugreifen. Diese Metadaten-Features können deaktiviert werden, indem die Option des /mex-Tools weggelassen wird.
Der Dienstvertrag wird direkt von der ICalculator-Schnittstelle abgeleitet und entspricht der folgenden ServiceContract-Definition.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
Der Client kommuniziert auf einem Vertrag mit einem Client, der vom Service Metadata Utility Tool (Svcutil.exe) generiert wird. Der Client ist in der Datei "generatedClient.cs" enthalten. Dieses Dienstprogramm ruft Metadaten für einen Dienst ab und generiert einen Client, der zur Kommunikation auf einem Vertragstyp verwendet wird. Der gehostete Dienst muss zur Generierung des Proxycodes verfügbar sein, da dieser zum Abrufen der aktualisierten Metadaten verwendet wird. Führen Sie den folgenden Befehl an einer Eingabeaufforderung im Clientverzeichnis aus, um den typisierten Proxy zu generieren:
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex /out:generatedClient.cs
Wenn ein generierter Client für die Kommunikation auf einem angegebenen Vertrag vorhanden ist, kann der Client auf einen bestimmten Dienstendpunkt zugreifen, indem er die entsprechende Adresse und Bindung konfiguriert. Wie auch der Dienst gibt der Client den Endpunkt, mit dem er kommuniziert, mithilfe einer Konfigurationsdatei (App.config) an. Die Clientendpunktkonfiguration besteht aus einem Konfigurationsnamen, einer absoluten Adresse für den Dienstendpunkt, der Bindung und dem Vertrag.
<system.serviceModel>
<client>
<endpoint
address="https://localhost/ServiceModelSamples/servicemodelsample.escalculator.svc/ICalculator"
binding="wsHttpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<binding name="comNonTransactionalBinding" >
<reliableSession enabled="true"/>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Die Clientimplementierung erstellt eine Instanz des generierten Clients. Sie kann anschließend verwendet werden, um die Kommunikation mit dem Dienst zu beginnen.
// Create a client.
CalculatorClient client = new CalculatorClient();
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. Dies veranschaulicht die Verwendung des generierten WCF-Diensts von einem WCF-Client. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
So richten Sie das Beispiel ein und erstellen es
Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.
Zum Erstellen der C#- oder Visual Basic .NET-Version der Lösung folgen Sie den unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
Stellen Sie sicher, dass \InetPub\wwwroot\ServiceModelSamples und sein Unterverzeichnis bin leer sind.
Navigieren Sie von einer Eingabeaufforderung zum Ordner service\bin des Beispiels. Wenn Sie Windows Vista oder Windows Server 2008 verwenden, stellen Sie sicher, dass Sie die Eingabeaufforderung als Administrator ausführen.
Geben Sie gacutil.exe /i ESCalculator.dll ein, um die Assembly zum globalen Assemblycache hinzuzufügen. Stellen Sie sicher, dass sich Gacutil.exe im Pfad befindet.
Geben Sie regsvcs.exe ESCalculator.dll ein, um die Komponente der Assembly und die ServiceModelSample-Anwendung mit COM+ zu registrieren. Stellen Sie sicher, dass sich Regsvcs.exe im Pfad befindet.
Geben Sie ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose ein, um die Schnittstelle als von IIS gehosteter Dienst verfügbar zu machen.
Stellen Sie sicher, dass sich ComSvcConfig.exe im Pfad befindet.
So führen Sie das Beispiel auf demselben Computer aus
Stellen Sie sicher, dass Sie mit einem Browser auf die Dienste zugreifen können, indem Sie die folgende Adresse eingeben: https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc. Als Antwort sollte eine Bestätigungsseite angezeigt werden.
Führen Sie die Datei "Client.exe" vom Ordner "\client\bin\" unter dem sprachspezifischen Ordner aus. Im Clientkonsolenfenster wird die Clientaktivität angezeigt.
Wenn der Client und der Dienst nicht miteinander kommunizieren können, finden Sie weitere Informationen unter Hinweise zur Fehlerbehebung.
Tipp
In dem Beispiel wird ein Clientprogramm für die Konsolenanwendung erstellt. Sie müssen es über eine Eingabeaufforderung starten, um die Ausgabe zu sehen.
So führen Sie das Beispiel computerübergreifend aus
Erstellen Sie auf dem Dienstcomputer ein virtuelles Verzeichnis namens ServiceModelSamples. Zum Erstellen des Festplattenverzeichnisses und des virtuellen Verzeichnisses kann das Skript Setupvroot.bat in der Anleitung zum Einrichten eines virtuellen Verzeichnisses verwendet werden.
Kopieren Sie die Datei "ESCalculator.dll" aus dem Verzeichnis "\service\bin" in ein Verzeichnis auf dem Dienstcomputer.
Navigieren Sie an der Eingabeaufforderung zu diesem Zielverzeichnis auf dem Dienstcomputer. Wenn Sie Windows Vista oder Windows Server 2008 verwenden, stellen Sie sicher, dass Sie die Eingabeaufforderung als Administrator ausführen.
Geben Sie auf dem Dienstcomputer gacutil.exe /i ESCalculator.dll ein, um die Assembly zum globalen Assemblycache hinzuzufügen.
Geben Sie auf dem Dienstcomputer regsvcs.exe ESCalculator.dll ein, um die Komponente der Assembly und die ServiceModelSample-Anwendung mit COM+ zu registrieren.
Geben Sie auf dem Dienstcomputer ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose ein, um den Vertrag als einen von IIS gehosteten Dienst verfügbar zu machen.
Kopieren Sie die Clientprogrammdateien vom Ordner \client\bin\ unter dem sprachspezifischen Ordner zum Clientcomputer.
Ändern Sie in der Clientkonfigurationsdatei den Wert für die Adresse der Endpunktdefinition so, dass er mit der neuen Adresse Ihres Diensts übereinstimmt. Ersetzen Sie alle Verweise auf "localhost" in der Adresse durch einen vollqualifizierten Domänennamen.
Stellen Sie sicher, dass Sie mit einem Browser vom Clientcomputer auf den Dienst zugreifen können.
Starten Sie auf dem Clientcomputer die Datei "Client.exe" über eine Eingabeaufforderung.
So bereinigen Sie nach dem Beispiel
Wenn Sie Windows Vista oder Windows Server 2008 verwenden, stellen Sie sicher, dass Sie die Eingabeaufforderung als Administrator ausführen. Geben Sie ComSvcConfig.exe /u /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator ein, um die COM+-Integration zu deinstallieren.
Geben Sie regsvcs.exe /u ESCalculator.dll ein, um die Anwendung von COM+ zu deinstallieren.
Geben Sie gacutil.exe /u ESCalculator ein, um die Komponente aus dem globalen Assemblycache zu entfernen.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.