gpt4 book ai didi

c# - .Net 远程处理功能

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

我最近开始使用 .Net 远程处理,并且设法开始使用一些简单的教程,例如构建一个库 dll,它用作客户端可以访问和使用的计算器 (https://www.youtube.com/watch?v=Ve4AQnZ-_H0)。

我想要了解的是如何访问保存在服务器上的当前信息。例如,如果我在服务器上运行这个简单的部分:

int x = 0;

while (!Console.KeyAvailable)
{
x++;
System.Threading.Thread.Sleep(1000);
Console.WriteLine(x);
}

到目前为止,我发现构建的 dll 仅返回静态结果,例如计算器。我希望能够通过客户端知道在任何给定时间服务器上有多少 x。

我不知道我说得是否足够清楚,但如果需要,我会尽力解释得更好。

最佳答案

在下面的服务器实现中演示了如何在调用之间保持状态。

// this gets instantiated by clients over remoting
public class Server:MarshalByRefObject
{
// server wide state
public static int Value;

// state only for this instance (that can be shared with several clients
// depending on its activation model)
private StringBuilder buildup;

// an instance
public Server()
{
buildup = new StringBuilder();
Console.WriteLine("server started");
}

// do something useful
public int DoWork(char ch)
{
Console.WriteLine("server received {0}", ch);
buildup.Append(ch);
return Value;
}

// return all typed chars
public string GetMessage()
{
Console.WriteLine("server GetMessage called") ;
return buildup.ToString();
}

// how long should this instance live
public override object InitializeLifetimeService()
{
// run forever
return null;
}
}

注意覆盖 InitializeLifetimeService。如果您不控制它,您的实例将在 5 分钟后被拆除。

要使用上述类,我们使用以下代码启动并运行监听器,包括您的一些逻辑。不要忘记添加对程序集 System.Runtime.Remoting 的引用。

static void Main(string[] args)
{
// which port
var chn = new HttpChannel(1234);
ChannelServices.RegisterChannel(chn, false);

// Create only ONE Server instance
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Server), "server", WellKnownObjectMode.Singleton);

Server.Value = 0;
while (!Console.KeyAvailable)
{
Server.Value++;
System.Threading.Thread.Sleep(1000);
Console.WriteLine(Server.Value);
}
}

当此代码运行时,它应该在端口 1234 上监听本地机器的连接。第一次运行时,我必须禁用防火墙,允许该端口通过本地防火墙。

使用 Server 的客户端实现可能如下所示。不要忘记添加对程序集 System.Runtime.Remoting 的引用。

static void Main(string[] args)
{
var chn = new HttpChannel();
ChannelServices.RegisterChannel(chn, false);

RemotingConfiguration.RegisterWellKnownClientType(
typeof(Server),
"http://localhost:1234/server");

Console.WriteLine("Creating server...");
var s = new Server();

Console.WriteLine("type chars, press p to print, press x to stop");
var ch = Console.ReadKey();
while(ch.KeyChar != 'x')
{

switch(ch.KeyChar )
{
case 'p':
Console.WriteLine("msg: {0}", s.GetMessage());
break;
default:
Console.WriteLine("Got value {0} ", s.DoWork(ch.KeyChar));
break;
}

ch = Console.ReadKey();
}
Console.WriteLine("stopped");
}

如果你编译并运行它,你的结果可能如下所示:

demo of client and server with remoting

关于c# - .Net 远程处理功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472910/

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