Referência da web x referência de serviço

110

Acabei de bater em uma enorme parede de tijolos com o Paypal. Eu criei um projeto C # regular para criar algumas classes de wrapper usando seu WSDL.

Se você criar um projeto não-web, a única opção que terá para adicionar um wsdl é uma referência de serviço web. E isso cria o mesmo conjunto de classes de proxy que uma referência da Web faria, mas não realmente ... adiciona mais coisas que nem mesmo os caras do PayPal estão cientes.

Fiquei o tempo todo procurando a Interface certa nessa lista de classes de proxy para usar como serviço (SoapBinding) e PayPalAPIAASoapBindingnão estava lá, ficava contando ao nosso ponto de contato do PayPal.

Só consegui ver as 2 interfaces a seguir que me pareceram o que eu precisava usar, pois não vi uma PayPalAPIAASoapBindingque PODE ver em uma referência de serviço baseada na Web:

PayPalAPIAAInterfaceClient
PayPalAPIInterfaceClient 

Então eu descobri, oh, provavelmente eu criei uma Referência de serviço versus uma referência da Web, cuja referência da Web é uma opção em um projeto da Web. Mas eu não quero minha referência de serviço fortemente associada ao meu projeto da web. É por isso que criei o Projeto C #.

Então, o que diabos é uma referência de serviço vs. referência da Web? E como vou separar isso em outro projeto se a Referência de Serviço vai me lançar um loop e me dar um conjunto de interfaces diferentes do que uma Referência da Web faria?

Além disso, para tornar as coisas ainda MAIS confusas, o VS 2008 tem um projeto de Aplicativo de Serviço da Web.

Então, o que devo usar? Estamos usando o framework .NET 3.5 e estamos não pronto para passar para WCF . Portanto, ainda posso usar a nova referência de serviço, mesmo se não estiver usando o WCF ou o quê? SE você estiver usando o .NET 3.5 e ainda não o WCF e ainda quiser fazer serviços da Web básicos, ainda vai pela rota de referência de serviço e simplesmente não usa a estrutura do WCF? O que significa que ainda pode ser usado como um .NET 2.0 Web Reference, só que você terá uma geração totalmente diferente do WSDL?

PositiveGuy
fonte
2
8 anos depois e ainda relevante.
Mike Devenney

Respostas:

213

Adicionar Referência da Web é a tecnologia obsoleta ASP.NET webservices (ASMX) (usando apenas o XmlSerializer para suas coisas) - se você fizer isso, obterá um cliente ASMX para um serviço da Web ASMX. Você pode fazer isso em praticamente qualquer projeto (Web App, Web Site, Console App, Winforms - você escolhe).

Adicionar Referência de Serviço é a nova maneira de fazer isso, adicionando uma referência de serviço WCF, o que lhe dá um modelo de serviço muito mais avançado e flexível do que apenas o antigo ASMX.

Já que você não está pronto para mudar para o WCF, você ainda pode adicionar a referência da web no estilo antigo, se realmente precisar: quando você fizer um "Adicionar Referência de Serviço", na caixa de diálogo que aparece, clique em [Avançado ] botão no canto esquerdo do botão:

texto alternativo

e na próxima caixa de diálogo que aparecer, selecione o botão [Adicionar referência da Web] na parte inferior.

marc_s
fonte
6
Quão estúpido é a MS esconder isso em uma caixa de diálogo WCF! Nem faz sentido com o posicionamento aqui
PositiveGuy
9
@coffeeaddict: bem, acho que o MS está tentando sutilmente convencer você a usar o WCF por padrão - e apenas o ASMX antigo se você estiver realmente determinado :-)
marc_s
27
Se você usar Alt + PrtScn, você pode tirar uma foto instantânea apenas da janela ativa atual, dessa forma, você não terá que cortar manualmente apenas o que deseja que seja mostrado: o)
Ernest
Isso exigirá .NET 2.0 também no computador? Ou o .NET 4.0 será capaz de lidar com a tecnologia de "Referência da Web" baseada no .NET 2.0? Quero saber porque estou implantando um serviço da web SOAP como "Referência da Web" em um aplicativo .NET 4.0.
Usuário de computador
1
@sparkyShorts: sim.
marc_s
9

Se eu entendi sua pergunta direito:

Para adicionar uma referência de serviço da Web .net 2.0 em vez de uma referência de serviço WCF, clique com o botão direito do mouse em seu projeto e clique em 'Adicionar referência de serviço'.

Em seguida, clique em "Avançado .." no canto inferior esquerdo da caixa de diálogo.

Em seguida, clique em "Adicionar Referência da Web .." na parte inferior esquerda da próxima caixa de diálogo.

Agora você pode adicionar uma referência da web SOAP regular como está procurando.

alce
fonte
Isso exigirá .NET 2.0 também no computador? Ou o .NET 4.0 será capaz de lidar com a tecnologia de "Referência da Web" baseada no .NET 2.0? Quero saber porque estou implantando um serviço da web SOAP como "Referência da Web" em um aplicativo .NET 4.0.
Usuário de computador
4

Adicionar uma referência de serviço permite criar um cliente WCF, que pode ser usado para se comunicar com um serviço da web regular, desde que você use a ligação apropriada. Adicionar uma referência da web permitirá que você crie apenas uma referência de serviço da web (ou seja, SOAP).

Se você tem certeza absoluta de que não está pronto para o WCF (realmente não sei por quê), você deve criar uma referência de serviço da web regular.

Otávio Décio
fonte
3
Porque o WCF NÃO é fácil para iniciantes. E, além disso, meu chefe não me deixa mudar para isso é o verdadeiro motivo. É código e executado aqui. Quando você tem essa situação, nada posso fazer sobre isso, bud.
PositiveGuy
7
@coffeeaddict Acho que você e seu chefe estão mal informados. Ambos os tipos de referências criarão uma classe que fornece métodos para chamar as operações de serviço. Como é relevante que a classe criada por uma referência de "serviço" herde de uma classe base que está em uma biblioteca que a Microsoft considera ser parte de alguma tecnologia que ela chama de WCF?
Daniel Pratt
1
Isso exigirá .NET 2.0 também no computador? Ou o .NET 4.0 será capaz de lidar com a tecnologia de "Referência da Web" baseada no .NET 2.0? Quero saber porque estou implantando um serviço da web SOAP como "Referência da Web" em um aplicativo .NET 4.0.
Usuário de computador
3

No final, ambos fazem a mesma coisa. Existem algumas diferenças no código: Web Services não adiciona um namespace Root do projeto, mas Service Reference adiciona classes de serviço ao namespace do projeto. A ServiceSoapClientclasse recebe uma nomenclatura diferente, o que não é importante. Ao trabalhar com o TFS, prefiro usar a Referência de serviço porque funciona melhor com o controle de origem. Ambos trabalham com protocolos SOAP.

Acho melhor usar a Referência de Serviço porque ela é nova e, portanto, terá uma manutenção melhor.

user3628475
fonte