WCF寄宿控制台.WindowsService.WinFrom.WebAPI寄宿控制台和windows服务
先建立wcf类库.会默认生成一些试用代码.如下:
public class Service1 { public string GetData(int value)
{
return string.Format("You entered: {0}", value);
} }
寄宿控制台.代码如下
using System.ServiceModel; using WcfServiceLibrary1; ServiceHost serviceHost = new ServiceHost(typeof(Service1));
if (serviceHost.State != CommunicationState.Opened)
{
serviceHost.Open();
} Console.WriteLine("WCF 服务正在运行......");
Console.WriteLine("输入回车键 <ENTER> 退出WCF服务");
Console.ReadLine();
serviceHost.Close();
寄宿winform如下:
建立winform项目.会默认生成form1窗体
using System.ComponentModel;
using System.ServiceModel; using WcfServiceLibrary1; ServiceHost serviceHost = null;
BackgroundWorker worker = null; public Form1()
{
InitializeComponent();
worker = new BackgroundWorker();
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.DoWork += new DoWorkEventHandler(worker_DoWork); if (!worker.IsBusy)
{
worker.RunWorkerAsync();
}
} void worker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
serviceHost = new ServiceHost(typeof(Service1));
if (serviceHost.State != CommunicationState.Opened)
{
serviceHost.Open();
} e.Result = "正常";
}
catch (Exception ex)
{
e.Result = ex.Message;
}
} void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Result != null)
{
if (e.Result.ToString() == "正常")
{
tssTips.Text = "服务正在进行侦听......";
}
else
{
tssTips.Text = string.Format("错误:{0}", e.Result);
} lblTips.Text = tssTips.Text;
}
//错误处理
}
寄宿WindowService
添加WindowService类库
Service1如下:
using System.ServiceModel;
using System.ServiceProcess; protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
try
{
serviceHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1));
if (serviceHost.State != CommunicationState.Opened)
{
serviceHost.Open();
}
}
catch (Exception ex)
{
//LogTextHelper.Error(ex);
} // LogTextHelper.Info(Constants.ServiceName + DateTime.Now.ToShortTimeString() + "已成功调用了服务一次。"); //LogTextHelper.Info(Constants.ServiceName + "已成功启动。");
}
/*
选中service1添加安装程序
选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem
选中serviceInstaller1组件,查看属性
设置ServiceName的值, 该值表示在系统服务中的名称
设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动
设置Description,添加服务描述
点击 开始,运行中输入cmd,获取命令提示符
win7需要已管理员的身份启动,否则无法安装
输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车
切换当前目录,此处需要注意的是,在C:\Windows\Microsoft.NET\Framework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例 如果是.net framework2.0则需要输入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
输入 InstallUtil.exe D:\G工作\WCF寄宿WindowsService\WcfServiceLibrary1\windowsservice\bin\Debug\windowsservice.exe 回车
说明:D:\G工作\WCF寄宿WindowsService\WcfServiceLibrary1\windowsservice\bin\Debug\windowsservice.exe 示项目生成的exe文件位置
卸载很简单,打开cmd, 直接输入 sc delete WinServiceTest便可
*/
如果想要测试WCF是否正常运行
新建一个控制台程序.右键添加服务引用
ip地址在WCF类库中如下:
<service name="WcfServiceLibrary1.Service1">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
</baseAddresses>
</host>
接下来是WEBAPI的寄宿
WEBAPI相比WCF 前者是REST架构.后者是SOAP架构.在选择宿主的时候就能看出WEBAPI的轻量级
新建控制台程序
nuget 安装 SelfHost
static void Main(string[] args)
{ var config = new HttpSelfHostConfiguration("http://localhost:8080"); config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional }); using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
} public class Product
{
public string Name { get; set; }
public string Price { get; set; }
}
public class ProductsController : ApiController
{
static List<Product> products = new List<Product>() {
new Product(){Name="product1",Price="2.55"},
new Product(){Name="product2",Price="2.3"}
};
public IEnumerable<Product> Get()
{
return products;
}
}
运行之后可以通过地址栏调用或者Ajax
地址栏如下
http://localhost:8080/api/products/
在这里.我们发现只要注册路由.然后写一个控制器.就可以完成WEBAPI的功能.非常轻盈
新建WindowsService服务
安装SelfHost
using System.ServiceProcess;
using System.Web.Http;
using System.Web.Http.SelfHost; 在WindowService.Service中代码如下: public partial class Service1 : ServiceBase
{ private HttpSelfHostServer _server;
private readonly HttpSelfHostConfiguration _config;
public const string ServiceAddress = "http://localhost:1345"; public Service1()
{
InitializeComponent();
_config = new HttpSelfHostConfiguration(ServiceAddress);
_config.Routes.MapHttpRoute("DefaultApi",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
} protected override void OnStart(string[] args)
{ #region Web Api监听
_server = new HttpSelfHostServer(_config);
_server.OpenAsync();
#endregion } protected override void OnStop()
{
_server.CloseAsync().Wait();
_server.Dispose();
} public class ApiServiceController : ApiController
{
[HttpGet]
public string Get()
{
return "Hello from windows service!";
}
} }
http://localhost:1345/api/products/ApiService
WCF寄宿控制台.WindowsService.WinFrom.WebAPI寄宿控制台和windows服务的更多相关文章
- Topshelf+Quartz3.0基于控制台应用程序快速开发可调度windows服务
1.TopShelf TopShelf是一个开源的跨平台的宿主服务框架.可通过.Net Core/.Net Framwork控制台应用程序快速开发windows服务,更加便于服务调试. 本文基于.Ne ...
- 控制台程序转化为windows服务
首先我们创建一个控制台应用程序WriteLog,然后添加windows服务LogService 新增的windows服务切换到代码视图,我这边用log4net进行的日志的记录 OnStart方式是服务 ...
- 微软 WCF的几种寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服务
WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详 ...
- WCF服务寄宿IIS与Windows服务 - C#/.NET
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...
- WCF服务寄宿IIS与Windows服务
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的 ...
- WCF(四)windows服务寄宿
WCF常用的寄宿方式除了IIS寄宿外,还有一种方式是寄宿到windows服务中,跟随系统启动而启动. 1.在项目中选择“添加”--“新建windows服务” 2.打开系统生成的设计界面的代码,引用“u ...
- WCF寄宿windows服务一
如果只是寄宿单个wcf服务,方法很简单,步骤:1.创建好一个windows服务.关于windows服务内容见:http://www.cnblogs.com/zhaow/p/7866916.html2. ...
- 编写寄宿于windows服务的WCF服务
由于业务中有些任务需要在后台静默长期运行,或者有些服务队响应的要求比较苛刻,这样的WCF服务就不适合寄宿于IIS中.IIS每隔一段时间w3wp进程会闲置超时,造成服务的运行停止,因此这种耗时或者定时任 ...
- 将WCF寄宿在托管的Windows服务中
在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能 ...
随机推荐
- MAC的VMWare CentOS 6.8命令笔记
1.图形界面切换到命令行界面 真正的Linux切换界面使用命令, Ctrl + Alt + Fn (1,2,3,4,5,6) Wondows平台 Ctrl + option + F ...
- mysql之 xtrabackup原理、备份日志分析、备份信息获取
一. xtrabackup备份恢复工作原理: extrabackup备份简要步骤 InnoDB引擎很大程度上与Oracle类似,使用redo,undo机制,XtraBackup在备份的时候,以read ...
- WPF案例:如何设计历史记录查看UI
(CSDN博客目前不支持外链, 只能纯文字) 设计WPF的UI,一般遵循下面的步骤: 1.首先分析数据结构 2.根据数据结构选择合理控件 3.定制外观 具体对于历史记录查看UI, 我们可以得知: 1. ...
- SPI编程1:用户空间的读写操作
spi_device 虽然用户空间不需要直接用到spi_device结构体,但是这个结构体和用户空间的程序有密切的关系,理解它的成员有助于理解SPI设备节点的IOCTL命令,所以首先来介绍它.在内核中 ...
- HTML5离线应用
本地缓存与浏览器缓存 本地缓存是为整个web应用程序服务的而网页缓存值服务与单个网页 本地缓存是为你指定的资源进行缓存,而我们不知道网页缓存会春初哪些内容,他是不安全不可靠的 在没有网络的时候还是可以 ...
- Tiny4412 Linux 内核配置流程
1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips ...
- python之数据库的操作(课前准备)
数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 上面的就是数据库的定义. 何为数据库,简单的来说,就是我们的大型数据的存放地点. 而我们学习的呢就是数据库的访问层的制作. 何为 ...
- 解决html中的乱码问题
1.最简单粗暴的方法就是加一个meta标签,不过值得我们注意的是我们的meta标签是与我们的head标签是同一级的,所以千万不能将meta标签加到我们的head标签中. <meta http-e ...
- 地图投影的N种姿势(转载)
转载地址:http://blog.sina.com.cn/s/blog_517eed9f0102w4rm.html 一篇题为<我们看到的地图一直都错得离谱……>的文章在朋友圈里莫名流行起来 ...
- Absolute Layout
----------------siwuxie095 根面板 contentPane 的默认布局为 Border Layout,将其 切换为 Absolute Layout Absolute Layo ...