общедоступные члены класса, по-видимому, недоступны в VB6 IDE - PullRequest
0 голосов
/ 16 сентября 2010

Я создал сборку .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> ,

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

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

1 Ответ

0 голосов
/ 16 сентября 2010

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

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

...