【问题标题】:What is self hosting ? Can it be used with webapi to communicate with devices?什么是自托管?可以和webapi一起使用与设备通信吗?
【发布时间】:2014-11-02 22:27:39
【问题描述】:

我要求我的 web 服务(用 WebAPI 编写)应该将一些数据打印到与我的服务器关联的打印机。

(简而言之,我的客户端会将一些数据发送到我的 WebAPI 服务,我的域(服务器域)中的打印机应该打印它。)

我在 IIS 中托管服务并使用 PrintManager 打印数据。但是,我们似乎不应该这样做,因为托管在 IIS 中的 Web 服务实际上不应该与本地硬件通信(这似乎不是推荐的方法)。

虽然有很多关于自托管 WCF 或 WebAPI 的教程,但我正在尝试找出在这种情况下是否可以使用自托管。

我能否在 Windows 服务中自行托管我的 WebAPI 应用程序,以便该服务有权访问打印机?

【问题讨论】:

  • 简而言之...是的,您可以自行托管 Web API 解决方案...这真的是您的问题还是您实际上在寻找其他东西?如果这确实是您的问题,请在下面查看我的答案。
  • “但是,我们似乎不应该这样做,因为托管在 IIS 中的 Web 服务实际上不应与本地硬件通信(这似乎不是推荐的方法)。”你能解释一下为什么我们不应该让托管在 IIS 中的 web svc 与本地硬件通信吗?为什么自托管应用程序比 IIS 上托管的应用程序更适合访问本地硬件?

标签: c# .net asp.net-web-api windows-services self-hosting


【解决方案1】:

自托管是在您控制的环境(WinForms、控制台、Windows 服务等)中托管您的 Web API 的能力。

所以,简而言之,是的,您可以自行托管 Web API 解决方案,并且可以使用类似于以下的代码来实现:

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("Running on port 8080 - Press Enter to quit.");
    Console.ReadLine();
}

【讨论】:

  • 所以自托管给了我访问本地硬件的优势。谢谢你
  • 对两个 cmets 都正确。我只是表明您没有 HAVE 托管服务(可以是任何类型的可执行文件),但通常这将是一个 Windows 服务设置为在 Windows 启动等时自动运行。
  • @Belogix 我可以在自托管服务中使用域名而不是本地主机吗?请回复并举例说明
  • 是的,@BhavinPatel,这可能不是 localhost。只要您可以将流量路由到计算机,它就会起作用。您可以查看您的“主机”文件来欺骗域名等。您可以探索很多选项。
【解决方案2】:

自托管 wcf 服务意味着您无需依赖 IIS 来启动服务器,而是自己作为主机启动服务。

这是MSDN 对主机的评价:

主机应用程序的作用是启动和停止服务,侦听来自客户端的请求,将这些请求定向到服务并将响应发送回客户端。

主机应用程序可以是控制台应用程序、Windows 服务或其他任何东西。

所以要回答您的问题,是的,您可以为此目的使用服务。

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2016-05-29
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多