网站排名优化培训课程,成都网站制作工作室,做网站毕设答辩问题,一个网站的成本一、webservice 部署只能部署IIS上#xff0c; 比较简单#xff0c;就不做说明了
二、 WCF 部署 1 部署到IIS 跟部署 webservice 部署方法一样的 wcf 部署2 部署到控制台 要以管理员运行vs#xff0c;或者 管理员运行 控制台的exe 在控制器项目中 创建IUserInfoService 接口…一、webservice 部署只能部署IIS上 比较简单就不做说明了
二、 WCF 部署 1 部署到IIS 跟部署 webservice 部署方法一样的 wcf 部署2 部署到控制台 要以管理员运行vs或者 管理员运行 控制台的exe 在控制器项目中 创建IUserInfoService 接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp1
{[ServiceContract]public interface IUserInfoService{[OperationContract]int Add(int a, int b);}
} 实现接口 在app.config中增加 system.serviceModelservicesservice nameConsoleApp1.UserInfoService behaviorConfigurationbehaviorConfiguration!--服务的对象--hostbaseAddressesadd baseAddresshttp://localhost:8000//!--服务的IP和端口号--/baseAddresses/hostendpoint address bindingbasicHttpBinding contractConsoleApp1.IUserInfoService/endpoint!--contract服务契约--/service/servicesbehaviorsserviceBehaviorsbehavior namebehaviorConfigurationserviceMetadata httpGetEnabledtrue//behavior/serviceBehaviors/behaviors/system.serviceModel《《《启动服务
》》》验证是否有效 》》》如果不放在配置文件中 》》》 using (ServiceHost host new ServiceHost(typeof(UserInfoService))){host.AddServiceEndpoint(typeof(IUserInfoService), new WSHttpBinding(), http://localhost:8686/userinfoservice);ServiceMetadataBehavior behavior new ServiceMetadataBehavior();behavior.HttpGetEnabled true;behavior.HttpGetUrl new Uri(http://localhost:8686/userinfoservice/metadata);host.Description.Behaviors.Add(behavior);host.Opened delegate{ Console.WriteLine(服务已启动);};host.Open(); Console.ReadKey();host.Close();}》》》 校验是否成功 部署到winform private void button1_Click(object sender, EventArgs e){ServiceHost Host new ServiceHost(typeof(WCF.Student));//绑定System.ServiceModel.Channels.Binding httpBinding new BasicHttpBinding();//终结点Host.AddServiceEndpoint(typeof(IWCF.IStudent), httpBinding, http://localhost:8002/);if (Host.Description.Behaviors.FindServiceMetadataBehavior() null){//行为ServiceMetadataBehavior behavior new ServiceMetadataBehavior();behavior.HttpGetEnabled true;//元数据地址behavior.HttpGetUrl new Uri(http://localhost:8002);Host.Description.Behaviors.Add(behavior);//启动Host.Open();}}》》》验证 app.config 配置
service nameWCF.Student behaviorConfigurationbehaviorConfiguration!--//服务的对象--hostbaseAddressesadd baseAddresshttp://localhost:5678/!--// 服务的IP和端口号--/baseAddresses/hostendpoint address bindingwsHttpBinding contractIWCF.IStudent/endpoint!--//contract服务契约--/service/servicesbehaviorsserviceBehaviorsbehavior namebehaviorConfigurationserviceMetadata httpGetEnabledtrue/serviceDebug includeExceptionDetailInFaultsFalse//behavior/serviceBehaviors/behaviors/system.serviceModel》》》》验证
WCF 宿主 服务中 》》》 app.config 或者写作code 都行 LocalService充当本地计算机上非特权用户的帐户该帐户将匿名凭据提供给所有远程服务器。
NetworkService提供广泛的本地特权的帐户该帐户将计算机的凭据提供给所有远程服务器。
LocalSystem服务控制管理员使用的帐户它具有本地计算机上的许多权限并作为网络上的计算机。
User由网络上特定的用户定义的帐户。如果为 ServiceProcessInstaller.Account 成员指定 User则会使系统在安装服务时提示输入有效的用户名和密码除非您为 ServiceProcessInstaller 实例的 Username 和 Password 这两个属性设置值。 删除服务
sc delete 服务名称
window 服务调试 正常是无法调试的可以在window服务中做调整 如下 connectionStrings!--服务开启时间--add nameServiceStart connectionString9:00/!--服务执行间隔(秒)--add nameServiceInterval connectionString60/!--服务停止时间--add nameServiceEnd connectionString17:00/!--服务是否开启1开启、0关闭--add nameServiceIsOn connectionString0//connectionStringspublic partial class Service1 : ServiceBase{//服务配置项private static string ServiceStart ConfigurationManager.ConnectionStrings[ServiceStart].ConnectionString;private static int ServiceInterval Convert.ToInt32(ConfigurationManager.ConnectionStrings[ServiceInterval].ConnectionString);private static string ServiceEnd ConfigurationManager.ConnectionStrings[ServiceEnd].ConnectionString;private static string ServiceIsOn ConfigurationManager.ConnectionStrings[ServiceIsOn].ConnectionString;//服务定时器private System.Timers.Timer timer new System.Timers.Timer();public Service1(){InitializeComponent();}/// summary/// 开启服务/// /summary/// param nameargs/paramprotected override void OnStart(string[] args){if (ServiceIsOn 1){timer.Enabled true;timer.Interval ServiceInterval * 1000;//执行间隔时间,单位为毫秒; 这里实际间隔为1秒钟 timer.Start();timer.Elapsed new System.Timers.ElapsedEventHandler(Procedure_Timer);Procedure_Timer(null, null);}}/// summary/// 定时器执行/// /summary/// param namesender/param/// param namee/paramprivate void Procedure_Timer(object sender, System.Timers.ElapsedEventArgs e){timer.Enabled false;TestClass service new TestClass();DateTime newDate DateTime.Now;//获取当前时间int intHour newDate.Hour;int intMinute newDate.Minute;//开始时间string[] startStamp ServiceStart.Split(:);int startHour Convert.ToInt32(startStamp[0]);int startMinute Convert.ToInt32(startStamp[1]);//结束时间string[] endStamp ServiceEnd.Split(:);int endHour Convert.ToInt32(endStamp[0]);int endMinute Convert.ToInt32(endStamp[1]);int newTime (intHour * 100) intMinute;int startTime (startHour * 100) startMinute;int endTime (endHour * 100) endMinute;// 每天定点在一个时间段内执行if (newTime startTime newTime endTime){//执行业务代码//}timer.Enabled true;}/// summary/// 关闭服务/// /summaryprotected override void OnStop(){timer.Stop();}}window 服务 卸载
》》》1 在cmd中 录入 sc delete 服务名称 注意注意 是服务名称 不是显示名称
这种方法 不需要 停车服务可以直接干掉
》》》2、 代码实现 卸载前一定要停止掉Windows服务否则需要重启或注销电脑。代码无法停止服务时使用services.msc来停止。 获取系统所有window 服务 ServiceController[] services ServiceController.GetServices();
》》》》“Service1.cs”的代码增加服务启动日志和停止日志。
using CommonUtils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;namespace ADemoWinSvc
{public partial class Service1 : ServiceBase{public Service1(){InitializeComponent();}protected override void OnStart(string[] args){GLog.WLog(服务已启动);}protected override void OnStop(){GLog.WLog(服务已停止);}}
}》》》》 工具类
using System;
using System.IO;namespace CommonUtils
{public static class GLog{static object _lockObj new object();public static void WLog(string content){lock (_lockObj){string curPath System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName);string logDir Logs;string logDirFullName Path.Combine(curPath, logDir);try{if (!Directory.Exists(logDirFullName))Directory.CreateDirectory(logDirFullName);}catch { return; }string fileName Logs DateTime.Now.ToString(yyyy-MM-dd) .txt;string logFullName Path.Combine(logDirFullName, fileName);try{using (FileStream fs new FileStream(logFullName, FileMode.Append, FileAccess.Write))using (StreamWriter sw new StreamWriter(fs))sw.WriteLine(DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss.fff) content);}catch { return; }}}}
}上面代码都是 服务中的
下面代码 是winForm程序中的
using CommonUtils;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace Windows服务操作
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}/// summary/// windows服务名/// /summarystatic string _winSvcName ADemoWinSvc;/// summary/// windows服务对应的exe 名/// /summarystatic string _winSvcExeName ADemoWinSvc.exe;private void btnSetup_Click(object sender, EventArgs e){try{//是否存在服务if (ServiceUtil.ServiceIsExisted(_winSvcName)){//已存在检查是否启动if (ServiceUtil.IsRun(_winSvcName)){//服务是已启动状态lblMsg.Text [001]服务是已启动状态;}else{//未启动则启动ServiceUtil.StarService(_winSvcName);lblMsg.Text [002]服务是已启动状态;}}else{//不存在则安装IDictionary mySavedState new Hashtable();string curPath System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName);string apppath Path.Combine(curPath, _winSvcExeName);ServiceUtil.InstallService(mySavedState, apppath);lblMsg.Text [003]服务是已启动状态;//安装后并不会自动启动。需要启动这个服务ServiceUtil.StarService(_winSvcName);lblMsg.Text [004]服务是已启动状态;}}catch (Exception ex){MessageBox.Show(ex.Message);}}private void btnUninstall_Click(object sender, EventArgs e){//** 卸载服务最重要的是先停止否则电脑需要重启或注销 **try{//是否存在服务if (!ServiceUtil.ServiceIsExisted(_winSvcName)){MessageBox.Show(服务不存在不需要卸载);return;}//如果服务正在运行停止它if (ServiceUtil.IsRun(_winSvcName)){ServiceUtil.StopService(_winSvcName);}//再检查一次是否在运行if (ServiceUtil.IsRun(_winSvcName)){MessageBox.Show(服务无法停止,请手动停止这个服务);return;}//卸载ServiceUtil.UnInstallServiceByName(_winSvcName);lblMsg.Text [005]服务已卸载;}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}》》》》》 AssemblyInstaller 帮助文件 https://learn.microsoft.com/zh-cn/dotnet/api/system.configuration.install.assemblyinstaller?viewnetframework-4.8.1
》》》》 工具类
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration.Install;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;namespace CommonUtils
{/// summary/// windows服务操作工具类/// /summarypublic static class ServiceUtil{/// summary/// 服务是否正在运行/// /summary/// param namename/param/// returns/returnspublic static bool IsRun(string name){bool IsRun false;try{if (!ServiceIsExisted(name)) return false;var sc new ServiceController(name);if (sc.Status ServiceControllerStatus.StartPending || sc.Status ServiceControllerStatus.Running){IsRun true;}sc.Close();}catch{IsRun false;}return IsRun;}/// summary/// 启动服务/// /summary/// param namename/param/// returns/returnspublic static bool StarService(string name){try{var sc new ServiceController(name);if (sc.Status ServiceControllerStatus.Stopped || sc.Status ServiceControllerStatus.StopPending){sc.Start();sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10));}else{}sc.Close();return true;}catch (Exception ex){throw ex;}}/// summary/// 停止服务(有可能超时)/// /summary/// param namename/param/// returns/returnspublic static bool StopService(string name){try{var sc new ServiceController(name);if (sc.Status ServiceControllerStatus.Running || sc.Status ServiceControllerStatus.StartPending){sc.Stop();//停止服务超时时间56秒。sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 56));}else{}sc.Close();return true;}catch (Exception ex){throw ex;}}/// summary/// 是否存在/// /summary/// param nameserviceName/param/// returns/returnspublic static bool ServiceIsExisted(string serviceName){ServiceController[] services ServiceController.GetServices();foreach (ServiceController s in services)if (s.ServiceName.ToLower() serviceName.ToLower())return true;return false;}/// summary/// 安装/// /summary/// param namestateSaver/param/// param namefilepath/parampublic static void InstallService(IDictionary stateSaver, string filepath){try{AssemblyInstaller myAssemblyInstaller new AssemblyInstaller();myAssemblyInstaller.UseNewContext true;myAssemblyInstaller.Path filepath;myAssemblyInstaller.Install(stateSaver);myAssemblyInstaller.Commit(stateSaver);myAssemblyInstaller.Dispose();}catch (Exception ex){throw ex;}}/// summary/// 使用路径卸载(有时候不便于用路径来卸载则使用SC DELETE 名称来卸载)/// /summary/// param namefilepath/parampublic static void UnInstallService(string filepath){try{AssemblyInstaller myAssemblyInstaller new AssemblyInstaller();myAssemblyInstaller.UseNewContext true;myAssemblyInstaller.Path filepath;myAssemblyInstaller.Uninstall(null);myAssemblyInstaller.Dispose();}catch (Exception ex){throw ex;}}/// summary/// 使用windows服务名卸载/// /summary/// param nameWinServiceName/parampublic static void UnInstallServiceByName(string WinServiceName){ProcessStartInfo pStart new ProcessStartInfo(sc.exe);Process pRoc new Process();pStart.Arguments delete WinServiceName;pStart.UseShellExecute false;pStart.CreateNoWindow false;pRoc.StartInfo pStart;pRoc.Start();pRoc.WaitForExit();}}
}WebAPI 部署
部署 IIS
跟wcf 、webservice 一样。
部署 控制台
安装 static void Main(string[] args){RegisterWebApi(http://localhost:4554);}private static void RegisterWebApi(string url){var config new HttpSelfHostConfiguration(url);config.Routes.MapHttpRoute(API Default, api/{controller}/{action}/{id},new { id RouteParameter.Optional });using (HttpSelfHostServer server new HttpSelfHostServer(config)){server.OpenAsync().Wait();Console.WriteLine(Press Enter to quit.);Console.ReadLine();}}webapi 路由 一般没有 action 符合 RESETFUL 风格 》》》》》 部署到 winForm 安装如下 添加控制器》》》
window 服务 也一样的
上面都说 selfhost
下面介绍》》》》 OwinSelfHost
OwinSelfHost
安装
注意注意 注意 是 Microsoft.AspNet.WebApi.oWinSelfHost
》》》添加Owin启动类 》》创建好 Owin Startup 如下
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID316888// 有关如何配置应用程序的详细信息请访问 http://go.microsoft.com/fwlink/?LinkID316888HttpConfiguration config new HttpConfiguration();config.Routes.MapHttpRoute(name: DefaultApi,routeTemplate: api/{Controller}/{action}/{id},defaults: new{id RouteParameter.Optional});app.UseWebApi(config);》》》》 新建控制器 》》》在Program中写入如下代码 static void Main(string[] args){string baseAddress http://localhost:9527/;using (WebApp.Start(url: baseAddress)){Console.WriteLine(请开始您的表演);Console.ReadLine();}}》》》 验证
webapi 部署到 window 服务
首先 新建 window服务程序 步骤跟上面一样的 至少 服务启动 要 OnStart 》》》》安装 服务
》》》 window Form 部署方法一样