Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O exemplo NamedPipeActivation demonstra a hospedagem de um serviço que usa o Was (Serviço de Ativação de Processo do Windows) para ativar um serviço que se comunica por pipes nomeados. Este exemplo é baseado em Primeiros Passos e requer o Windows Vista para ser executado.
Observação
O procedimento de configuração e as instruções de build para este exemplo estão localizados no final deste tópico.
Detalhes de exemplo
O exemplo consiste em um programa de console do cliente (.exe) e uma biblioteca de serviços (.dll) hospedada em um processo de trabalho ativado pelos Serviços de Ativação de Processo do Windows (WAS). A atividade do cliente é visível na janela do console.
O serviço implementa um contrato que define um padrão de comunicação solicitação-resposta. O contrato é definido pela ICalculator interface, que expõe operações matemáticas (Adicionar, Subtrair, Multiplicar e Dividir), conforme mostrado no código de exemplo a seguir.
[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);
}
O cliente faz solicitações síncronas para uma determinada operação matemática e a implementação do serviço calcula e retorna o resultado apropriado.
// 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;
}
}
O exemplo usa uma associação modificada netNamedPipeBinding sem segurança. A associação é especificada nos arquivos de configuração para o cliente e o serviço. O tipo de associação para o serviço é especificado no atributo binding do elemento de ponto de extremidade, conforme mostrado na configuração de exemplo a seguir.
Se você quiser usar uma associação de pipe nomeada protegida, altere o modo de segurança do servidor para a configuração de segurança desejada e execute svcutil.exe novamente no cliente para obter um arquivo de configuração de cliente atualizado.
<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>
As informações do endpoint do cliente são configuradas conforme mostrado no código de exemplo a seguir.
<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>
Quando você executa o exemplo, as solicitações e respostas da operação são exibidas na janela do console do cliente. Pressione ENTER na janela do cliente para desligar o cliente.
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.
Para configurar, compilar e executar o exemplo
Verifique se o IIS 7.0 está instalado. O IIS 7.0 é necessário para a ativação do WAS.
Verifique se você executou o procedimento de instalaçãoOne-Time para os exemplos do Windows Communication Foundation.
Além disso, você deve instalar os componentes de ativação não HTTP do WCF:
No menu Iniciar , escolha Painel de Controle.
Selecione Programas e Recursos.
Clique em Ativar ou Desativar Componentes do Windows.
Expanda o nó do Microsoft .NET Framework 3.0 e marque o recurso de Ativação não HTTP do Windows Communication Foundation.
Configure o WAS (Serviço de Ativação de Processo do Windows) para permitir a ativação de pipe nomeado.
Como conveniência, as duas etapas a seguir são implementadas em um arquivo em lote chamado AddNetPipeSiteBinding.cmd localizado no diretório de exemplo.
Para dar suporte à ativação net.pipe, o site padrão deve primeiro ser associado ao protocolo net.pipe. Isso pode ser feito usando appcmd.exe, que é instalado com o conjunto de ferramentas de gerenciamento do IIS 7.0. Em um prompt de comando com privilégios elevados (administrador), execute o comando a seguir.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='*']Observação
Esse comando é uma única linha de texto.
Esse comando adiciona uma vinculação net.pipe ao site padrão.
Embora todos os aplicativos em um site compartilhem uma associação comum net.pipe, cada aplicativo pode habilitar o suporte net.pipe individualmente. Para habilitar net.pipe para o aplicativo /servicemodelsamples, execute o comando a seguir em um prompt de comando com privilégios elevados.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipeObservação
Esse comando é uma única linha de texto.
Esse comando permite que o aplicativo /servicemodelsamples seja acessado usando ambos
http://localhost/servicemodelsamplesenet.tcp://localhost/servicemodelsamples.
Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.
Remova a associação de site net.pipe adicionada para este exemplo.
Como conveniência, as duas etapas a seguir são implementadas em um arquivo em lote chamado RemoveNetPipeSiteBinding.cmd localizado no diretório de exemplo:
Remova net.tcp da lista de protocolos habilitados executando o comando a seguir de um prompt de comando com privilégios elevados.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:httpObservação
Esse comando deve ser inserido como uma única linha de texto.
Para remover a associação de site do net.tcp, execute o comando a seguir de um prompt de comando com privilégios elevados.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']Observação
Esse comando deve ser digitado como uma única linha de texto.