Практическое руководство. Использование моникера службы с контрактами WSDLHow to: Use a Service Moniker with WSDL Contracts

Существуют ситуации, когда требуется полностью автономный клиент COM-взаимодействия.There are situations when you may want to have a completely self-contained COM Interop client. Например, вызываемая служба может не отображать конечную точку обмена метаданными, а клиентская библиотека WCF может быть не зарегистрирована для COM-взаимодействия.The service you want to call may not expose a MEX endpoint, and the WCF client DLL may not be registered for COM interop. В таких ситуациях можно создать WSDL-файл, описывающий службу, и передать его в моникер службы WCF.In these cases, you can create a WSDL file that describes the service and pass it into the WCF service moniker. В данном разделе описывается, как вызвать образец WCF "Приступая к работе" с помощью моникера WSDL для службы WCF.This topic describes how to call the Getting Started WCF sample using a WCF WSDL moniker.

Использование моникера WSDLUsing the WSDL service moniker

  1. Откройте и постройте образец решения "Приступая к работе".Open and build the GettingStarted sample solution.

  2. Откройте Internet Explorer и перейдите к http://localhost/ServiceModelSamples/Service.svc , чтобы убедиться, что служба работает.Open Internet Explorer and browse to http://localhost/ServiceModelSamples/Service.svc to make sure that the service is working.

  3. В файле Service.cs добавьте следующий атрибут в класс CalculatorService:In the Service.cs file, add the following attribute on the CalculatorService class:

    [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. Добавьте пространство имен привязки в файл конфигурации службы App.config:Add a binding namespace to the service App.config:

  5. Создайте WSDL-файл для считывания приложением.Create a WSDL file for the application to read. Так как пространства имен были добавлены в шагах 3 и 4, можно использовать IE для запроса полного описания WSDL службы, перейдя по адресу http://localhost/ServiceModelSamples/Service.svc?wsdl .Because the namespaces were added in steps 3 and 4, you can use IE to query for the entire WSDL description of the service by browsing to http://localhost/ServiceModelSamples/Service.svc?wsdl. Файл из Internet Explorer можно сохранить с именем serviceWSDL.xml.You can then save the file from Internet Explorer as serviceWSDL.xml. Если на шагах 3 и 4 не было указано пространство имен, документ WSDL, возвращаемый после запроса вышеуказанного URL-адреса, будет не полным.If you do not specify the namespaces in steps 3 and 4, the WSDL document returned from querying the above URL will not be the complete WSDL. Возвращаемый документ WSDL будет содержать несколько операторов импорта, с помощью которых выполняется импорт других документов WSDL.The WSDL document returned will include several import statements that import other WSDL documents. Необходимо пройти все операторы импорта и построить полный документ WSDL, объединяющий как данные, полученные из службы, так и импортированные документы WSDL.You will have to go through each import statement and build the complete WSDL document, combining the WSDL returned from the service with the WSDL imported.

  6. Откройте Visual Basic 6.0 и создайте новый стандартный EXE-файл.Open Visual Basic 6.0 and create a new Standard .exe file. Добавьте в форму кнопку и дважды щелкните ее, чтобы добавить следующий код в обработчик щелчка.Add a button to the form and double-click the button to add the following code to the Click handler:

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

    Примечание

    Если неправильно сформирован моникер или служба недоступна, при вызове GetObject будет получена ошибка "Синтаксическая ошибка". При получении этой ошибки убедитесь, что используется правильный моникер, а служба доступна.If you receive this error, make sure the moniker you are using is correct and the service is available.

  7. Запустите приложение Visual Basic 6.0.Run the Visual Basic application. Отобразится окно сообщения с результатами вызова Subtract(145, 76.54).A message box will be displayed with the results of calling Subtract(145, 76.54).

См. такжеSee also