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沒裝(組件啓用關閉)