Diferença entre referência da web e referência de serviço?

132

Qual é a diferença entre referência da web e referência de serviço no WCF? Qual é preferível no WCF?

John Saunders
fonte
Veja também Channel Factories - stackoverflow.com/questions/1698275/…
Manish Jain 6/13
1
hmm, talvez selecione uma resposta? boa pergunta pelo caminho
Daniël Tulp

Respostas:

102

A resposta de baixo nível aqui é que uma Referência da Web criará uma classe de proxy do cliente que permitirá que seu código fale com um Serviço da Web descrito via WSDL e se comunique via SOAP ou HTTP GET (outros pôsteres indicam que é apenas ASMX, mas As referências da Web também podem conversar com Web Services baseados em Java, Python ou Ruby, desde que todos falem WSDL e estejam em conformidade com o padrão de interoperabilidade WS-I).

Uma Referência de Serviço criará uma classe de proxy do cliente que se comunica com um serviço baseado no WCF: independentemente de esse serviço WCF ser um Serviço da Web ou não.

Kevin Hoffman
fonte
1
+1 por acrescentar que qualquer serviço Web padrão com um WSDL formatado corretamente atende aos critérios
sidney.andrews
Então, posso adicionar uma referência de serviço a um serviço da Web baseado em java? Ainda faria sentido? desde que o Java não sabe nada sobre a pilha wcf ...
user20358
sim, você pode adicionar uma referência de serviço a um serviço da web java etc, se ele tiver um wsdl. A referência de serviço tratará como uma referência da Web "clássica" neste caso.
Brady Moritz
+1 por declarar que o Serviço da Web pode consumir serviços da Web descritos por WSDL, além do ASMX. Por uma questão de fato, eu tenho uma camada de negócios que tem uma referência na web e uma referência de serviço. A referência da Web consome um serviço da Web WSDL, enquanto a referência do serviço consome um serviço ASMX.
quer
67

Uma Referência da Web permite a comunicação com qualquer serviço com base em qualquer tecnologia que implemente o Perfil Básico WS-I 1.1 e expõe os metadados relevantes como WSDL. Internamente, ele usa a pilha de comunicação ASMX no lado do cliente.

Uma Referência de Serviço permite que você se comunique com qualquer serviço baseado em qualquer tecnologia que implemente qualquer um dos muitos protocolos suportados pelo WCF (incluindo, entre outros, o Perfil Básico WS-I). Internamente, ele usa a pilha de comunicação WCF no lado do cliente.

Observe que essas duas definições são bastante amplas e incluem serviços não escritos no .NET.

É perfeitamente possível (embora não recomendado) adicionar uma Referência da Web que aponte para um serviço WCF, desde que o ponto de extremidade do WCF use basicHttpBindingou alguma variante personalizada compatível.

Também é possível adicionar uma Referência de Serviço que aponte para um serviço ASMX. Ao escrever um novo código, você sempre deve usar uma Referência de Serviço simplesmente porque é mais flexível e à prova de futuro.

Christian Hayter
fonte
1
Alguém pode me ajudar a começar a consumir um serviço via Service Reference? Com o Web Reference, sempre pareço encontrar as funções principais em algum tipo de objeto de serviço. Com uma referência de serviço, nem tanto. Como exemplo, estou tentando usar o serviço de taxas da FedEx para obter preços para as várias opções de remessa da FedEx. Sei que há uma chamada getRates () em algum lugar, mas não consigo encontrá-la com uma Referência de Serviço.
Ben Mills
@ BenMills: Procure uma classe com um Clientsufixo.
Christian Hayter
17

A referência de serviço é a interface mais nova para adicionar referências a todos os tipos de serviços WCF (eles podem não ser serviços da web), enquanto a referência da Web se preocupa especificamente com as referências da Web ASMX.

Você pode acessar referências da web através das opções avançadas em adicionar referência de serviço (se bem me lembro).

Eu usaria referência de serviço porque, como eu o entendo, é o mecanismo mais novo dos dois.

DavidWhitney
fonte
8
Adicionar referência de serviço -> Avançado -> Adicionar referência da Web ... nada como soluções não intuitivas.
quer
7

As referências de serviço lidam com terminais e ligações, que são completamente configuráveis. Eles permitem que você aponte seu proxy de cliente para um WCF por meio de qualquer protocolo de transporte (HTTP, TCP, Memória Compartilhada, etc.)

Eles são projetados para trabalhar com o WCF.

Se você usa um WebProxy, está praticamente vinculando-se ao uso do WCF sobre HTTP

Brian Genisio
fonte
5

Outro ponto a ser levado em consideração é que a nova interface do usuário para Service Interface proporcionará muito mais flexibilidade sobre como você deseja criar sua classe de proxy. Por exemplo, ele permitirá que você mapeie contratos de dados para dlls existentes, se eles corresponderem (na verdade, esse é o comportamento padrão).

Wagner Silveira
fonte