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. Das Beispiel basiert auf dem Beispiel Beispiel 'Erste Schritte', das einen Rechnerdienst implementiert und dem Beispiel COM+-Integration: Im Web gehostet ähnelt. Durch die Verwendung von COM+-Hosting und TCP-Transport zeigt dieses Beispiel einen Ansatz mit besserer Leistung als der im Beispiel COM+-Integration: Im Web gehostet. Allerdings muss die COM+-Anwendung explizit aktiviert werden, bevor Anforderungen verarbeitet werden können.
Tipp
Die Setupprozedur und die Erstellungsanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
Die Enterprise Services-Anwendung enthält eine einzige Komponente, die eine einzige ICalculator-Schnittstelle implementiert, die wiederum mathematische Methoden (Addieren, 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 mit COM+ gehostet, und die Anwendung ServiceModelHostedSample muss manuell gestartet werden, um die Dienstendpunkte zu aktivieren. 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 der folgende Code verwendet:
ComSvcConfig.exe /install /application:ServiceModelHostedSample /contract:"ServiceModelHostedSample.ESCalculator,ICalculator" /hosting:complus /mex /verbose
In diesem Fall fügt das Tool einen Dienst für die ICalculator-Schnittstelle der ServiceModelHostedSample.ESCalculator-Komponente hinzu, die sich in der Anwendung ServiceModelHostedSample befindet. Der Dienst wird innerhalb von COM+ mit einem Metadatenaustausch-Endpunkt gehostet. Eine ServiceModelInitializer-Komponente wird der Anwendung hinzugefügt, um die Integration zu erleichtern, und eine Anwendungskonfigurationsdatei wird im Anwendungsstammverzeichnis der COM+-Anwendung generiert – für diese Anwendung ist dies "%PROGRAMFILES%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}\". Bei Anwendungsstart prüft die ServiceModelInitializer-Komponente die Anwendungskonfigurationsdatei und startet die entsprechend konfigurierten Dienstendpunkte.
Für COM+-gehostete Dienste erstellt das Tool COM+ Service Model Configuration Tool (ComSvcConfig.exe) Dienstendpunkte mithilfe von netNamedPipeBinding, wobei nur Einzelcomputerzugriff bereitgestellt wird. Die Konfigurationsdatei muss weiter bearbeitet werden, um auf anderen Transporten Endpunkte bereitzustellen. Dieses Beispiel verwendet eine benutzerdefinierte Konfigurationsdatei, die die Anwendung durch die Bindungen netTcpBinding und wsHttpBinding auf TCP und HTTP zur Verfügung stellt.
<!-- Specify the service (application and component GUIDs) and service and MEX endpoints -->
<services>
<service behaviorConfiguration="ComServiceMexBehavior"
name="{4CDCDB2C-0B19-4534-95CD-FBBFF4D67DD9},{C2B84940-AD54-4A44-B5F7-928130980AB9}">
<endpoint
address="ICalculator"
binding="netTcpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="{8803CCEC-4DFB-49a7-925B-60025C32E5CD}" />
<endpoint
address="ICalculator"
binding="wsHttpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="{8803CCEC-4DFB-49a7-925B-60025C32E5CD}" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<!-- Specify base addresses for both transports -->
<baseAddresses>
<add baseAddress="net.tcp://localhost:8081/ServiceModelHostedSample" />
<add baseAddress="https://localhost:8082/ServiceModelHostedSample" />
</baseAddresses>
</host>
</service>
</services>
In diesem Beispiel passt die Konfigurationsdatei auch den Namen und den Namespace für den Dienst an. Darüber hinaus kann die Konfigurationsdatei dazu verwendet werden, nur eine Teilmenge der von der Komponente bereitgestellten Vorgänge verfügbar zu machen. In diesem Fall wurde die Divide-Methode auskommentiert. Sie wird daher vom verfügbar gemachten Dienstvertrag ausgelassen:
<!-- comContract specifying the name, namespace and methods for the service -->
<comContracts>
<comContract
contract="{8803CCEC-4DFB-49a7-925B-60025C32E5CD}"
name="ICalculator"
namespace="https://microsoft.com/Microsoft.ServiceModel.Samples/EnterpriseServicesHosted"
requiresSession="true">
<exposedMethods>
<add exposedMethod="Add" />
<add exposedMethod="Subtract" />
<add exposedMethod="Multiply" />
<!-- <add exposedMethod="Divide" /> -->
</exposedMethods>
</comContract>
</comContracts>
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" mit einer kompatiblen Konfiguration in "App.config" 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 Clientcodes verfügbar sein, da dieser zum Abrufen der Dienstmetadaten 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:8082/ServiceModelHostedSample/mex /out:generatedClient.cs /config:App.config
Die Clientimplementierung erstellt eine Instanz des generierten Clients mithilfe der TCP-Bindungskonfiguration. Sie kann anschließend verwendet werden, um die Kommunikation mit dem Dienst zu beginnen.
// Create a client.
CalculatorClient client = new CalculatorClient("NetTcpBinding_ICalculator ");
WSHttpBinding_ICalculator
// 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);
//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. Auf diese Weise wird die Verwendung des generierten WCF-Diensts von einem WCF-Client veranschaulicht. 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
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 Projektmappe folgen Sie den unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen. Der Erstellungsprozess umfasst die Ausführung eines Skripts, das die COM+-Anwendung erstellt, und markiert dies als "Bei Leerlauf nicht herunterfahren". Hierdurch wird verhindert, dass der Client bei Inaktivität automatisch heruntergefahren wird.
Navigieren Sie in 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 ESCalculatorHosted.dll ein, um die Assembly zum globalen Assemblycache (GAC) hinzuzufügen. Stellen Sie sicher, dass sich "Gacutil.exe" im Pfad befindet.
Geben Sie regsvcs.exe ESCalculatorHosted.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:ServiceModelHostedSample /contract:"ServiceModelHostedSample.ESCalculator,ICalculator" /hosting:complus /mex /verbose ein, um die Schnittstelle als von IIS (Internetinformationsdienste) gehosteten Dienst verfügbar zu machen. Stellen Sie sicher, dass sich "ComSvcConfig.exe" im Pfad befindet.
Um die Standardkonfiguration durch die benutzerdefinierte Konfiguration dieses Beispiels zu ersetzen, kopieren Sie die Datei "Service/application.config" in das Verzeichnis %ProgramFiles%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}\.
So führen Sie das Beispiel auf demselben Computer aus
Um die Anwendung und die Endpunkte zu starten, klicken Sie in der Managementkonsole "Komponentendienste" mit der rechten Maustaste auf "ServiceModelHostedSample" und dann auf "Start".
Prüfen Sie, ob Sie mit einem Browser auf die Dienste zugreifen können, indem Sie die folgende Adresse eingeben: https://localhost:8082/ServiceModelHostedSample. 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
Im 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
Kopieren Sie die Datei "ESCalculatorHosted.dll" aus dem Verzeichnis "\service\bin" und die Datei "CreateAppLeaveRunning.vbs" aus dem Dienstverzeichnis in ein Verzeichnis auf dem Dienstcomputer.
Navigieren Sie in 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.
Führen Sie das Skript "CreateAppLeaveRunning.vbs" aus, um die COM+-Anwendung mit der Einstellung "Bei Leerlauf nicht herunterfahren" zu erstellen.
Geben Sie gacutil.exe /i ESCalculatorHosted.dll ein, um die Assembly zum globalen Assemblycache (GAC) hinzuzufügen. Stellen Sie sicher, dass sich "Gacutil.exe" im Pfad befindet.
Geben Sie regsvcs.exe ESCalculatorHosted.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:ServiceModelHostedSample /contract:"ServiceModelHostedSample.ESCalculator,ICalculator" /hosting:complus /mex /verbose ein, um die Schnittstelle als von IIS gehosteten Dienst verfügbar zu machen. Stellen Sie sicher, dass sich "ComSvcConfig.exe" im Pfad befindet.
Um die Standardkonfiguration durch die benutzerdefinierte Konfiguration dieses Beispiels zu ersetzen, kopieren Sie die Datei "Service/application.config" in das Verzeichnis %ProgramFiles%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}\.
Ändern Sie in der Anwendungskonfigurationsdatei 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.
Um die Anwendung und die Endpunkte zu starten, klicken Sie in der Managementkonsole "Komponentendienste" mit der rechten Maustaste auf "ServiceModelHostedSample" und dann auf "Start".
Kopieren Sie die Clientprogrammdateien aus dem Ordner "\client\bin\" (unterhalb des sprachspezifischen Ordners) auf den Clientcomputer.
Wenn der Dienst nicht unter einem Domänenkonto ausgeführt wird, öffnen Sie die Konfigurationsdatei, und ändern Sie 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. Wenn der Dienst unter einem Domänenkonto ausgeführt wird, generieren Sie die Clientkonfiguration neu, indem Sie "Svcutil.exe" für den Dienst ausführen. Verwenden Sie die generierte Datei statt der Konfigurationsdatei im Beispiel. Die generierte Konfigurationsdatei verfügt über zusätzliche Identitätsinformationen (und enthält alle Einstellungen, die notwendig sind, um eine Verbindung zum Dienstendpunkt aufzubauen, auch wenn diese die Standardeinstellungen sind).
Testen Sie, ob Sie mit einem Browser vom Clientcomputer auf den Dienst zugreifen können.
Starten Sie auf dem Clientcomputer in einer Eingabeaufforderung die Datei "Client.exe".
So bereinigen Sie nach dem Beispiel
- Aus Sicherheitsgründen sollten Sie die ESCalculatorHosted-Komponente aus dem globalen Assemblycache entfernen, die Anwendung ServiceModelHostedSample COM+ löschen und das Anwendungsstammverzeichnis %PROGRAMFILES%\ComPlus Applications\{4cdcdb2c-0b19-4534-95cd-fbbff4d67dd9}\ entfernen, wenn Sie mit dem Beispiel fertig sind.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.