gpt4 book ai didi

c# - 如何让 WCF 生成代理列表?

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:04 24 4
gpt4 key购买 nike

如何让 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 上的契约(Contract)定义.
  • 给我一个List<IRemoteControl>什么时候IRemoteControlGroup.GetInstances()被调用(在客户端),其中列表的元素是实现 IRemoteControl 的代理(通过调用主机的实际 IRemoteControl 对象)。

我不希望 WCF 推送实际的 RemoteControlImpl物体通过电线;我只是想让它推送实现 IRemoteControl 的代理. RemoteControlImpl对象实际上包含本地系统的句柄(窗口句柄,因为我们的应用程序只公开一个 GUI 界面),因此不可序列化。 GetInstance() 返回的元素数量可以变化。

我找到了 this article ,这听起来像我想要的。有点儿。但它没有告诉我如何在代码中做到这一点;只是在配置中。它也没有完全描述我想要的。服务的入口点提供代理;但我希望我的服务的入口点提供代理列表。

最佳答案

正如@John Saunders 指出的那样,您需要重新考虑您的方法。我可以想到一些可能有用的通用方法,具体取决于驱动“多个”实例的因素。

1) 如果它们是从应用程序外部驱动的(即可用 IRemoteControl 目标列表不会在运行时动态更改),那么您可以通过多个端点公开相同的契约(Contract)。例如。 http://localhost/remotecontrol.svc/instance1 , http://localhost/remotecontrol.svc/instance2等。可以通过您的 WSDL 公布不同端点的可用性。

2) 如果多个目标是动态的,那么最简单的方法是重新定义您的契约(Contract):

public interface IRemoteControlGroup {
List<string> GetInstances();
void Stop(string instanceId);
void Start(string instanceId);
void GetPID(string instanceId);
}

在内部,您的服务将维护可用 IRemoteControl 对象的字典,以 InstanceId 为键,并将传入操作简单地路由到目标实例。

关于c# - 如何让 WCF 生成代理列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com