1。c#创建一个win服务工程,做好install
2。nuget服务中实现webapi的包,如下:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.Cors" version="5.2.7" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.7" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.7" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.7" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.7" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.7" targetFramework="net452" />
<package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net45" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" />
<package id="Microsoft.Owin" version="4.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Cors" version="4.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Host.HttpListener" version="4.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="4.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="4.1.0" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="4.1.0" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>
复制到package.config文件,然后在工程的引用右键菜单“将package.config迁移到PackageRe...",然后重新加载工程。关键的包就是Owin
3。在OnStart里启动一个线程,用来打开WebHttp服务器:
public void DoStart(string[] args)
{
//启动方案
_isrun = true;
_thr = new Thread(new ThreadStart(DoRPC));
_thr.Start();
}
public void DoRPC()
{
try
{
StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:17818");
options.Urls.Add("http://127.0.0.1:17818");
options.Urls.Add("http://192.168.1.102:17818"); //想远程访问,就要加这句,但这句会因为权限不够而异常,所以下面要配置服务的运行权限
using (WebApp.Start<StartupAppBuilder>(options))
{
File.AppendAllText(@"d:\run.log", "启动WepApi 服务器成功 \r\n");
while (_isrun)
{
Thread.Sleep(2000);
}
}
}
catch (Exception ex)
{
string msg = ex.Message;
if (ex.InnerException != null) msg = msg + "\r\n" + ex.InnerException.Message;
//Console.WriteLine("启动WepApi 服务器异常:" + msg);
//Console.ReadLine();
File.AppendAllText(@"d:\run.log", msg + "\r\n");
}
}
4。生成服务程序后后,在服务管理器中,双击服务,配置“登录”-》”此帐户“-》“某个管权用户”+密码。不过后来我发现,在服务工程的安装文件ProjectInstaller.cs,把Account属性设为LocalSystem也一样,可能是牺牲系统安全性吧。
5。重启服务,在浏览器中http://192.168.1.102:17818/api/values就行了
另外:
webapi总结:
-远程无法访问:
webapi在vs中“发布”到某个Website目录
在IIS中设置这个Website目录为支持.NET4.0,并发布为网站
需要在控制面板中“启用或者关闭WIN功能”中安装IIS->万维网服务->应用程序开发->全勾上
服务中的webapi总结:
-远程无法访问
WebApp.Start(option)之前,要:
options.Urls.Add("http://localhost:17818");
options.Urls.Add("http://127.0.0.1:17818");
options.Urls.Add("http://192.168.1.102:17818");
要给服务工程加上app.manifest文件,加上以后可以以管理员权限运行服务
给服务属性加上本地用户的权限,比如:wg/wg_pwd
* 和服务、IIS、相关的大多数问题,都是权限不够,或者WIN的IIS没装(组件启用关闭)