zoukankan      html  css  js  c++  java
  • 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:WindowsMicrosoft.NETFrameworkv4.0.30319 回车
    切换当前目录,此处需要注意的是,在C:WindowsMicrosoft.NETFramework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例 如果是.net framework2.0则需要输入 cd C:WindowsMicrosoft.NETFrameworkv2.0.50727

    输入 InstallUtil.exe D:G工作WCF寄宿WindowsServiceWcfServiceLibrary1windowsserviceinDebugwindowsservice.exe 回车
    说明:D:G工作WCF寄宿WindowsServiceWcfServiceLibrary1windowsserviceinDebugwindowsservice.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

  • 相关阅读:
    邻项交换排序
    [POJ 2559]Largest Rectangle in a Histogram 单调栈
    最大子序和 单调队列
    单调栈 总结
    计算中缀表达式
    [HYSBZ 2457] 双端队列
    数组的宽度 单调栈
    SVM从入门到精通
    CVPR2018_RotationNet: Joint Object Categorization and Pose Estimation Using Multiviews from Unsupervised Viewpoints
    比特币以及区块链入门
  • 原文地址:https://www.cnblogs.com/Gao1234/p/7279964.html
Copyright © 2011-2022 走看看