Как зарегистрировать и настроить моникер службы
Перед использованием моникера службы Windows Communication Foundation (WCF) в рамках приложения COM с типизированным контрактом необходимо зарегистрировать необходимые типы с атрибутами с помощью COM и настроить приложение COM и моникер в соответствии с необходимой конфигурацией привязки.
Регистрация необходимых типов с атрибутами с помощью COM
С помощью средства Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe) получите контракт метаданных службы WCF. При этом будет создан исходный код сборки клиента WCF и файл конфигурации клиентского приложения.
Убедитесь, что все типы в сборке имеют пометку
ComVisible
. Для этого добавьте в файл AssemblyInfo.cs в проекте Visual Studio следующий атрибут.[assembly: ComVisible(true)]
Скомпилируйте управляемый клиент WCF в виде сборки со строгим именем. Для этого нужно подписать ее с помощью пары ключей шифрования. Дополнительные сведения см. в разделе Подпись сборки строгим именем в руководстве разработчика по .NET.
С помощью средства регистрации сборок (Regasm.exe) с параметром /tlb зарегистрируйте типы сборки в COM.
Чтобы добавить сборку в глобальный кэш сборок, используйте средство глобального кэша сборок (Gacutil.exe).
Примечание Подписывание сборки и ее добавление в глобальный кэш сборок являются необязательными шагами, однако они могут упростить процесс загрузки сборки из правильного расположения во время выполнения.
Настройка приложения COM и моникера с использованием нужной конфигурации привязки
Поместите определения привязки (созданные средством Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe) в созданном файле конфигурации клиентского приложения) в файл конфигурации клиентского приложения. Например, для исполняемого файла Visual Basic 6.0 с именем CallCenterClient.exe конфигурацию необходимо помещать в файл с именем 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=https://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
or
service4:address=https://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
Можно использовать любую из этих строк моникера из приложения Visual Basic 6.0 после добавления ссылки на сборку, содержащую типы IMathService, как показано в следующем образце кода.
Dim MathProxy As IMathService Dim result As Integer Set MathProxy = GetObject( _ "service4:address=https://localhost/MathService, _ binding=wsHttpBinding, _ bindingConfiguration=Binding1") result = MathProxy.Add(3, 5)
В этом примере определение конфигурации привязки
Binding1
хранится в файле конфигурации клиентского приложения с соответствующим именем, например vb6appname.exe.config.Примечание Аналогичный код можно использовать в C#, C++ или любом другом языке приложений .NET. Примечание Если моникер сформирован неправильно или служба недоступна, при вызове метода GetObject будет возвращена ошибка "Синтаксическая ошибка". При получении этой ошибки убедитесь, что используется правильный моникер, а служба доступна. Хотя в этом разделе описывается использование моникера службы из кода VB 6.0, моникер службы можно использовать для любого другого языка. При использовании моникера из кода C++ сбоку, созданную с помощью средства Svcutil.exe, необходимо импортировать с атрибутом "no_namespace named_guids raw_interfaces_only", как показано в следующем примере кода.
#import "ComTestProxy.tlb" no_namespace named_guids
При этом изменяются определения импортированного интерфейса, чтобы все методы возвращали HResult. Все остальные возвращаемые значения преобразуются в выходные параметры. Общий процесс выполнения методов остается прежним. Это позволяет определить причину исключения при вызове метода в прокси. Эта функция доступна только в коде C++.
См. также
Основные понятия
Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe)