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

posted @ 2017-08-03 15:27  高1234  阅读(952)  评论(0编辑  收藏  举报