Usuário com melhor resposta
Compatibilidade entre versões - wsHttpBinding e basicHttpBinding

Pergunta
-
Verifiquei que para manter a compatibilidade com a versão 2.0 do framework preciso utilizar o basicHttpBinding, mas não posso para um serviço disponibilizar tanto o basicHttpBinding quanto o wsHttpBinding?
Gostaria de disponibilizar um binding especifico para cada versão, tentei a configuração abaixo mas não funciona:
<system.serviceModel> <services> <service name="Servicos.SvcArquivo" behaviorConfiguration="MetadataBehavior"> <host> <baseAddresses> <add baseAddress="http://localhost/Servicos"/> </baseAddresses> </host> <endpoint address="2.0" binding="basicHttpBinding" contract="Servicos.Contratos.ISvcArquivo" /> <endpoint address="3.5" binding="wsHttpBinding" contract="Servicos.Contratos.ISvcArquivo" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="MetadataBehavior"> <serviceMetadata httpGetEnabled="True" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
Respostas
-
Boas Leandro,
Quando você referencia na aplicação cliente um serviço WCF que possui 2 endereços, então você precisa trabalhar com o proxy de forma diferente, ou seja, você não pode mais utilizar o construtor do proxy que não aceita parâmetros. Repare que no arquivo de configuração, há dos dois enpoints, e cada um dele recebe um nome:
<client>
<endpoint address="http://localhost:8787/Servicos/2.0" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IContrato" contract="IContrato"
name="BasicHttpBinding_IContrato" />
<endpoint address="http://localhost:8787/Servicos/3.5" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IContrato" contract="IContrato"
name="WSHttpBinding_IContrato">
<identity>
<userPrincipalName value="IsraelAeceNB1\Israel Aece" />
</identity>
</endpoint>
</client>
Sendo assim, você precisa especificar o nome do endpoint que o proxy deve utilizar para invocar o serviço:
using (ContratoClient p = new ContratoClient("WSHttpBinding_IContrato"))
{
Console.WriteLine(p.Ping("x"));
}
http://www.israelaece.com- Sugerido como Resposta Israel AeceModerator quarta-feira, 7 de abril de 2010 13:56
- Marcado como Resposta Leandro Escaldelai segunda-feira, 12 de abril de 2010 13:14
Todas as Respostas
-
-
Quando eu procuro pelo caminho http://localhost/Servicos/3.5 ele não encontra nenhuma referencia dando erro 404.
Se utilizo o comando Discover -> Services in Solution aparece apenas o serviço gerado pelo mex.
Se eu incluo este serviço e executo a aplicação ocorre o erro:
Não foi possível localizar o elemento de ponto de extremidade com nome '3.5' e contrato 'SvcArquivo.ISvcArquivo' na seção de configuração do ServiceModel cliente. Isso pode ter ocorrido devido à falta de um arquivo de configuração para o seu aplicativo ou porque nenhum elemento de ponto de extremidade correspondendo a este nome pôde ser encontrado no elemento cliente.
-
Boas Leandro,
Quando você referencia na aplicação cliente um serviço WCF que possui 2 endereços, então você precisa trabalhar com o proxy de forma diferente, ou seja, você não pode mais utilizar o construtor do proxy que não aceita parâmetros. Repare que no arquivo de configuração, há dos dois enpoints, e cada um dele recebe um nome:
<client>
<endpoint address="http://localhost:8787/Servicos/2.0" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IContrato" contract="IContrato"
name="BasicHttpBinding_IContrato" />
<endpoint address="http://localhost:8787/Servicos/3.5" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IContrato" contract="IContrato"
name="WSHttpBinding_IContrato">
<identity>
<userPrincipalName value="IsraelAeceNB1\Israel Aece" />
</identity>
</endpoint>
</client>
Sendo assim, você precisa especificar o nome do endpoint que o proxy deve utilizar para invocar o serviço:
using (ContratoClient p = new ContratoClient("WSHttpBinding_IContrato"))
{
Console.WriteLine(p.Ping("x"));
}
http://www.israelaece.com- Sugerido como Resposta Israel AeceModerator quarta-feira, 7 de abril de 2010 13:56
- Marcado como Resposta Leandro Escaldelai segunda-feira, 12 de abril de 2010 13:14