Udostępnij za pośrednictwem


Instrukcje: rejestrowanie i konfigurowanie monikera usługi

Przed użyciem moniker usługi Windows Communication Foundation (WCF) w aplikacji COM z typem kontraktu, należy zarejestrować wymagane typy atrybutów w modelu COM i skonfigurować aplikację COM i pseudonim z wymaganą konfiguracją powiązania.

Rejestrowanie wymaganych typów atrybutów za pomocą modelu COM

  1. Użyj narzędzia ServiceModel Metadata Tool (Svcutil.exe), aby pobrać kontrakt metadanych z usługi WCF. Spowoduje to wygenerowanie kodu źródłowego zestawu klienta WCF i pliku konfiguracji aplikacji klienckiej.

  2. Upewnij się, że typy w zestawie są oznaczone jako ComVisible. W tym celu dodaj następujący atrybut do pliku AssemblyInfo.cs w projekcie programu Visual Studio.

    [assembly: ComVisible(true)]
    
  3. Skompiluj zarządzanego klienta WCF jako zestaw o silnej nazwie. Wymaga to podpisania za pomocą pary kluczy kryptograficznych. Aby uzyskać więcej informacji, zobacz Podpisywanie zestawu za pomocą silnej nazwy.

  4. Użyj narzędzia Rejestracja zestawu (Regasm.exe) z opcją -tlb rejestrowania typów w zestawie za pomocą modelu COM.

  5. Użyj narzędzia Global Assembly Cache (Gacutil.exe), aby dodać zestaw do globalnej pamięci podręcznej zestawów.

    Uwaga

    Podpisywanie zestawu i dodawanie go do globalnej pamięci podręcznej zestawów jest opcjonalnymi krokami, ale mogą uprościć proces ładowania zestawu z prawidłowej lokalizacji w czasie wykonywania.

Konfigurowanie aplikacji COM i nazwy moniker przy użyciu wymaganej konfiguracji powiązania

  • Umieść definicje powiązań (generowane przez narzędzie ServiceModel Metadata Tool (Svcutil.exe) w wygenerowanych plikach konfiguracji aplikacji klienckiej) w pliku konfiguracji aplikacji klienckiej. Na przykład w przypadku pliku wykonywalnego Visual Basic 6.0 o nazwie CallCenterClient.exe konfiguracja powinna zostać umieszczona w pliku o nazwie CallCenterConfig.exe.config w tym samym katalogu co plik wykonywalny. Aplikacja kliencka może teraz używać nazwy moniker. Należy pamiętać, że konfiguracja powiązania nie jest wymagana, jeśli używasz jednego ze standardowych typów powiązań udostępnianych przez usługę WCF.

    Zarejestrowany jest następujący typ.

    using System.ServiceModel;
    
    [ServiceContract]
    public interface IMathService
    {
        [OperationContract]
        public int Add(int x, int y);
        [OperationContract]
        public int Subtract(int x, int y);
    }
    

    Aplikacja jest uwidaczniona przy użyciu wsHttpBinding powiązania. Dla danego typu i konfiguracji aplikacji używane są następujące przykładowe ciągi moniker.

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
    

    lub

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
    

    Można użyć jednego z tych ciągów moniker z poziomu aplikacji Visual Basic 6.0, po dodaniu odwołania do zestawu zawierającego IMathService typy, jak pokazano w poniższym przykładowym kodzie.

    Dim mathProxy As IMathService
    Dim result As Integer
    
    Set mathProxy = GetObject( _
            "service4:address=http://localhost/MathService, _
            binding=wsHttpBinding, _
            bindingConfiguration=Binding1")
    
    result = mathProxy.Add(3, 5)
    

    W tym przykładzie definicja konfiguracji Binding1 powiązania jest przechowywana w odpowiednio nazwanym pliku konfiguracji aplikacji klienckiej, takim jak vb6appname.exe.config.

    Uwaga

    Możesz użyć podobnego kodu w języku C#, C++lub dowolnej innej aplikacji językowej platformy .NET.

    Uwaga

    Jeśli moniker jest źle sformułowany lub jeśli usługa jest niedostępna, wywołanie GetObject metody zwraca błąd "Nieprawidłowa składnia". Jeśli wystąpi ten błąd, upewnij się, że używany pseudonim jest poprawny i usługa jest dostępna.

    Mimo że ten temat koncentruje się na używaniu nazwy moniker usługi z poziomu kodu języka Visual Basic 6.0, można użyć moniker usługi z innych języków. W przypadku używania moniker z kodu języka C++ Svcutil.exe wygenerowany zestaw powinien zostać zaimportowany przy użyciu polecenia "no_namespace named_guids raw_interfaces_only", jak pokazano w poniższym kodzie.

    #import "ComTestProxy.tlb" no_namespace named_guids
    

    Spowoduje to zmodyfikowanie zaimportowanych definicji interfejsu, tak aby wszystkie metody zwracały element HResult. Wszystkie inne wartości zwracane są konwertowane na parametry out. Ogólne wykonywanie metod pozostaje takie same. Dzięki temu można określić przyczynę wyjątku podczas wywoływania metody na serwerze proxy. Ta funkcja jest dostępna tylko w kodzie C++.

Zobacz też