Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O exemplo NamedPipeActivation demonstra a hospedagem de um serviço que usa o Serviço de Ativação de Processos do Windows (WAS) para ativar um serviço que se comunica por pipes nomeados. Este exemplo é baseado em Começar e requer o Windows Vista para funcionar.
Observação
O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.
Detalhes da amostra
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 Processos 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 do elemento de ponto de extremidade, binding conforme mostrado na configuração de exemplo a seguir.
Se você quiser usar uma ligação de pipe nomeado segura, 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 do 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 ponto de extremidade 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 de operação e as respostas 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.
Certifique-se de ter executado 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ó Microsoft .NET Framework 3.0 e verifique o recurso de ativação não-HTTP do Windows Communication Foundation .
Configure o Serviço de Ativação de Processos do Windows (WAS) para dar suporte à ativação de tubo nomeado.
Como uma conveniência, as duas etapas a seguir são implementadas em um arquivo em lotes chamado AddNetPipeSiteBinding.cmd localizado no diretório de exemplo.
Para suportar a ativação net.pipe, o site padrão deve primeiro ser vinculado ao protocolo net.pipe. Isso pode ser feito usando o appcmd.exe, que é instalado com o conjunto de ferramentas de gerenciamento do IIS 7.0. Em um prompt de comando elevado (administrador), execute o seguinte comando.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='*']Observação
Este comando é uma única linha de texto.
Este comando adiciona uma ligação net.pipe ao site Web padrão.
Embora todos os aplicativos dentro de um site compartilhem uma ligação net.pipe comum, cada aplicativo pode habilitar o suporte a net.pipe individualmente. Para habilitar net.pipe para o aplicativo /servicemodelsamples, execute o seguinte comando em um prompt de comando elevado.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.pipeObservação
Este comando é uma única linha de texto.
Este comando permite que o aplicativo /servicemodelsamples seja acessado usando ambos
http://localhost/servicemodelsamplesenet.tcp://localhost/servicemodelsamples.
Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
Remova o vínculo do site net.pipe que foi adicionado para este exemplo específico.
Como conveniência, as duas etapas a seguir são implementadas em um arquivo em lotes chamado RemoveNetPipeSiteBinding.cmd localizado no diretório de exemplo:
Remova net.tcp da lista de protocolos habilitados executando o seguinte comando em um prompt de comando elevado.
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:httpObservação
Este comando deve ser inserido como uma única linha de texto.
Remova a associação de site net.tcp executando o seguinte comando a partir de uma linha de comandos com privilégios elevados.
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.pipe',bindingInformation='*']Observação
Este comando deve ser digitado como uma única linha de texto.