webapi winform 寄宿 - CSDN
精华内容
参与话题
  • winform寄宿 WebApi

    千次阅读 2019-06-17 14:28:45
    winform寄宿webapi,在winform中添加如下: Thread td = new Thread(new ThreadStart( () => { try { ...

     winform中寄宿webapi,在winform中添加如下:

                Thread td = new Thread(new ThreadStart(
                    () =>
                    {
                        try
                        {
                            Assembly.Load("WebApi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
                            HttpSelfHostConfiguration configuration = new HttpSelfHostConfiguration("http://localhost/selfhost");
                            configuration.TransferMode = TransferMode.Streamed;
                           
                            HttpSelfHostServer httpServer = new HttpSelfHostServer(configuration);
                            
                                httpServer.Configuration.Routes.MapHttpRoute(
                                    name: "DefaultApi",
                                    routeTemplate: "api/{controller}/{id}",
                                    defaults: new { id = RouteParameter.Optional });
    
                                httpServer.OpenAsync().Wait();
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                 ));
                td.IsBackground = true;
                Console.WriteLine(td.IsBackground);
                td.Start();
    展开全文
  • winform宿主webapi

    千次阅读 2019-05-16 20:19:07
    引用的Dll 添加配置文件packages.config <?xml version="1.0" encoding="utf-8"?...package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net461" /> <p...

    引用的Dll

    添加配置文件packages.config

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net461" />
      <package id="Microsoft.AspNet.WebApi.Core" version="5.2.6" targetFramework="net461" />
      <package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.6" targetFramework="net461" />
      <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net461" />
    </packages>

    新建Controller文件夹里面的ValuesConntroller.cs类

     [RoutePrefix("api/values")]
        public class ValuesController : ApiController
        {
            [HttpGet]
            [Route("st")]
            public string GetServerTim(string id)
            {
                try
                {
                    string result = Program.FormCheck.GetJsonById(id);
    
                    return result;
                }
                catch
                {
                    return "failed :"+ id;
                }
            }
            protected HttpRequestBase GetRequest()
            {
                HttpContextBase context = (HttpContextBase)Request.Properties["MS_RequestContext"];//获取传统context
    
                HttpRequestBase request = context.Request;//定义传统request对象
    
                return request;
            }
            private string GetClientIp(HttpRequestMessage request = null)
            {
                request = request ?? Request;
    
                if (request.Properties.ContainsKey("MS_HttpContext"))
                {
                    return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
                }
                else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
                {
                    RemoteEndpointMessageProperty prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
                    return string.Format("Address:{0}, Port: {1}", prop.Address, prop.Port.ToString());
                }
                else if (HttpContext.Current != null)
                {
                    return HttpContext.Current.Request.UserHostAddress;
                }
                else
                {
                    return null;
                }
            }
        }

    Program类中这样写

     public static class Program
        {
            public static CheckInterface FormCheck = null;
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                FormCheck = new CheckInterface();
                Application.Run(FormCheck);
            }
        }

    Form中这样写

      HttpSelfHostConfiguration config = null;
            HttpSelfHostServer server = null;
          
            public CheckInterface()
            {
                InitializeComponent();
                renderDgv_Interface.AllowUserToAddRows = false;
            }
    
            private void CheckInterface_Load(object sender, EventArgs e)
            {
                RefreshWebApi();
            }
            private void RefreshWebApi()
            {
                config = new HttpSelfHostConfiguration(Url);// "http://192.168.0.163:8085");
                config.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
                server = new HttpSelfHostServer(config);
                server.OpenAsync().Wait();
            }

    启动之后浏览器访问http://192.168.0.163:8085/api/values?id=001即可看到weiapi接口已经成功在Winform上运行。

    如果想要访问Webapi执行方法与WinformUI界面交互,用委托另外还要判断几个属性

     

      delegate void DAddRdgvData(List<JsonData> DataSourse);
    
            private void AddRdgvData(List<JsonData> DataSourse)
            {
                if (renderDgv_Interface.InvokeRequired)
                {
                    while (!this.renderDgv_Interface.IsHandleCreated)
                    {
                        if (this.renderDgv_Interface.Disposing || this.renderDgv_Interface.IsDisposed)
                            return;
                    }
                    DAddRdgvData d = new DAddRdgvData(AddRdgvData);
                    this.renderDgv_Interface.Invoke(d, new object[] { DataSourse });
                }
                else
                {
    
                    for (int i = 0; i < DataSourse.Count; i++)
                    {
                        if (ListId.Contains(DataSourse[i].Id))
                        {
                            for (int j = 0; j < renderDgv_Interface.RowCount; j++)
                            {
                                if (renderDgv_Interface.Rows[j].Cells["rdgv_Interface_id"].Value != null)
                                {
    
                                    if (DataSourse[i].Id.Equals(renderDgv_Interface.Rows[j].Cells["rdgv_Interface_id"].Value.ToString()))
                                    {
                                        renderDgv_Interface.Rows[j].Cells["rdgv_Name"].Value = DataSourse[i].Name;
                                        renderDgv_Interface.Rows[j].Cells["rdgv_Time"].Value = DataSourse[i].Time;
                                        renderDgv_Interface.Rows[j].Cells["Rdgv_NumberTimes"].Value = DataSourse[i].Numberoftimes;
                                        renderDgv_Interface.Rows[j].Cells["rdgv_Return"].Value = DataSourse[i].CheckResult;
                                    }
    
                                }
                            }
                        }
                        else
                        {
                           //这里向控件传数据
                        }
                    }
                }
            }

    展开全文
  • WebApi自宿主应用

    千次阅读 2013-12-02 09:45:59
     WebAPI 托管有两种方式一种是通过IIS,一种就是通过寄宿在其他程序,例如window服务,window应用程序等等,前者主要用于发布和最后调试使用,后者一般多在开发测试环节。  我们知道WCF服务可以通过System

    WebApi 自宿主一例,关于Web Api的基础入门和相关概念可以参考

    官方入门教程

    CodeProject入门例子

     

    1. 简介

      WebAPI 托管有两种方式一种是通过IIS,一种就是通过寄宿在其他程序,例如window服务,window应用程序等等,前者主要用于发布和最后调试使用,后者一般多在开发测试环节。

      我们知道WCF服务可以通过System.ServiceModel.ServiceHost来加载和打开服务,那么web api可以通过System.Web.Http.SelfHost.HttpSelfHostServer来加载打开API服务

      在使用System.Web.Http.SelfHost.HttpSelfHostServer来打开服务的时候,需要通过HttpSelfHostConfiguration来配置下主机一些参数(主要是服务地址)

    2.实例

     1) 通过VS2012新建一个window form工程,然后通过Nuget获取WebAPI SeltHost库,下载安装后的包:

       

        引用命名空间:

    using System.Web.Http;
    using System.Web.Http.SelfHost;  

      声明变量:主机服务和配置实例对象 

     

    private HttpSelfHostConfiguration _config = null;
    private HttpSelfHostServer _serverhost = null;

    初始化:

     

    _config = new HttpSelfHostConfiguration("http://localhost:5555");

    API路由 +打开服务

    复制代码
                _config.Routes.MapHttpRoute(
                    "API Default",
                    "api/{controller}/{username}",
                    new { username = RouteParameter.Optional });
    
                //start 
                _serverhost = new HttpSelfHostServer(_config);
                _serverhost.OpenAsync().Wait();
    复制代码

    模型类:

    复制代码
        public class UserModel {
            [Required]
            [StringLength(16,MinimumLength=4)]
            public string UserName { get; set; }
    
            [Required]
            [StringLength(16,MinimumLength=4)]
            public string Password { get; set; }
    
            [Required]
            [RegularExpression(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")]
            public string Email { get; set; }
    
            [Required]
            [Range(18,36)]
            public int Age { get; set; }
    
        }
    复制代码

     接下来我们需要设计一个测试客户端来验证我们的API

     

    2) 新建一个window form工程,依旧是通过NuGet获取WebAPI Client库(用于桌面客户端程序请求API服务)

     声明一个HttpClient对象,并初始化API服务地址

     

    private HttpClient _httpCLient = new HttpClient();
    _httpCLient.BaseAddress =new Uri( @"http://localhost:5555");

    调用

    复制代码
            private void GetUsers() {
                HttpResponseMessage responseMsg = _httpCLient.GetAsync("api/user").Result;
                responseMsg.EnsureSuccessStatusCode();
                var users = responseMsg.Content.ReadAsAsync<IEnumerable<UserModel>>().Result;
                string msg = string.Empty;
                foreach (var o in users) {
                    msg += string.Format("Name:{0} , Email:{1} , Age:{2}", o.UserName, o.Email, o.Age);
                    msg += System.Environment.NewLine;
                }
    
                MessageBox.Show(msg);
            }
    复制代码

     

    程序运行效果图:

    点击initConfig(配置/打开服务) ---- 》 点击Get( 测api/User,获取所有用户信息)

     

    源码下载 ,工程基于VS2012,NET FROMWORK4.5

    展开全文
  • 创建一个寄宿于控制台程序的WebAPi

    千次阅读 2016-02-22 15:05:07
    由于项目需要创建一个寄宿于控制台程序的WebAPI,看了一通资料,终于完成了,下面记录一下过程,备忘吧。 如果需要补充asp.net webApi的基础知识请查看微软官方知识网站:...

      由于项目需要创建一个寄宿于控制台程序的WebAPI,看了一通资料,终于完成了,下面记录一下过程,备忘吧。

    如果需要补充asp.net webApi的基础知识请查看微软官方知识网站:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api

    1.打开VS2013,新建一个空的控制台程序名为ConsoleApp。

    2.为该项目添加一个创建SelfHost WebAPI 必须的NuGet安装包,方法是右键项目下的References,选择“Manage NuGet Packages...”,在打开的NuGet管理界面的搜索框中输入“SelfHost”,然后选择“Microsoft ASP.NET Web API 2.2 Self Host”,点击安装,如图所示,在安装的过程中会弹出一个对话框询问你是否许可安装一些依赖的类库,我们选择同意,然后就安装完成了。


    3.为项目添加一个类文件命名为“Product.cs”。

    类的内容如下:

        public class Product
        {
            public string Name { get; set; }
            public string Price { get; set; }
        }
    4. 为项目添加一个类文件命名为“ProductsController.cs”,让其继承ApiContoller(需要添加System.Web.Http的命名空间)。

    ProductsController.cs的内容如下:

        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;
            }
        }
    
    
    5.最后一步就是在控制台程序的Main函数中添加如下代码即可了(要添加system.web.Http和system.web.Http.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();
                }
            }
    <span style="white-space: pre;">	</span>到此为止整个项目就完成了,但是一运行就会发现有异常,呵呵,忘记说了,必须要以管理员身份运行此程序才行,如果用VS调试运行也必须要以管理员身份
    启动VS才能进行调试运行的。下面我们就打开Chrome浏览器实验一把,结果如下,说明成功了。




    展开全文
  • WebApi的几种寄宿方式

    千次阅读 2015-07-18 00:57:02
    ASP.NET Web API具有与ASP.NET MVC类似的编程方式,相关内容较少,如下通过一个实例讲解WebApi的集中寄宿方式。  目录  构建解决方案  定义Web API  以Web Host方式寄宿Web API  以Self Host方式寄宿Web...
  • webapi寄宿winform

    2020-03-27 23:33:11
    webapi寄宿winform的实现,无须配置IIS,设置简单方便,.net4.5.2,可以扩展使用
  • c# WebApi Winform托管

    2020-07-30 23:33:25
    这是一个WebApiWinform项目的托管示例。 展示了子线程访问ui。
  • DotNET技術

    千次阅读 2013-04-06 13:59:27
    【C#利用后台动态加载数据】Winform“防界面卡死” 从数据到代码——基于T4的代码生成方式 从数据到代码——通过代码生成机制实现强类型编程[上篇] 从数据到代码——通过代码生成机制实现强类型编程[下篇] 创建...
  • C# 第三方类库使用目录

    千次阅读 2017-06-08 16:10:49
    基于.NET平台常用的框架整理 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前...
  • C# WebAPI 集成WINDOWS验证

    千次阅读 2018-12-13 20:45:33
    首先在WEB.CONFIG文件中,增加如下配置,以开启WINDOWS身份验证,配置如下: &lt;authentication mode="Windows"&gt; &lt;/authentication&gt; 然后在需要认证授权后才能访问的...
  • 解决WCF寄宿WINFORM的跨域请求问题

    千次阅读 2018-05-02 10:05:17
    本人在项目中遇到的问题是这样的:WCF服务寄宿于Winfrom应用程序,通过public ServiceHost host = new ServiceHost(typeof(ByuWCFService.ByuDataService));host.Open();的方式来开启WCF服务,[OperationContract]...
  • .NET方面的框架的整理和总结

    千次阅读 2018-05-20 23:48:35
    引用 http://www.cnblogs.com/LowKeyCXY/p/8005247.html自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些...
  • c# host web服务器

    千次阅读 2014-10-20 17:33:42
    No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没错我们可以说它是一个工具,不就是一个应用程序吗?谁不会写应用程序呀,等着,三分钟就搞...
  • WCF(一) Windows Communication Foundation 概述 WCF被推出来很久了,但是对于刚刚接触WCF的人们来说,想必会有以下问题: WCF是什么?为什么我们需要WCF?WCF能给我们带来什么?学习WCF的难易度如何?...
  • 为了封装一个聊天模块,这些天真是绞尽脑汁,不过也有很多收获,比如下面这个自托管的最简配置,不仅内置了signalr服务,还内置了webapi服务,静态资源文件服务。为了分享这份喜悦,直接上代码首先是托管应用start类...
  • Windows Workflow技术

    千次阅读 2007-05-16 10:04:00
    Windows Workflow技术 1 概念... 22 Windows Workflow.. 42.1 .Net Framework 3.0 简介... 42.2 Windows Workflow Foundation简介... 53 开发环境搭建... 54 Workflow模型... 64.1 
  • 我们在开发完Asp.Net WebAPI程序后,可以使用WebHost寄宿方式或者SelfHost寄宿方式来部署Asp.Net WebAPI。所谓WebHost寄宿就是通过Asp.Net来实现;所谓SelfHost就是可以通过控制台、WinForm、WPF等方式寄宿。下面...
  • 您所在的位置:读书频道 > 设计开发 > .Net系列 > 3.3.2 HttpSelfHostServer(1) 3.3.2 HttpSelfHostServer(1) 2014-08-19 21:39 蒋金楠 电子工业出版社 字号:T | T 综合评级: 想读(7) 在读(2) 已读(0) ...
  • http://www.cnblogs.com/lovecherry/archive/2005/05/19/158784.html 一步一步学Remoting之一:从简单开始 一、Remoting的优缺点? 优点: 1、能让我们进行分布式开发 2、Tcp通道的Remoting速度非常快 3、虽然是...
  • 什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包括:CLS、CTS(CLI)、FCL、...
1 2 3 4 5 ... 8
收藏数 146
精华内容 58
热门标签
关键字:

webapi winform 寄宿