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.
Das NamedPipeActivation-Beispiel veranschaulicht das Hosten eines Diensts, der windows Process Activation Service (WAS) verwendet, um einen Dienst zu aktivieren, der über benannte Rohre kommuniziert. Dieses Beispiel basiert auf den Ersten Schritten und erfordert, dass Windows Vista ausgeführt wird.
Hinweis
Die Einrichtungsschritte und Bauanleitungen für dieses Beispiel finden Sie am Ende dieses Abschnitts.
Beispieldetails
Das Beispiel besteht aus einem Clientkonsolenprogramm (.exe) und einer Dienstbibliothek (.dll), die in einem von den Windows-Prozessaktivierungsdienste (WAS) aktivierten Arbeitsprozess gehostet wird. Clientaktivitäten sind im Konsolenfenster sichtbar.
Der Dienst implementiert einen Vertrag, der ein Kommunikationsmuster für die Anforderungsantwort definiert. Der Vertrag wird durch die ICalculator Schnittstelle definiert, die mathematische Operationen (Add, 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 sendet synchrone Anforderungen an einen bestimmten mathematischen Vorgang, und die Dienstimplementierung berechnet und 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 geänderte netNamedPipeBinding Bindung ohne Sicherheit verwendet. Die Bindung wird in den Konfigurationsdateien für den Client und dienst angegeben. Der Bindungstyp für den Dienst wird im Attribut des Endpunktelements binding angegeben, wie in der folgenden Beispielkonfiguration dargestellt.
Wenn Sie eine gesicherte benannte Pipebindung verwenden möchten, ändern Sie den Sicherheitsmodus des Servers in die gewünschte Sicherheitseinstellung, und führen Sie svcutil.exe erneut auf dem Client aus, um eine aktualisierte Clientkonfigurationsdatei abzurufen.
<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 exposed 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 Endpunktinformationen des Clients werden 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 Vorgangsanforderungen und -antworten 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 können Sie das Beispiel einrichten, erstellen und ausführen
Stellen Sie sicher, dass IIS 7.0 installiert ist. IIS 7.0 ist für die WAS-Aktivierung erforderlich.
Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispiele ausgeführt haben.
Darüber hinaus müssen Sie die NICHT-HTTP-Aktivierungskomponenten des WCF installieren:
Wählen Sie im Startmenü die Systemsteuerung aus.
Wählen Sie "Programme und Features" aus.
Klicken Sie auf "Windows-Komponenten aktivieren" oder "Deaktivieren".
Erweitern Sie den Knoten Microsoft .NET Framework 3.0, und aktivieren Sie die Funktion Windows Communication Foundation-Nicht-HTTP-Aktivierung.
Konfigurieren Sie den Windows-Prozessaktivierungsdienst (WAS), um die Aktivierung von benannten Pipes zu unterstützen.
Zur Vereinfachung werden die folgenden beiden Schritte in einer Batchdatei mit dem Namen 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 sein. Dies kann mithilfe von appcmd.exeerfolgen, die 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='*']Hinweis
Dieser Befehl ist eine einzelne Textzeile.
Mit diesem Befehl wird der Standardwebsite eine Net.pipe-Websitebindung hinzugefügt.
Obwohl alle Anwendungen innerhalb einer Website eine gemeinsame Net.pipe-Bindung gemeinsam nutzen, kann jede Anwendung die Net.pipe-Unterstützung einzeln aktivieren. Um net.pipe für die Anwendung /servicemodelsamples zu aktivieren, führen Sie den folgenden Befehl in einer Eingabeaufforderung mit erweiterten Berechtigungen (Administrator) aus.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipeHinweis
Dieser Befehl ist eine einzelne Textzeile.
Dieser Befehl ermöglicht den Zugriff auf die /servicemodelsamples-Anwendung mit beiden
http://localhost/servicemodelsamplesundnet.tcp://localhost/servicemodelsamples.
Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.
Entfernen Sie die Net.pipe-Site-Bindung, die Sie für dieses Beispiel hinzugefügt haben.
Aus Gründen der Einfachheit werden die folgenden beiden Schritte in einer Batchdatei, genannt RemoveNetPipeSiteBinding.cmd, implementiert, die sich im Beispielordner befindet:
Entfernen Sie net.tcp aus der Liste der aktivierten Protokolle, indem Sie den folgenden Befehl an einer Eingabeaufforderung mit erhöhten Rechten ausführen.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:httpHinweis
Dieser Befehl muss als einzelne Textzeile eingegeben werden.
Entfernen Sie die net.tcp-Sitebindung, indem Sie den folgenden Befehl an einer Eingabeaufforderung mit erweiterten Berechtigungen ausführen.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']Hinweis
Dieser Befehl muss als einzelne Textzeile eingegeben werden.