Como usar um arquivo WSDL para criar um serviço WCF (não fazer uma chamada)

100

Eu tenho um arquivo WSDL antigo e desejo criar um servidor baseado neste arquivo WSDL.

O WSDL é gerado a partir de um ASMX (suponho, mas não tenho certeza).

Como posso conseguir isso?


questão original em que o OP achou que precisava criar um cliente baseado no WSDL.

Raha
fonte

Respostas:

112

Usando svcutil, você pode criar interfaces e classes (contratos de dados) a partir do WSDL.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Isso criará um arquivo chamado "your.cs" em C # (ou "your.vb" em VB.NET) que contém todos os itens necessários.

Agora, você precisa criar uma classe "MyService" que implementará a interface de serviço (IServiceInterface) - ou as várias interfaces de serviço - e esta é sua instância de servidor.

Agora, uma classe por si só ainda não ajuda - você precisará hospedar o serviço em algum lugar. Você precisa criar sua própria instância ServiceHost que hospeda o serviço, configurar pontos de extremidade e assim por diante - ou pode hospedar seu serviço dentro do IIS.

marc_s
fonte
Tentei o mesmo com svcutil, mas não tive sucesso com as falhas. Você talvez tenha alguma sugestão para o meu problema: goo.gl/dlen
Juri
15
"svcutil your.wsdl your.xsd" é o que eu precisava para o meu funcionar! obrigado!
Tim Lewis
3
Verifique esta resposta do SO para obter informações sobre como baixar o wsdl e o xsd em um formato que o svcutil goste. stackoverflow.com/questions/286657/…
Brett Widmeier
@marc_s Quando eu uso isso com meu arquivo WSDL, parece que alguns elementos são renomeados de uma maneira muito estranha, de forma que as solicitações que chegam ao meu servidor nem mesmo são aceitas. Isso é normal?
Arj
@Arjun: não - parece que você precisa reunir todos os fatos relevantes e fazer uma pergunta no Stackoverflow! :-)
marc_s
41

Existem bons recursos disponíveis, se você souber o que pesquisar. Experimente "Contrato primeiro" e WCF. ou "WSDL First" e WCF.

Aqui está uma seleção:

Cheeso
fonte
3
Para quem segue a visão geral básica do artigo WSDL-First : Anote o comentário que fala sobre ReplyAction="*". Parece que você precisa se livrar disso. Há uma trilha de explicações desse comentário que dá o raciocínio, mas eu não li.
dan-gph,
30

Use svcutil.exe com a /scopção para gerar os contratos WCF. Isso criará um arquivo de código que você pode adicionar ao seu projeto. Ele conterá todas as interfaces e tipos de dados de que você precisa para criar seu serviço. Altere o local de saída usando a /oopção ou você pode encontrar o arquivo na pasta onde executou svcutil.exe. A linguagem padrão é C #, mas acho (nunca tentei) você deve conseguir alterar isso usando /l:vb.

svcutil /sc "WSDL file path"

Se o seu WSDL tiver qualquer arquivo XSD de suporte, transmita-os como argumentos após o WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Em seguida, crie uma nova classe que seja o seu serviço e implemente a interface de contrato que você acabou de criar.

Dennis Calla
fonte
7

Você pode usar svcutil.exe para gerar o código do cliente. Isso incluiria a definição do contrato de serviço e quaisquer contratos de dados e contratos de falha necessários.

Em seguida, basta excluir o código do cliente: classes que implementam os contratos de serviço. Em seguida, você precisará implementá-los sozinho, em seu serviço.

John Saunders
fonte
4

Usando a ferramenta "Add Service Reference" no Visual Studio, você pode inserir o endereço como:

arquivo: ///path/to/wsdl/file.wsdl

E ele irá carregar corretamente.

Vagner Gon
fonte