如何在Windows服务中托管简单的ASP.NET Web界面

5 .net c# asp.net mono http

对于在Windows和.NET操作系统上运行的简单设备,我们需要创建一个简单的配置Web界面来控制它.就像路由器的配置页面一样,没有比这更复杂的了.

应该避免安装IIS或任何其他Web服务器,我们需要的是在基本的Windows XP安装+ .NET上的Windows服务中的自我支持过程.

单声道兼容性是一个优点.

太感谢了

csh*_*net 10

实际上最简单的方法是使用内置的WCF(.Net 3.5)...为此,您需要为"WCF"服务创建一个接口,该接口包含一个或多个返回Stream的方法:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(UriTemplate = "/{*arguments}", Method="GET", BodyStyle=WebMessageBodyStyle.Bare)]
    Stream Get(string arguments);
}
Run Code Online (Sandbox Code Playgroud)

您可以定义多个方法和参数,让WFC完成工作,或者如上例所示,将所有内容都推送到单个方法中.生成的实现可以访问完整的Uri和查询参数,如下所示:

public class ServiceType : IService
{
    public Stream Get(string arguments)
    {
        UriTemplateMatch uriInfo = WebOperationContext.Current.IncomingRequest.UriTemplateMatch;
        WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";

        MemoryStream rawResponse = new MemoryStream();
        TextWriter response = new StreamWriter(rawResponse, Encoding.UTF8);
        response.Write("<html><head><title>Hello</title></head><body>");
        response.Write("<b>Path</b>: {0}<br/>", arguments);
        response.Write("<b>RequestUri</b>: {0}<br/>", uriInfo.RequestUri);
        response.Write("<b>QueryParameters</b>: {0}<br/>", uriInfo.QueryParameters.ToString());
        response.Write("</body></html>");
        response.Flush();

        rawResponse.Position = 0;
        return rawResponse;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你所要做的就是启动WCF web/http自主...

static void Main()
{
    Uri baseAddress = new Uri("http://localhost:8000/");
    WebServiceHost svcHost = new WebServiceHost(typeof(ServiceType));

    ServiceEndpoint svcEndpoint = svcHost.AddServiceEndpoint(typeof(IService),
      new WebHttpBinding(), baseAddress);
    svcEndpoint.Behaviors.Add(new WebHttpBehavior());

    svcHost.Open();
    Console.WriteLine("Press enter to quit...");
    Console.ReadLine();

    svcHost.Close();
}
Run Code Online (Sandbox Code Playgroud)

注意:要使上述示例在Vista/Win7上运行,您需要使用以下命令行授予权限:

netsh http add urlacl url=http://+:8000/ user=DOMAIN\USER
Run Code Online (Sandbox Code Playgroud)