Crie um proxy de serviço da web no Visual Studio a partir de um arquivo WSDL

101

Meu aplicativo precisa se comunicar com um serviço da web que não tem uma definição WSDL online. Os desenvolvedores, entretanto, me forneceram um arquivo WSDL.

Com um WSDL público, o Visual Studio pode gerar esse código para mim usando o assistente de referência de serviço. Mas não parece funcionar sem um WSDL público.

Como faço para gerar o código para falar com este serviço da web usando este arquivo WSDL?

Anne
fonte

Respostas:

116

Tente usar WSDL.exe e, em seguida, incluir o arquivo gerado (.cs) em seu projeto.

Abra o prompt de comando do Visual Studio (em visual studio / tools no menu iniciar) e digite

>wsdl.exe [path To Your WSDL File]

Isso vai gerar um arquivo, que você copia / move e inclui em seu projeto. Esse arquivo contém uma classe que é um proxy para o seu serviço. Abra uma instância dessa classe, e ele terá uma propriedade de URL que você pode definir rapidamente e vários métodos que você pode chamar. Ele também irá gerar classes para todos / quaisquer objetos complexos passados ​​pela interface de serviço.

Andrew M
fonte
2
Obrigado! E você pode usar o parâmetro / o para o caminho do arquivo exportado. por exemplo,> wsdl.exe example.com/service.wsdl / o: C: \ Users \ X \ Desktop
gkonuralp
2
e opcionalmente adicionar um namespace manualmente, cobrindo todas as classes, para evitar conflito com arquivos semelhantes gerados.
Nuvens Azuis
138

Usar WSDL.exe não funcionou para mim (gerou um erro sobre um tipo ausente), mas consegui clicar com o botão direito do mouse em meu projeto no VS e selecionar "Adicionar Referência de Serviço". Eu digitei o caminho para o arquivo wsdl no campo Endereço e apertei "Ir". Isso parecia ser capaz de encontrar todos os tipos adequados e adicionar as classes diretamente ao meu projeto.

jeffaudio
fonte
3
Enfrentando o mesmo cenário e sua sugestão me salvou de muita frustração e provavelmente alguns cabelos. Uma reputação bem merecida foi dada a você. (Como resultado indireto, você obteve +100 em todos os sites :))
Shadow Wizard is Ear For You
Tentei fazer isso, o arquivo é importado, mas não consigo ver no meu código as classes
guiomie
1
Tentei esse método usando o MSVC 2015, mas ele se recusou a processar o arquivo wsdl usando o URL. Então, usei o método descrito por Andrew M.
Hermann
1
Tentei fazer isso em um pc de desenvolvimento que não tem permissão para acessar o serviço da web. Apesar de o arquivo .wsdl estar em local, ele tentou conectar o serviço quando pressionei "Ir". Portanto, não fui capaz de adicionar referência. Nessa situação, acho que a solução de Andrew M. deve ser preferida. Funcionou bem.
gkonuralp
@jeffaudio estou enfrentando um problema semelhante. Consigo adicionar referência de serviço para projeto da web, mas usando wsdl.exe, não consigo gerar o arquivo proxy. alguma sugestão ..???
prakash r
15

Na observação lateral: se você tiver todos os arquivos localmente (não apenas o arquivo wsdl, mas também os arquivos xsd), pode invocar o wsdl.exe desta maneira:

wsdl.exe [path to your wsdl file] [paths to xsd files imported by wsdl]

Dessa forma, o wsdl.exe pode resolver todas as dependências localmente e gerar a classe de proxy corretamente.

Talvez isso economize algum tempo - ele resolve o erro de "tipo ausente" quando o serviço não está disponível online.

Jarek Mazur
fonte
3

Experimente a ferramenta de classe WSDL To Proxy fornecida com o .NET Framework SDK. Nunca usei antes, mas certamente é o que você precisa.

Steve Danner
fonte
2

Existe um Microsoft Doc para criar seu WCFproxy a partir da linha de comando.

Você pode encontrar sua cópia local de wsdl.exeem um local semelhante a este: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools( Saiba mais aqui )

No final, você Commanddeve ser semelhante a este:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe"
 /language:CS /n:"My.Namespace" https://www.example.com/service/wsdl
Serj Sagan
fonte
1

salve o arquivo em seu disco e use o seguinte como URL:

file://your_path/your_file.wsdl
Evan Camilleri
fonte
Este é o único que funcionou para mim, pois o arquivo em questão precisava ser baixado após a autenticação primeiro. Obrigado!
Kevin Radcliffe
-1

Como o verdadeiro URL de vinculação para o serviço da web está localizado no arquivo, você pode seguir estas etapas simples em sua máquina local:

1) Salve o arquivo em seu computador local, por exemplo:

C:\Documents and Settings\[user]\Desktop\Webservice1.asmx

2) No Visual Studio, clique com o botão direito em seu projeto> Escolha Adicionar Referência da Web, uma caixa de diálogo será aberta.

3) Na caixa URL, copie o local do arquivo local acima de C: \ Documents and Settings [usuário] \ Desktop \ Webservice1.asmx, clique em Avançar

4) Agora você verá as funções aparecerem, escolha seu nome para a referência, clique em adicionar referência

5) Você terminou! você pode começar a usá-lo como um namespace em seu aplicativo, não se preocupe se usou um arquivo local, porque de qualquer forma a verdadeira URL do serviço está localizada no arquivo na seção Binding

Israel Margulies
fonte
2
Isso já foi sugerido nesta resposta existente, por que repetir?
Shadow Wizard is Ear For You
Por que o arquivo asmx quando a questão é sobre wsdl?
Nuvens Azuis