Я создал сборку .net, которая включает в себя контракт данных для службы WCF (win32). Затем я открыл эти объекты через COM-взаимодействие, чтобы можно было повторно использовать одну и ту же сборку на стороне клиента для вызова службы WCF. У меня есть следующие части для моего проекта:
[служба wcf] <====> {[сборка клиента wcf предоставляется через COM-взаимодействие] + [сборка контрактов данных также предоставляется через com-взаимодействие]} <==> [приложение vb 6]
Один пример класса в контракте данных выглядит следующим образом:
<code>
[Guid("00000000-0000-0000-0000-000000000000")]
[ComVisible(true)]
[DataContract]
public sealed class Monkey {
public string name;
};
И, в основном, работает просто отлично. Я могу скомпилировать сборку .net, которая включает этот класс, зарегистрировать его для взаимодействия COM, обратиться к нему в проекте VB6 и обратиться к службе WCF из клиентского приложения.
Вот странное поведение : он отображает класс Monkey в обозревателе объектов IDE VB6, но не отображает элементы, подобные Monkey.name.
Я полагаю, что это вызвано тем же, что вызывает следующее предупреждение во время компиляции в проекте сборки .net:
Обработка предупреждений экспортера библиотеки типов 'MyCompany.Product.Contracts, MyCompany.Product.API'. Предупреждение: экспортер библиотеки типов обнаружил тип, производный от универсального класса и не помеченный как [ClassInterface (ClassInterfaceType.None)]. Интерфейсы классов не могут быть выставлены для таких типов. Попробуйте пометить тип с помощью [ClassInterface (ClassInterfaceType.None)] и предоставить явный интерфейс в качестве интерфейса по умолчанию для COM с помощью атрибута ComDefaultInterface.
И, наконец, я думаю, что причина как предупреждения, так и странного поведения при разработке клиентского приложения вызвана тем фактом, что я использую автоматически сгенерированную ссылку на службу и объект клиента, который наследуется от System.ServiceModel.ClientBase<T>
,
Я на правильном пути?
Как я могу решить эту проблему / предупреждение?