Como gerar referência de serviço apenas com arquivo wsdl físico

123

Eu venho criando e consumindo serviços da web há anos e sempre pude usar o Visual Studio para criar uma referência de serviço do cliente. Eu tenho um serviço de terceiros com o qual preciso trabalhar e eles se recusam a abrir a segurança para poder ver o wsdl e fazer a referência do serviço. É um serviço público, portanto não vejo a necessidade desse nível de segurança, mas é o que é.

Sei que essa é uma pergunta do n00b e tenho vergonha de fazer isso, mas como faço para criar as informações de referência de serviço equivalentes no meu cliente quando tudo o que tenho disponível para mim é uma cópia física do wsdl que o cliente me enviou? O web.config muda, a camada de objeto sobre os dados SOAP, etc. Assim como em uma referência de serviço automatizada, só quero abrir uma conexão com o serviço e começar a usá-la com os objetos definidos.

O serviço de terceiros não é o WCF até onde eu sei, mas é SOAP. Estou usando o VS 2010 btw. Agradecemos antecipadamente, Ken

kfoster
fonte

Respostas:

180

Este pode ser o método mais fácil

  • Clique com o botão direito do mouse no projeto e selecione "Adicionar referência de serviço ..."
  • Na caixa Endereço :, digite o caminho físico (C: \ test \ project ....) do wsdl baixado / modificado.
  • Hit Go
Formiga Radha
fonte
11
Se você usar "Copiar como caminho", retire as aspas.
O. Jones
Ao salvar o wsdl para repassar para outra pessoa, a "visualização de código-fonte" do wsdl do serviço da web no chrome me deu um wsdl funcional, enquanto o IE11 não. YMMV.
archangel76
68

Existem duas maneiras de fazer isso. Você pode usar o IDE para gerar um WSDL ou fazê-lo através da linha de comando.

1. Para criá-lo via IDE:

No painel do Solution Explorer, clique com o botão direito do mouse no projeto ao qual você deseja adicionar o Serviço:

insira a descrição da imagem aqui

Em seguida, você pode inserir o caminho para o seu serviço WSDL e pressionar go:

insira a descrição da imagem aqui

2. Para criá-lo através da linha de comando:

Abra um prompt de comando do VS 2010 (Programas -> Visual Studio 2010 -> Visual Studio Tools)
Em seguida, execute:

WSDL /verbose C:\path\to\wsdl

O WSDL.exe produzirá um arquivo .cs para seu consumo.

Se você tiver outras dependências que você recebeu com o arquivo, como xsd, adicione-as à lista de argumentos:

WSDL /verbose C:\path\to\wsdl C:\path\to\some\xsd C:\path\to\some\xsd

Se você precisar de saída VB, use /language:VBalém do /verbose.

Lynn Crumbling
fonte
Recebo 'Não é possível importar a ligação' blah 'do namespace' blahURL 'e Não é possível importar a operação' SomeRequest '. O elemento' xxx 'está ausente. Isso significa que eles precisam me fornecer mais arquivos de suporte ou que eles têm a segurança tão trancada que eu não posso fazer nada?
Kfoster # 3/12
Certamente parece que você está perdendo dependências. Abra o WSDL e olhe para o topo. Se você vir linhas que contêm um importseguido por um schemaLocation que aponta para um caminho xsd, você precisará desses arquivos xsd também.
Lynn desintegração
Obrigado pela resposta. Eu tenho um e-mail excelente com o cliente para ver se consigo as importações necessárias de xsd. É tão frustrante que, quando bem feito, basta colocar uma URL na caixa de diálogo ServiceReference, apertar um botão e viola! Estou a cerca de 3 linhas de código de chamar um método de serviço. Todo o processo leva cerca de 5 minutos. Mas trabalho com esse cliente há semanas e não cheguei aonde tudo, porque o pessoal de segurança não abre acesso a nenhuma definição de serviço via web.
kfoster
Isso é difícil. Atualmente, estou esperando uma conexão VPN por um projeto, eu mesmo. Felizmente, eles me deram o wsdl e os documentos xsd que o acompanhavam antes do tempo. Então você encontrou essas importações no wsdl?
Lynn desintegração
Sim. Acontece que, para 4 serviços, eles me deram wsdl para 2 deles e xsd para os outros 2, portanto não há um conjunto completo de arquivos para nenhum dos serviços. Mas finalmente consegui xsd e consegui gerar arquivos .cs para 2 dos serviços, os outros 2 seguirão, presumo. Obrigado.
Kfoster #