c#实现在win服务中承载webapi并支持远程访问

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没装(组件启用关闭)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值