Como: usar um moniker de serviço com contratos WSDL
Há situações em que talvez você queira ter um cliente de interoperabilidade COM totalmente independente. O serviço que você deseja chamar pode não mostrar um ponto de extremidade MEX e a DLL do cliente WCF pode não estar registrada para interoperabilidade COM. Nesses casos, você pode criar um arquivo WSDL que descreve o serviço e passa para o moniker de serviço do WCF. Este tópico descreve como chamar o exemplo Introdução do WCF usando um moniker WSDL do WCF.
Usar o moniker do serviço WSDL
Abra e crie a solução do exemplo GettingStarted.
Abra um navegador e navegue até
http://localhost/ServiceModelSamples/Service.svc
para verificar se o serviço está funcionando.No arquivo Service.cs, adicione o seguinte atributo na classe CalculatorService:
[ServiceBehavior(Namespace = "http://Microsoft.ServiceModel.Samples")] // This service class implements the service contract. public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } public double Subtract(double n1, double n2) { return n1 - n2; } public double Multiply(double n1, double n2) { return n1 * n2; } public double Divide(double n1, double n2) { return n1 / n2; } }
Adicione um namespace de associação ao serviço App.config:
Crie um arquivo WSDL para a leitura do aplicativo. Como os namespaces foram adicionados nas etapas 3 e 4, você pode usar um navegador para consultar toda a descrição WSDL do serviço navegando até
http://localhost/ServiceModelSamples/Service.svc?wsdl
. Em seguida, é possível salvar o arquivo como serviceWSDL.xml. Se você não especificar os namespaces nas etapas 3 e 4, o documento WSDL retornado da consulta da URL acima não será o WSDL completo. O documento WSDL retornado inclui várias instruções de importação que importam outros documentos WSDL. Você precisa analisar cada instrução de importação e criar o documento completo do WSDL, combinando o WSDL retornado do serviço com o WSDL importado.Abra o Visual Basic 6.0 e crie um novo arquivo .exe Standard. Adicione um botão ao formulário e clique duas vezes no botão para adicionar o seguinte código ao manipulador Clicar:
' Open the WSDL contract file and read it all into the wsdlContract string. Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\serviceWsdl.xml", ForReading) wsdlContract = objFile.ReadAll objFile.Close ' Create a string for the service moniker including the content of the WSDL contract file. wsdlMonikerString = "service4:address='http://localhost/ServiceModelSamples/service.svc'" wsdlMonikerString = wsdlMonikerString + ", wsdl='" & wsdlContract & "'" wsdlMonikerString = wsdlMonikerString + ", binding=WSHttpBinding_ICalculator, bindingNamespace='http://Microsoft.ServiceModel.Samples'" wsdlMonikerString = wsdlMonikerString + ", contract=ICalculator, contractNamespace='http://Microsoft.ServiceModel.Samples'" ' Create the service moniker object. Set wsdlServiceMoniker = GetObject(wsdlMonikerString) ' Call the service operations using the moniker object. MsgBox "WSDL service moniker: 145 - 76.54 = " & wsdlServiceMoniker.Subtract(145, 76.54)
Observação
Se o moniker estiver malformado ou se o serviço não estiver disponível, a chamada para
GetObject
retorna um erro com a mensagem "Sintaxe inválida". Se ocorrer esse erro, verifique se o moniker usado está correto e se o serviço está disponível.Execute o aplicativo Visual Basic. Uma caixa de mensagem é exibida com os resultados da chamada Extrair substrato (145, 76,54).