我的C#类中有以下代码,它远程连接到远程计算机上的COM +服务器。
最初它在Activator.CreateInstance
失败,因为我在COM +服务器上没有用户启动客户端的用户。
我在客户端计算机上安装了COM +代理存根,并将它们导入到我的C#项目中。
在IDL文件中,只有一个接口定义_ AddressLookup
,它继承自IDispatch
,但在C#中的对象查看器中,我似乎得到两个接口,_ AddressLookup
和{ {1}}。
AddressLookup
当我运行此代码时,我得到:
源对象无法转换为目标类型 不支持所有必需的接口。
如果我尝试使用后期绑定:
private string CreateEarly(string server)
{
try
{
Type typeADLClass = typeof(LookupBusiness.AddressLookupClass);
Type typeDCOM = Type.GetTypeFromCLSID(typeADLClass.GUID,
server,
true);
object objAdd = Activator.CreateInstance(typeDCOM);
AddressLookupClass AddressLookupClass_result = (AddressLookupClass) Marshal.CreateWrapperOfType(objAdd, typeADLClass);
}
catch(Exception e)
{
return e.Message;
}
return "Create - success";
}
我得到接口不支持 object[] myArguments= {"www.zenei.co.uk", "39"};
object c;
c = typeDCOM.InvokeMember("Gett", BindingFlags.InvokeMethod, null, objAdd, myArguments);
。
有人可以帮忙吗?
答案 0 :(得分:0)
看起来好像有网络端口问题,即它们被防火墙阻止了。 这可能导致了这个问题。
在运行上述代码的计算机上运行netstat,显示端口135上的COM初始化,但随后在新端口上返回调用(在1024 - 5000范围内,搜索RPC服务器端口将查找有关此内容的更多详细信息)< / p>
我们阻止了返回端口,因此COM +服务器在DCOMCNFG中正在旋转,但随后发生了超时。