型指定されたコントラクトを使用して COM アプリケーション内で Windows Communication Foundation (WCF) サービス モニカーを使用する前に、必要な属性付き型を COM に登録し、必要なバインディング構成で COM アプリケーションとモニカーを構成する必要があります。
必要な属性付き型を COM に登録する
ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) ツールを使用して、WCF サービスからメタデータ コントラクトを取得します。 これにより、WCF クライアント アセンブリとクライアント アプリケーション構成ファイルのソース コードが生成されます。
アセンブリ内の型が
ComVisibleとしてマークされていることを確認します。 これを行うには、Visual Studio プロジェクトの AssemblyInfo.cs ファイルに次の属性を追加します。[assembly: ComVisible(true)]マネージド WCF クライアントを厳密な名前付きアセンブリとしてコンパイルします。 これには、暗号化キー ペアを使用した署名が必要です。 詳細については、「 厳密な名前でアセンブリに署名する」を参照してください。
アセンブリ登録 (Regasm.exe) ツールを
-tlbオプションと共に使用して、アセンブリ内の型を COM に登録します。グローバル アセンブリ キャッシュ (Gacutil.exe) ツールを使用して、アセンブリをグローバル アセンブリ キャッシュに追加します。
注
アセンブリに署名してグローバル アセンブリ キャッシュに追加する手順は省略可能ですが、実行時に適切な場所からアセンブリを読み込むプロセスを簡略化できます。
必要なバインド構成を使用して COM アプリケーションとモニカーを構成する
( ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) によって生成された) バインド定義を、生成されたクライアント アプリケーション構成ファイル内のクライアント アプリケーションの構成ファイルに配置します。 たとえば、CallCenterClient.exeという名前の Visual Basic 6.0 実行可能ファイルの場合、構成は実行可能ファイルと同じディレクトリ内の CallCenterConfig.exe.config という名前のファイルに配置する必要があります。 クライアント アプリケーションでモニカーを使用できるようになりました。 WCF によって提供される標準のバインディングの種類のいずれかを使用する場合は、バインド構成は必要ありません。
次の種類が登録されています。
using System.ServiceModel; [ServiceContract] public interface IMathService { [OperationContract] public int Add(int x, int y); [OperationContract] public int Subtract(int x, int y); }アプリケーションは、
wsHttpBindingバインディングを使用して公開されます。 指定された型とアプリケーションの構成では、次のモニカー文字列の例が使用されます。service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1又は
service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}次のサンプル コードに示すように、
IMathService型を含むアセンブリへの参照を追加した後、Visual Basic 6.0 アプリケーション内からこれらのモニカー文字列のいずれかを使用できます。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)この例では、バインディング構成
Binding1の定義は、クライアント アプリケーションの適切な名前付き構成ファイル ( vb6appname.exe.configなど) に格納されます。注
C#、C++、またはその他の .NET 言語アプリケーションでも同様のコードを使用できます。
注
モニカーの形式が正しくない場合、またはサービスが使用できない場合は、
GetObjectの呼び出しで "無効な構文" というエラーが返されます。 このエラーが発生した場合は、使用しているモニカーが正しく、サービスが使用可能であることを確認してください。このトピックでは、Visual Basic 6.0 コードのサービス モニカーの使用に重点を置いていますが、他の言語のサービス モニカーを使用できます。 C++ コードからモニカーを使用する場合、Svcutil.exe によって生成されたアセンブリを "no_namespace named_guids raw_interfaces_only" でインポートする必要があります。使用例は次のコードに示されています。
#import "ComTestProxy.tlb" no_namespace named_guidsこれにより、すべてのメソッドが
HResultを返すように、インポートされたインターフェイス定義が変更されます。 その他の戻り値は out パラメーターに変換されます。 メソッドの全体的な実行は変わりません。 これにより、プロキシでメソッドを呼び出すときの例外の原因を特定できます。 この機能は、C++ コードからのみ使用できます。