【发布时间】:2018-03-07 08:49:15
【问题描述】:
我正在尝试扩展支持 COM/ActiveX 对象的应用程序。 COM dll 需要向本地网络上的其他系统发送一些数据以进行进一步处理和操作。
我已经测试了一个基本的 WCF 主机客户端设置,它从控制台客户端到控制台主机都可以正常工作。但现在我需要通过客户端在 com-visible dll 中发送数据。
这是dll的代码:
namespace Client
{
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
[ComVisible(true)]
public interface ISend
{
[DispId(1)]
bool SendData(string msg);
}
[ClassInterface(ClassInterfaceType.None), Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"), ProgId("Client.Send")]
[ComVisible(true)]
public class Send : ISend
{
static BasicHttpBinding binding = new BasicHttpBinding();
static EndpointAddress endpoint = new EndpointAddress(new Uri("http://192.168.1.6:8000/WCFHost/Service/GetData"));
GetDataClient client = new GetDataClient(binding, endpoint);
[ComVisible(true)]
public bool SendData(string msg)
{
try
{
if (client.getData(msg))
{
client.Close();
return true;
}
else
{
client.Close();
return false;
}
}
catch (Exception e)
{
client.Abort();
return false;
}
}
}
}
该 dll 可以作为参考工作,但无法通过目标应用程序创建对象(它具有访问 COM/ActiveX 对象的功能)。当我尝试通过以下方式访问 dll 时:
obj = CreateObject ("Client.Send");
obj.SendData("Hello")
上面写着:
COM/object handle is null
在第二行仅此而已!
我使用 Remoting 以类似的方式创建了一个 com-visible dll 来实现这一点,它就像一个魅力。但现在它不能作为 WCF 客户端工作。
如果有人能指出我做错了什么,将不胜感激。
我已经转移到远程处理,这不是一个问题,但有人建议我远离它并通过 WCF 实现这一目标。
P.S : 我是 C# 新手,所以请原谅任何愚蠢的错误。
【问题讨论】:
标签: c# wcf com wcf-client