Общедоступные члены класса, по-видимому, недоступны в VB6 IDE

Я создал сборку.net, которая включает в себя контракт данных для службы WCF (win32). Затем я открыл эти объекты через COM-взаимодействие, чтобы можно было повторно использовать одну и ту же сборку на стороне клиента для вызова службы WCF. У меня есть следующие части для моего проекта:

[служба wcf] <====> { [сборка клиента wcf предоставляется через COM-взаимодействие] + [сборка контрактов данных также предоставляется через com-взаимодействие] } <==> [приложение vb 6]

Один пример класса в контракте данных выглядит следующим образом:


[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>,

  1. Я на правильном пути?

  2. Как я могу решить эту проблему / предупреждение?

1 ответ

Решение

Обычный способ решить эту проблему - создать интерфейс IMonkey ComVisible, который реализуется вашим классом.

Результатом будет что-то вроде примера в этом похожем вопросе.

Другие вопросы по тегам