我创建了一个.net程序集,其中包含WCF(win32)服务的数据协定。然后我通过COM Interop公开这些对象,以便可以在客户端重用相同的程序集来调用WCF服务。我的项目中有以下几个部分:
[wcf service]< ====> {[通过COM互操作公开的客户端程序集] + [数据合同程序集也通过com interop公开]}< ==> [vb 6申请]
数据合同中的一个类的例子是这样的:
[Guid("00000000-0000-0000-0000-000000000000")]
[ComVisible(true)]
[DataContract]
public sealed class Monkey {
public string name;
};
而且,大多数情况下,它的工作正常。我能够编译包含此类的.net程序集,为COM interop注册它,在VB6项目中引用它,并从客户端应用程序调用WCF服务。
这是奇怪的行为:它在VB6 IDE对象浏览器中显示类Monkey,但不显示像Monkey.name这样的成员。
我认为这是由导致.net程序集项目中的以下编译时警告的同一事件引起的:
键入库导出器警告处理'MyCompany.Product.Contracts,MyCompany.Product.API'。警告:类型库导出器遇到的类型派生自泛型类,并且未标记为[ClassInterface(ClassInterfaceType.None)]。不能为这些类型公开类接口。考虑使用[ClassInterface(ClassInterfaceType.None)]标记类型,并使用ComDefaultInterface属性将显式接口公开为COM的默认接口。
最后,我认为在开发客户端应用程序时引发警告和奇怪行为的原因是由于我正在使用自动生成的服务引用和继承自{{1的客户端对象}}。
我走在正确的轨道上吗?
如何解决此问题/警告?