【发布时间】:2012-03-10 05:24:23
【问题描述】:
如何让 WCF 生成实际对象的代理列表或 IEnumerable?我在自托管应用程序中执行此操作。
这是我所拥有的:
public interface IRemoteControlGroup {
List<IRemoteControl> GetInstances();
}
public class RemoteControlGroupImpl : IRemoteControlGroup {
public List<IRemoteControl> GetInstances()
{
System.Console.Error.WriteLine("Called GetInstances()");
List<IRemoteControl> list = new List<IRemoteControl>();
// implementation detail: get this list of IRemoteControl objects
return list;
}
}
public interface IRemoteControl {
void Stop();
void Start();
void GetPID();
}
public class RemoteControlImpl : IRemoteControl {
// actual implementation
}
我希望 WCF:
- 提供服务
RemoteControlGroupImpl,由IRemoteControlGroup上的合同定义。 - 在调用
IRemoteControlGroup.GetInstances()时(在客户端)给我一个List<IRemoteControl>,其中列表的元素是实现IRemoteControl的代理(通过调用主机的实际IRemoteControl对象)。
我不希望 WCF 通过网络推送实际的 RemoteControlImpl 对象;我只希望它推送实现IRemoteControl 的代理。 RemoteControlImpl 对象实际上包含本地系统的句柄(窗口句柄,因为我们的应用程序只公开一个 GUI 界面),因此不可序列化。 GetInstance() 返回的元素数量可以变化。
我找到了this article,这听起来像是我想要的。有点儿。但它并没有告诉我如何在代码中做到这一点;只是在配置中。它也不能完全描述我想要什么。服务的入口点提供代理;但我希望我的服务的入口点提供代理列表。
【问题讨论】:
-
对 WSHttpBinding/NetTcpBinding 和会话的警告欢迎。我是所有这些 WCF 技术的新手。
-
如果你是新手,那么你不应该离所见的例子太远。 WCF 不是 .NET 远程处理。
-
谢谢。不幸的是,通常的管理需求是“面向未来”我们的技术,所以虽然我很乐意使用 .NET Remoting 或 CORBA,但除了 WCF 之外,我没有任何建议。
-
不,我是说您正在尝试在 .NET Remoting 中做一些有意义的事情,但在 WCF 中却没有。您没有使用已被 WCF 取代的 Remoting,这是一件好的事情。
-
啊。那么,对于完成手头的任务,您有什么建议吗?