Procedura: registrare e configurare un moniker servizio
Per utilizzare il moniker servizio Windows Communication Foundation (WCF) all'interno di un'applicazione COM con un contratto tipizzato, è necessario registrare i tipi con attributi necessari con COM e configurare l'applicazione COM e il moniker con la configurazione dell'associazione necessaria.
Per registrare i tipi con attributi necessari con COM
Utilizzare lo strumento ServiceModel Metadata Utility Tool (Svcutil.exe) per recuperare il contratto dei metadati dal servizio WCF. Questo genera il codice sorgente per un assembly client WCF e un file di configurazione dell'applicazione client.
Assicurarsi che i tipi nell'assembly siano contrassegnati come
ComVisible
. A tale scopo, aggiungere l'attributo seguente al file AssemblyInfo.cs nel progetto di Visual Studio.[assembly: ComVisible(true)]
Compilare il client WCF gestito come assembly con nome sicuro. Ciò richiede una firma con una coppia di chiavi di crittografia. Per ulteriori informazioni, vedere Firma di un assembly con un nome sicuro nella guida per gli sviluppatori .NET (il contenuto potrebbe essere in inglese).
Utilizzare lo strumento di registrazione degli assembly (Regasm.exe) con l'opzione /tlb, per registrare i tipi nell'assembly con COM.
Utilizzare lo strumento della cache di assembly globale (Gacutil.exe) per aggiungere l'assembly alla cache di assembly globale.
Nota
La firma e l'aggiunta dell'assembly alla cache di asssembly globale sono passaggi facoltativi, che possono però semplificare il processo di caricamento dell'assembly dal percorso corretto in fase di esecuzione.
Per configurare l'applicazione COM e il moniker con la configurazione dell'associazione necessaria
Posizionare le definizioni dell'associazione (generate da ServiceModel Metadata Utility Tool (Svcutil.exe) nel file di configurazione dell'applicazione client generato) nel file di configurazione dell'applicazione client. Ad esempio, per il file eseguibile di Visual Basic 6.0 denominato CallCenterClient.exe, la configurazione deve essere posizionata in un file denominato CallCenterConfig.exe.config all'interno della stessa directory del file eseguibile. L'applicazione client può ora utilizzare il moniker. Si noti che la configurazione dell'associazione non è necessaria in caso di utilizzo di uno dei tipi di associazione standard forniti da WCF.
Viene registrato il tipo seguente.
using System.ServiceModel; ... [ServiceContract] public interface IMathService { [OperationContract] public int Add(int x, int y); [OperationContract] public int Subtract(int x, int y); }
L'applicazione viene esposta utilizzando un'associazione wsHttpBinding. Per il tipo e la configurazione dell'applicazione specificati, vengono utilizzate le stringhe del moniker di esempio seguenti.
service:address=https://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
or
service:address=https://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
È possibile utilizzare entrambe le stringhe del moniker dall'interno dell'applicazione Visual Basic 6.0, dopo avere aggiunto un riferimento all'assembly contenente i tipi IMathService, come illustrato nel codice di esempio seguente.
Dim MathProxy As IMathService Dim result As Integer Set MathProxy = GetObject( _ "service:address=https://localhost/MathService, _ binding=wsHttpBinding, _ bindingConfiguration=Binding1") result = MathProxy.Add(3, 5)
In questo esempio, la definizione per la configurazione dell'associazione
Binding1
viene archiviata in un file di configurazione adeguatamente denominato per l'applicazione client, ad esempio vb6appname.exe.config.Nota
È possibile utilizzare codice simile in C#, C++ o in qualsiasi altra applicazione del linguaggio .NET.
Nota
Se il formato del moniker non è valido o il servizio non è disponibile, la chiamata a GetObject restituirà un errore di sintassi non valida. Se si riceve questo errore, verificare che il moniker che si sta utilizzando sia valido e che il servizio sia disponibile.
Anche se questo argomento si concentra sull'utilizzo del moniker servizio da codice VB 6.0, è possibile utilizzare un moniker servizio da altri linguaggi. Quando si utilizza un moniker da codice C++, l'assembly generato da Svcutil.exe deve essere importato con "no_namespace named_guids raw_interfaces_only", come illustrato nel codice seguente.
#import "ComTestProxy.tlb" no_namespace named_guids
Ciò modifica le definizioni dell'interfaccia importate, in modo che tutti i metodi restituiscano un HResult. Tutti gli altri valori restituiti vengono convertiti in parametri out. L'esecuzione complessiva dei metodi resta la stessa. Questo consente di determinare la causa di un'eccezione quando si chiama un metodo sul proxy. Questa funzionalità è disponibile solo da codice C++.