C# 如何通过向我的.net控制台应用程序发送请求并从中获取自定义响应来远程检查它是否正在运行
在我的网络中,我有一个在另一个windows系统上运行的c#net控制台应用程序。我想在其中实现一个功能,向它发送请求并从中获取自定义响应(例如json) 我的目标是测试远程控制台应用程序是否处于活动状态并按预期工作。当我的请求到达控制台应用程序时,它将运行一些自检,其响应将包含这些自检结果。我完全可以控制远程控制台应用程序的源代码 在这个远程.net控制台应用程序中实现我的想法最简单的技术/框架是什么C# 如何通过向我的.net控制台应用程序发送请求并从中获取自定义响应来远程检查它是否正在运行,c#,.net,C#,.net,在我的网络中,我有一个在另一个windows系统上运行的c#net控制台应用程序。我想在其中实现一个功能,向它发送请求并从中获取自定义响应(例如json) 我的目标是测试远程控制台应用程序是否处于活动状态并按预期工作。当我的请求到达控制台应用程序时,它将运行一些自检,其响应将包含这些自检结果。我完全可以控制远程控制台应用程序的源代码 在这个远程.net控制台应用程序中实现我的想法最简单的技术/框架是什么 我更喜欢将远程.net控制台应用程序设置为简单的console.exe,因此更喜欢没有IIS
我更喜欢将远程.net控制台应用程序设置为简单的console.exe,因此更喜欢没有IIS托管的网站,没有WCF,也没有windows服务。但是,如果真的没有比普通的console.exe更简单的方法,我愿意使用上述任何一种技术,如果我必须使用其中一种,哪一种最简单?我建议使用TCP侦听器与控制台应用程序一起运行,以便它能够远程响应查询 在C#中使用TCP侦听器的非常好的教程可以找到 通常,在“服务器”上(在本例中是控制台应用程序),您可以定义一个tcplistener,该tcplistener将接受指定端口上的请求,并可以与启动连接的客户端通信 (摘自上面链接的网站)
试试看{
IPAddress ipAd=IPAddress.Parse(“172.21.5.99”);
//使用本地m/c IP地址,以及
//在客户端中使用相同的方法
/*初始化侦听器*/
TcpListener myList=新的TcpListener(ipAd,8001);
/*在指定的端口开始侦听*/
myList.Start();
WriteLine(“服务器正在端口8001上运行…”);
Console.WriteLine(“本地端点为:”+
myList.LocalEndpoint);
WriteLine(“等待连接…”);
套接字s=myList.AcceptSocket();
Console.WriteLine(“从“+s.RemoteEndPoint”接受连接);
字节[]b=新字节[100];
int k=s.Receive(b);
Console.WriteLine(“接收…”);
对于(int i=0;i,我建议使用与控制台应用程序一起运行的TCP侦听器,以便它能够远程响应查询
在C#中使用TCP侦听器的非常好的教程可以找到
通常,在“服务器”上(在本例中是控制台应用程序),您可以定义一个tcplistener,该tcplistener将接受指定端口上的请求,并可以与启动连接的客户端通信
(摘自上面链接的网站)
试试看{
IPAddress ipAd=IPAddress.Parse(“172.21.5.99”);
//使用本地m/c IP地址,以及
//在客户端中使用相同的方法
/*初始化侦听器*/
TcpListener myList=新的TcpListener(ipAd,8001);
/*在指定的端口开始侦听*/
myList.Start();
WriteLine(“服务器正在端口8001上运行…”);
Console.WriteLine(“本地端点为:”+
myList.LocalEndpoint);
WriteLine(“等待连接…”);
套接字s=myList.AcceptSocket();
Console.WriteLine(“从“+s.RemoteEndPoint”接受连接);
字节[]b=新字节[100];
int k=s.Receive(b);
Console.WriteLine(“接收…”);
对于(inti=0;i,我的建议是实施一个
这将使您的应用程序为未来做好准备,您将不会重新发明轮子。我的建议是实施一个新的应用程序
这将使您的应用程序为未来做好准备,您将不会重新发明轮子。没有任何东西可以阻止控制台应用程序打开HTTP端点并通过它进行通信。特别是,WCF有一些示例演示如何从控制台应用程序托管它,尽管您有其他RPC技术r选项也适用。在任何情况下,您都需要打开某种端点,因为控制台应用程序仅有的其他通信线路是标准输入/输出流,无法远程访问。您可以在控制台应用程序中托管WCF服务,而无需使用IIS。您可能还想看看。这是一个现代开源高性能RPC框架"由Google创建。没有任何东西可以阻止控制台应用程序打开HTTP端点并通过它进行通信。特别是,WCF有一些示例可以演示如何从控制台应用程序托管它,尽管您选择的任何其他RPC技术也可以。在任何情况下,您都需要打开某种端点,因为控制台应用程序仅有的其他通信线路是标准输入/输出流,无法远程访问。您可以在控制台应用程序中承载WCF服务,而无需使用IIS。您可能还想了解一下。它是一个“现代开源高性能RPC框架”由Google创建。我同意这一点。重新使用Kestrel,而不是实现自己的HTTP堆栈。它工作正常,比编写自定义代码更不可能导致错误。我检查了你的建议,发现了这个和这个,我都能工作,并且同意你的建议更能证明未来。但是我接受@James m answer,因为它不需要了解web api,更符合我的具体需求。无论如何,非常感谢您的回答!!:-)我同意这一点。重新使用Kestrel而不是实现您自己的HTTP堆栈。它工作良好,并且比编写自定义代码更不可能引发错误。我检查了您的建议,发现了这个和这个,我都认为这两个都有效,并且同意您的建议更能证明未来。但是我接受@Jam
try {
IPAddress ipAd = IPAddress.Parse("172.21.5.99");
// use local m/c IP address, and
// use the same in the client
/* Initializes the Listener */
TcpListener myList=new TcpListener(ipAd,8001);
/* Start Listeneting at the specified port */
myList.Start();
Console.WriteLine("The server is running at port 8001...");
Console.WriteLine("The local End point is :" +
myList.LocalEndpoint );
Console.WriteLine("Waiting for a connection.....");
Socket s=myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
byte[] b=new byte[100];
int k=s.Receive(b);
Console.WriteLine("Recieved...");
for (int i=0;i<k;i++)
Console.Write(Convert.ToChar(b[i]));
ASCIIEncoding asen=new ASCIIEncoding();
s.Send(asen.GetBytes("The string was recieved by the server."));
Console.WriteLine("\nSent Acknowledgement");
/* clean up */
s.Close();
myList.Stop();
}
catch (Exception e) {
Console.WriteLine("Error..... " + e.StackTrace);
}
}
try {
TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");
tcpclnt.Connect("172.21.5.99",8001);
// use the ipaddress as in the server program
Console.WriteLine("Connected");
Console.Write("Enter the string to be transmitted : ");
String str=Console.ReadLine();
Stream stm = tcpclnt.GetStream();
ASCIIEncoding asen= new ASCIIEncoding();
byte[] ba=asen.GetBytes(str);
Console.WriteLine("Transmitting.....");
stm.Write(ba,0,ba.Length);
byte[] bb=new byte[100];
int k=stm.Read(bb,0,100);
for (int i=0;i<k;i++)
Console.Write(Convert.ToChar(bb[i]));
tcpclnt.Close();
}
catch (Exception e) {
Console.WriteLine("Error..... " + e.StackTrace);
}
}