Como usar um WSDL

126

Eu preciso consumir um serviço da Web. Eles me enviaram o arquivo WSDL. O que devo fazer para adicioná-lo ao meu site e começar a usá-lo como proxy. (Se eu colocá-lo em um diretório virtual, ele poderá ser descoberto, mas ele me concede a conexão com o serviço web real?)

jmayor
fonte
9
Voto positivo porque é uma pergunta para a qual acho que outros usuários se beneficiariam de ver uma resposta. Eu estava procurando por esse problema exato e estou feliz por encontrá-lo aqui.
precisa

Respostas:

138

Gostaria de iniciar o Visual Studio, criar um projeto da Web (ou aplicativo de console - não importa).

Para o padrão .Net:

  1. Eu clicava com o botão direito do mouse no projeto e selecionava "Adicionar referência de serviço" no menu Adicionar contexto.
  2. Eu clicaria em Avançado e, em seguida, clique em Adicionar referência de serviço.
  3. Eu pegava o caminho completo do arquivo wsdl e colava na barra de endereço. Em seguida, dispare a seta (botão ir).
  4. Se houver um erro ao tentar carregar o arquivo, deve haver um URL quebrado e não resolvido que o arquivo precise resolver, conforme mostrado abaixo: insira a descrição da imagem aqui Consulte esta resposta para obter informações sobre como corrigir: Resposta do Stackoverflow para: Não é possível criar referência de serviço para arquivo wsdl

Se não houver erro, você deve simplesmente definir o NameSpace que deseja usar para acessar o serviço e ele será gerado para você.

Para .Net Core

  1. Eu clicava com o botão direito do mouse no projeto e selecionava Serviço Conectado no menu Adicionar contexto.
  2. Eu selecionaria o Microsoft WCF Web Service Reference Provider na lista.
  3. Pressionaria procurar e selecionava o arquivo wsdl imediatamente. Defina o namespace e estou pronto para prosseguir. Consulte o URL de correção do erro acima se encontrar algum erro.

Qualquer um dos métodos acima irá gerar um cliente WCF simples e muito básico para você usar. Você deve encontrar uma classe "YourservicenameClient" no código gerado.

Para fins de referência, o arquivo cs gerado pode ser encontrado no seu Obj / debug (ou release) / XsdGeneratedCode e você ainda pode encontrar as DLLs na pasta TempPE.

Os Serviços criados devem ter métodos para cada um dos métodos definidos no contrato WSDL.

Instancie o cliente e chame os métodos que deseja chamar - isso é tudo!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

Se você precisar especificar a URL remota (não usando a criada por padrão), poderá fazer isso facilmente no construtor do cliente proxy:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

onde configNameé o nome do nó de extremidade a ser usado (você usará todas as configurações, exceto a URL) e remoteURLé uma sequência que representa a URL à qual se conectar (em vez da que está contida na configuração).

marc_s
fonte
Isso funciona bem. Apenas uma pergunta, se eu tiver o arquivo wsdl na minha máquina, e adicionar a referência a este arquivo. Ao executar o URL, ele é o único que hospeda o serviço da Web ou preciso especificar o Binding e o EndPoint?
jmayor
1
Isso é com você - por padrão, o código criado para o proxy do cliente terá a URL contida no WSDL - se você precisar ir para outra URL, precisará especificá-lo.
marc_s
Por que isso é tão fácil? Não há um problema? : p Obrigado!
Odys
1
Como resposta aceita, seria bom se você também mencionasse como usar um WSDL hospedado na Web a partir de uma URL.
Caltor
Eu acho que estou bem perto de fazer isso funcionar. Eu tenho o serviço da Web instalado usando a ferramenta Adicionar referência de serviço. Eu sou capaz de instanciar o cliente, mas chamar os métodos é onde falha. O ponto final está usando uma implementação Java, e tudo o que posso ver é o XML. O método que estou tentando chamar está procurando um clientid e "outra coisa". Que outra coisa é uma classe. O que é intrigante. Posso colocar isso em um post abaixo, se isso ajudar, mas estou confuso.
Mappingman
45

No estúdio visual.

  • Crie ou abra um projeto.
  • Clique com o botão direito do mouse no projeto no Solution Explorer.
  • Selecione "Adicionar referência de serviço"
  • Cole o endereço com o WSDL que você recebeu.
  • Clique OK.

Se não houver erros, você poderá ver a referência de serviço no navegador de objetos e todos os métodos relacionados.

vidalsasoon
fonte
9
<3 Visual Studio .. Sim, é realmente muito simples :)
cwap
3
O OP não tem um endereço, mas um arquivo.
Henk Holterman
1
O provedor do serviço da Web pode ter desativado o WSDL (segurança por obscuridade); portanto, não há URL em que o WSDL possa ser acessado e a adição de uma referência da Web no VS não funcionará. No entanto, o provedor deseja que VOCÊ (quero dizer OP) saiba tudo o que você precisa saber sobre o contrato de serviço, por isso eles enviaram o arquivo WSDL. Agora, o OP precisa gerar o código proxy a partir dele, a questão é como.
azheglov
3
Digitando o caminho para o arquivo. O que faz você pensar que não funciona?
1926 John Saunders
1
Oi @vidalsasoon. Você poderia explicar brevemente como faço para usar essas classes que vejo no meu explorador de classes. ?
CalZone #
16

Use o utilitário WSDL.EXE para gerar um proxy de serviço da Web a partir do WSDL.

Você obterá um longo arquivo de origem C # que contém uma classe semelhante a esta:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

No seu código do cliente, consumidor de serviços da Web:

  1. instanciar o MyService.
  2. defina sua propriedade URL
  3. invocar métodos da Web
azheglov
fonte
5
Isso cria um "velho estilo" ASMX Webservice - esses são obsoletas - um deve usar WCF em vez hoje em dia
marc_s
7

Se você deseja adicionar referência wsdl no projeto .Net Core , não há opção "Adicionar referência da web".

Para adicionar a referência wsdl, vá para o Solution Explorer, clique com o botão direito do mouse no item de projeto References e clique na opção Add Connected Service .

insira a descrição da imagem aqui

Em seguida, clique em 'Microsoft WCF Web Service Reference':

insira a descrição da imagem aqui

Digite o caminho do arquivo na caixa de texto URI e importe o WSDL:

insira a descrição da imagem aqui

Ele irá gerar um cliente WCF simples e muito básico e você poderá usá-lo da seguinte forma:

YourServiceClient client = new YourServiceClient();
client.DoSomething();
Nedzad G
fonte
Esta extensão não aparece para mim.
Rafael Pizao