我写了个调用WCF的COM+,结果很多警告,请教一下是怎样解决?

ilearn 2013-02-28 11:07:57
我写了个调用WCF的COM+(就是让老VB6调用的),警告内容都是说我的定义的 list<t>有问题,不知道怎样解决好,我的WCF返回值是LIST<t>,我搜了一下GOOGLE,含有我的警告的网叶只有 4个,我在想,就是既然LIST<t>提出警告,那我就用DICTIONARY<K,V>吧,好像这个作为返回值是,WCF是允许的吧,请教一下高手,我找不到答案

警告内容如下

类型库导出程序在处理“bhcom.ServiceReference.ProddepinfoList, bhcom”时发出警告
。警告: 类型库导出程序遇到从泛型类派生并且未标记为 [ClassInterface(ClassInterfac
eType.None)] 的类型。无法公开这种类型的类接口。请考虑用 [ClassInterface(ClassInt
erfaceType.None)] 标记该类型,并使用 ComDefaultInterface 属性向 COM 公开某个显式
接口作为默认接口。
类型库导出程序在处理“bhcom.ServiceReference.UploadthegjdsubList, bhcom”时发出
警告。警告: 类型库导出程序遇到从泛型类派生并且未标记为 [ClassInterface(ClassInte
rfaceType.None)] 的类型。无法公开这种类型的类接口。请考虑用 [ClassInterface(Clas
sInterfaceType.None)] 标记该类型,并使用 ComDefaultInterface 属性向 COM 公开某个
显式接口作为默认接口。
类型库导出程序在处理“bhcom.ServiceReference.MyInvMainList, bhcom”时发出警告。
警告: 类型库导出程序遇到从泛型类派生并且未标记为 [ClassInterface(ClassInterfaceT
ype.None)] 的类型。无法公开这种类型的类接口。请考虑用 [ClassInterface(ClassInter
faceType.None)] 标记该类型,并使用 ComDefaultInterface 属性向 COM 公开某个显式接
口作为默认接口。

COM+的代码如下

public string invokgetproddep(ref string[] avar, ref string[] bvar, ref string[] cvar, ref decimal[] dvar, ref string[] evar, ref DateTime[] fvar, ref Int32[] gvar, string addr,)
{

EndpointAddress objAddress = new EndpointAddress(addr + "/Service1.svc");
ServiceReference.Service1Client m_proxy = new ServiceReference.Service1Client("WSHttpBinding_IService1", objAddress);


int i = 0;
ServiceReference.ProdList mylistprod = new ServiceReference.ProdList();
try
{
mylistproddepdc = m_proxy.GetProddepinfo();
foreach (ServiceReference.proddatacontract proddc in mylistprod)
{
avar[i] = proddc.a;
bvar[i] = proddc.b;
cvar[i] = proddc.c;
dvar[i] = proddc.d;
evar[i] = proddc.e;
fvar[i] = proddc.f;
gvar[i] = proddc.g;
i++;
}



return "succ";
}


catch (FaultException<ServiceReference.GetProddepinfoFault> ex)
{
System.Windows.Forms.MessageBox.Show("发生错误:" + ex.Detail.Operation + " 错误原因是:" + ex.Detail.ProblemType);
m_proxy.Abort();
return "fail";
}
catch (CommunicationException ex)
{
System.Windows.Forms.MessageBox.Show("错误发生:" + ex.ToString());
m_proxy.Abort();
return "fail";
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("错误发生:" + ex.ToString());
m_proxy.Abort();
return "fail";
}

finally
{
if (m_proxy != null)
m_proxy.Close();
}


}
...全文
225 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-03-03
  • 打赏
  • 举报
回复
你需要加上这些Attribute [ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(IBlogDemo))] 参考: http://blogs.msdn.com/b/mbend/archive/2007/04/17/classinterfacetype-none-is-my-recommended-option-over-autodispatch-autodual.aspx
ilearn 2013-03-01
  • 打赏
  • 举报
回复
就说清楚一点
ilearn 2013-03-01
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
提示很清楚了。 你不要直接用泛型类,可以继承一个普通类,比如 class StringList : List<string> { } 然后使用StringList代替List<string>。
还是不清楚该怎样改
threenewbee 2013-02-28
  • 打赏
  • 举报
回复
提示很清楚了。 你不要直接用泛型类,可以继承一个普通类,比如 class StringList : List<string> { } 然后使用StringList代替List<string>。

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧