我已经使用winform在C#中完成了一个应用程序,现在需要从lighthttp服务器上自托管的网页远程控制(只有一些功能)(作为我的应用程序解决方案中的类包含)
这是服务器代码(对David的BlogEngine而言):
public class WebServer
{
private readonly HttpListener _listener = new HttpListener();
private readonly Func<HttpListenerRequest, string> _responderMethod;
public WebServer(string[] prefixes, Func<HttpListenerRequest, string> method)
{
if (!HttpListener.IsSupported)
throw new NotSupportedException(
"Needs Windows XP SP2, Server 2003 or later.");
// URI prefixes are required, for example
// "http://localhost:8080/index/".
if (prefixes == null || prefixes.Length == 0)
throw new ArgumentException("prefixes");
// A responder method is required
if (method == null)
throw new ArgumentException("method");
foreach (string s in prefixes)
_listener.Prefixes.Add(s);
_responderMethod = method;
_listener.Start();
}
public WebServer(Func<HttpListenerRequest, string> method, params string[] prefixes)
: this(prefixes, method) { }
public void Run()
{
ThreadPool.QueueUserWorkItem((o) =>
{
//Console.WriteLine("Webserver running...");
try
{
while (_listener.IsListening)
{
ThreadPool.QueueUserWorkItem((c) =>
{
var ctx = c as HttpListenerContext;
try
{
string rstr = _responderMethod(ctx.Request);
byte[] buf = Encoding.UTF8.GetBytes(rstr);
ctx.Response.ContentLength64 = buf.Length;
ctx.Response.OutputStream.Write(buf, 0, buf.Length);
}
catch { } // suppress any exceptions
finally
{
// always close the stream
ctx.Response.OutputStream.Close();
}
}, _listener.GetContext());
}
}
catch { } // suppress any exceptions
});
}
public void Stop()
{
_listener.Stop();
_listener.Close();
}
}
这是我的winform应用程序中的代码,用于打开它:
WebServer ws = new WebServer(SendResponse, "http://localhost:8080/test/");
ws.Run();
这是返回服务器的html:
public static string SendResponse(HttpListenerRequest request)
{
return string.Format("<HTML><BODY>My web page.<br>{0}</BODY></HTML>", DateTime.Now);
}
当我打开&#34; localhost:8080 / test&#34;在我的浏览器上它就像一个魅力,但.. 我不知道如何将信息从网页传递到应用程序以在其上发起事件。
即。如果我按下按钮&#34;关闭&#34;在网页上,它会在winform应用程序上触发关闭事件。
为实现这一目标,我需要实施哪些目标?
(我将逐步更新这篇文章,以及我未来的进展,以使其对每个人都有用)
答案 0 :(得分:0)
考虑使用Grapevine - 这是为它构建的确切利基。
它允许您在winform应用程序中嵌入一个简单的REST服务器,并轻松地将传入的请求映射到方法。通过发送简单的请求(通过前端的JavaScript或后端的更多C#),您的webapp可以与它们进行交互。