NamedPipe-activering
Het voorbeeld NamedPipeActivation laat zien hoe u als host fungeert voor een service die gebruikmaakt van Windows Process Activation Service (WAS) om een service te activeren die communiceert via benoemde pijpen. Dit voorbeeld is gebaseerd op aan de slag en vereist dat Windows Vista wordt uitgevoerd.
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
Voorbeelddetails
Het voorbeeld bestaat uit een clientconsoleprogramma (.exe) en een servicebibliotheek (.dll) die worden gehost in een werkproces dat wordt geactiveerd door de Windows Process Activation Services (WAS). Clientactiviteit is zichtbaar in het consolevenster.
De service implementeert een contract dat een communicatiepatroon aanvraagantwoord definieert. Het contract wordt gedefinieerd door de ICalculator
interface, die wiskundige bewerkingen weergeeft (optellen, aftrekken, vermenigvuldigen en delen), zoals wordt weergegeven in de volgende voorbeeldcode.
[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);
}
De client maakt synchrone aanvragen voor een bepaalde wiskundige bewerking en de service-implementatie berekent en retourneert het juiste resultaat.
// 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;
}
}
In het voorbeeld wordt een gewijzigde netNamedPipeBinding
binding zonder beveiliging gebruikt. De binding wordt opgegeven in de configuratiebestanden voor de client en service. Het bindingstype voor de service wordt opgegeven in het kenmerk van binding
het eindpuntelement, zoals wordt weergegeven in de volgende voorbeeldconfiguratie.
Als u een beveiligde pijpbinding wilt gebruiken, wijzigt u de beveiligingsmodus van de server in de gewenste beveiligingsinstelling en voert u svcutil.exe opnieuw uit op de client om een bijgewerkt clientconfiguratiebestand te verkrijgen.
<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>
De eindpuntgegevens van de client worden geconfigureerd zoals wordt weergegeven in de volgende voorbeeldcode.
<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>
Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. Druk op Enter in het clientvenster om de client af te sluiten.
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.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat IIS 7.0 is geïnstalleerd. IIS 7.0 is vereist voor WAS-activering.
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Daarnaast moet u de WCF niet-HTTP-activeringsonderdelen installeren:
Kies Configuratiescherm in het menu Start.
Selecteer Programma's en onderdelen.
Klik op Windows-onderdelen in- of uitschakelen.
Vouw het knooppunt Microsoft .NET Framework 3.0 uit en controleer de functie Niet-HTTP-activering van Windows Communication Foundation.
Configureer de Windows Process Activation Service (WAS) ter ondersteuning van benoemde pijpactivering.
Als u wilt, worden de volgende twee stappen geïmplementeerd in een batchbestand met de naam AddNetPipeSiteBinding.cmd zich in de voorbeeldmap bevindt.
Ter ondersteuning van net.pipe-activering moet de standaardwebsite eerst worden gebonden aan het net.pipe-protocol. U kunt dit doen met behulp van appcmd.exe, die is geïnstalleerd met de IIS 7.0-beheerhulpprogramma'sset. Voer vanaf een opdrachtprompt met verhoogde bevoegdheid (administrator) de volgende opdracht uit.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='*']
Notitie
Deze opdracht is één regel tekst.
Met deze opdracht wordt een net.pipe-sitebinding toegevoegd aan de standaardwebsite.
Hoewel alle toepassingen binnen een site een gemeenschappelijke net.pipe-binding delen, kan elke toepassing ondersteuning voor net.pipe afzonderlijk inschakelen. Als u net.pipe wilt inschakelen voor de toepassing /servicemodelsamples, voert u de volgende opdracht uit vanaf een opdrachtprompt met verhoogde bevoegdheid.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipe
Notitie
Deze opdracht is één regel tekst.
Met deze opdracht kan de toepassing /servicemodelsamples worden geopend met beide
http://localhost/servicemodelsamples
ennet.tcp://localhost/servicemodelsamples
.
Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.
Verwijder de net.pipe-sitebinding die u voor dit voorbeeld hebt toegevoegd.
Als gemak worden de volgende twee stappen geïmplementeerd in een batchbestand met de naam RemoveNetPipeSiteBinding.cmd zich in de voorbeeldmap bevindt:
Verwijder net.tcp uit de lijst met ingeschakelde protocollen door de volgende opdracht uit te voeren vanaf een opdrachtprompt met verhoogde bevoegdheid.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http
Notitie
Deze opdracht moet worden ingevoerd als één regel tekst.
Verwijder de net.tcp-sitebinding door de volgende opdracht uit te voeren vanaf een opdrachtprompt met verhoogde bevoegdheid.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']
Notitie
Deze opdracht moet worden getypt als één regel tekst.