Partilhar via


Como: Usar um moniker de serviço com contratos WSDL

Há situações em que você pode querer ter um cliente de interoperabilidade COM completamente independente. O serviço que você deseja chamar pode não expor 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 passá-lo para o moniker de serviço WCF. Este tópico descreve como chamar o exemplo WCF de Introdução usando um moniker WSDL do WCF.

Usar o moniker de serviço WSDL

  1. Abra e crie a solução de exemplo GettingStarted.

  2. Abra um navegador e navegue até para http://localhost/ServiceModelSamples/Service.svc se certificar de que o serviço está funcionando.

  3. 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;
        }
    }
    
  4. Adicione um namespace de vinculação ao serviço App.config:

  5. Crie um arquivo WSDL para o aplicativo ler. 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, você pode salvar o arquivo como serviceWSDL.xml. Se você não especificar os namespaces nas etapas 3 e 4, o documento WSDL retornado da consulta à URL acima não será o WSDL completo. O documento WSDL retornado incluirá várias instruções de importação que importam outros documentos WSDL. Você terá que passar por cada instrução de importação e criar o documento WSDL completo, combinando o WSDL retornado do serviço com o WSDL importado.

  6. Abra o Visual Basic 6.0 e crie um novo arquivo de .exe padrão. Adicione um botão ao formulário e clique duas vezes no botão para adicionar o seguinte código ao manipulador Click:

    ' 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)  
    

    Nota

    Se o moniker estiver malformado ou se o serviço não estiver disponível, a chamada para GetObject retornará um erro dizendo "Sintaxe inválida". Se você receber esse erro, verifique se o moniker que você está usando está correto e se o serviço está disponível.

  7. Execute o aplicativo Visual Basic. Uma caixa de mensagem será exibida com os resultados da chamada Subtract(145, 76.54).

Consulte também