NamedPipe-Aktivierung
In diesem Beispiel wird das Hosten eines Diensts veranschaulicht, der Windows Process Activation Services (WAS) zum Aktivieren eines Diensts verwendet, der über benannte Pipes kommuniziert. Dieses Beispiel basiert auf dem Beispiel 'Erste Schritte' und benötigt Windows Vista für die Ausführung.
Tipp
Die Setupprozedur und die Erstellungsanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
Das Beispiel besteht aus einem Clientkonsolenprogramm (.exe) und einer in einem von Windows Process Activation Services (WAS) aktivierten Workerprozess gehosteten Dienstbibliothek (.dll). Die Clientaktivität ist im Konsolenfenster sichtbar.
Der Dienst implementiert einen Vertrag, der ein Anforderungs-Antwort-Kommunikationsmuster definiert. Der Vertrag wird von der ICalculator
-Schnittstelle definiert, die mathematische Operationen (Addieren, Subtrahieren, Multiplizieren und Dividieren) verfügbar macht, wie im folgenden Beispielcode dargestellt.
[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 stellt synchrone Anforderungen an eine gegebene mathematische Operation, und die Dienstimplementierung gibt das entsprechende Ergebnis zurück.
// Service class that implements the service contract.
public class CalculatorService : 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;
}
}
Im Beispiel wird eine modifizierte netNamedPipeBinding-Bindung ohne Sicherheit verwendet. Die Bindung wird in den Konfigurationsdateien für den Client und den Dienst angegeben. Der Bindungstyp für den Dienst wird im binding-Attribut des Endpunktelements angegeben (siehe folgende Beispielkonfiguration).
Wenn Sie eine gesicherte benannte Pipe-Bindung verwenden möchten, ändern Sie den Sicherheitsmodus des Servers in die gewünschte Sicherheitseinstellung, und führen Sie auf dem Client "svcutil.exe" erneut aus, um eine aktualisierte Clientkonfigurationsdatei zu erhalten.
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by host: net.pipe://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="netNamedPipeBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- the mex endpoint is explosed at net.pipe://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexNamedPipeBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<netNamedPipeBinding>
<binding name="Binding1" >
<security mode = "None">
</security>
</binding >
</netNamedPipeBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Die Endpunktinformation des Clients wird wie im folgenden Beispielcode dargestellt konfiguriert.
<system.serviceModel>
<client>
<endpoint name=""
address="net.pipe://localhost/servicemodelsamples/service.svc"
binding="netNamedPipeBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<!-- Following is the expanded configuration section for a NetNamedPipeBinding.
Each property is configured with the default value. -->
<netNamedPipeBinding>
<binding name="Binding1"
maxBufferSize="65536"
maxConnections="10">
<security mode = "None">
</security>
</binding >
</netNamedPipeBinding>
</bindings>
</system.serviceModel>
Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. 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, erstellen es und führen es aus
Stellen Sie sicher, dass Sie Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.
Außerdem müssen Sie die WCF-Aktivierungskomponenten für andere Protokolle als HTTP installieren:
- Aktivieren Sie über das Menü Start die Systemsteuerung.
- Wählen Sie Programme und Funktionen aus.
- Klicken Sie auf Windows-Komponenten aktivieren oder deaktivieren.
- Erweitern Sie den Knoten Microsoft .NET Framework 3.0, und aktivieren Sie das Feature Windows Communication Foundation-Nicht-HTTP-Aktivierung.
Konfigurieren Sie den Windows Process Activation Service (WAS), um die Aktivierung benannter Pipes zu unterstützen.
Zur Vereinfachung sind die folgenden beiden Schritte in der Batchdatei "AddNetPipeSiteBinding.cmd" implementiert, die sich im Beispielverzeichnis befindet.
Zur Unterstützung der net.pipe-Aktivierung muss die Standardwebsite zuerst an das net.pipe-Protokoll gebunden werden. Sie können hierzu das Tool "appcmd.exe" verwenden, das mit dem IIS 7.0-Verwaltungstoolset installiert wird. Führen Sie an einer Eingabeaufforderung auf höherer Ebene (Administrator) den folgenden Befehl aus:
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='*']
Tipp
Dieser Befehl ist eine einzelne Textzeile.
Dieser Befehl fügt der Standardwebsite eine net.pipe-Sitebindung hinzu.
Alle Anwendungen innerhalb einer Site nutzen zwar eine gemeinsame net.pipe-Bindung, aber jede Anwendung kann die net.pipe-Unterstützung unabhängig von den anderen Anwendungen aktivieren. Um "net.pipe" für die Anwendung "/servicemodelsamples" zu aktivieren, führen Sie den folgenden Befehl in einer Eingabeaufforderung auf höherer Ebene (Administrator) aus:
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipe
Tipp
Dieser Befehl ist eine einzelne Textzeile.
Mit diesem Befehl wird die Anwendung "/servicemodelsamples" so konfiguriert, dass sowohl über https://localhost//servicemodelsamples als auch über net.tcp://localhost//servicemodelsamples darauf zugegriffen werden kann.
Zum Erstellen der C#- oder Visual Basic .NET-Version der Projektmappe folgen Sie den unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
Entfernen Sie die net.pipe-Sitebindung, die für dieses Beispiel hinzugefügt wurde.
Zur Vereinfachung sind die folgenden beiden Schritte in einer Batchdatei namens "RemoveNetPipeSiteBinding.cmd" implementiert, die sich im Beispielverzeichnis befindet.
Entfernen Sie "net.tcp" aus der Liste der aktivierten Protokolle, indem Sie den folgenden Befehl an einer Eingabeaufforderung auf höherer Ebene (Administrator) ausführen:
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http
Tipp
Dieser Befehl muss als eine Textzeile eingegeben werden.
Entfernen Sie die net.tcp-Sitebindung, indem Sie den folgenden Befehl in einer Eingabeaufforderung auf höher Ebene ausführen:
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']
Tipp
Dieser Befehl muss als eine Textzeile eingegeben werden.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.