如何使 ASP.NET Web API Web 服务在本地网络中可用

Posted

技术标签:

【中文标题】如何使 ASP.NET Web API Web 服务在本地网络中可用【英文标题】:How to make ASP.NET Web API web-service available in local network 【发布时间】:2013-08-29 19:57:02 【问题描述】:

我即将编写一个 JSON 网络服务(VS Express 2012 - ASP.NET WEB API),现在我想通过尝试从我的 android 应用程序获取数据来测试它。所以我试图通过这样做使我的服务可用于本地网络:

-> 在applicationhost.config 中从localhost 更改为192.168.1.52

<site name="MyFirstWebApi" id="5">
     <application path="/" applicationPool="Clr4IntegratedAppPool">
         <virtualDirectory path="/" physicalPath="c:\projects\MyFirstWebApi" />
     </application>
     <bindings>
         <binding protocol="http" bindingInformation="*:61802:192.168.1.52" />
     </bindings>
</site>

-> 并且还更改了 Project-properties -> Web -> "Use local IIS-Webserver" -> project-url to http://192.168.1.52:61802/

但是当我现在尝试启动服务时,它给了我一个错误消息框:

IIS-Express-webserver 无法启动 (从德语翻译)

不幸的是,我看不到确切的错误是什么,因为 VS 输出为空

有人知道如何解决这个问题或如何正确设置吗?

【问题讨论】:

您检查过 Windows 事件日志吗? 是的,但找不到与我的问题相关的内容:/ 在此处查看此帖子 - 这些步骤应该可以解决您的问题 ***.com/questions/5433786/… 您可以尝试在调试模式下使用集成服务器运行应用程序并查看是否有任何错误?它可以揭示 IIS 和 IIS Express 没有的地方。 你的防火墙打开了吗?让它关闭,或为应用程序打开端口 【参考方案1】:

默认情况下,IIS Express 不允许“远程”连接...这篇文章向您展示了该怎么做:

IIS Express enable external request

完成此操作后,您应该可以从网络中的任何其他计算机进行连接。

另外,请确保在您的防火墙中打开端口。

如果这不起作用,我会使用您的本地 IIS 创建一个站点并以这种方式测试您的服务。

希望对你有帮助, 丹尼尔。

【讨论】:

我想这将是最好的解决方案,但它给了我一个错误Create SDDL failed, Error: 1332 The parameter is incorrect. 试过这个:netsh http add urlacl url=http://localhost:8080/ user=everyone 它对我来说很好用......但是有些人报告说当你在用户名周围使用引号时它会起作用。像这样:netsh http add urlacl url=http://+:8080/ user="Everyone"【参考方案2】:

您可以运行脚本以使 IIS Express 允许远程连接,但另一种选择是在本地测试时为您的 Web api 代码使用自托管包装器。我们遇到了同样的问题并开始使用这种方法。以下是你的做法:

创建一个新的控制台项目并添加如下代码:

private static void Main()


  var config = new HttpSelfHostConfiguration(new Uri("http://localhost:8086"));

  // remove all formatters and only provide json
  config.Formatters.Clear();
  config.Formatters.Add(new JsonMediaTypeFormatter());

  // if needed
  SetupLogging();
  SetupDependencyInjection(config);

  // required for the new Attribute Routing (if you are using it)
  config.MapHttpAttributeRoutes();

  using (var server = new HttpSelfHostServer(config))
  
    server.OpenAsync().Wait();
    Console.WriteLine("Self Host Server listening on port 8086 ...");
    Console.WriteLine("(You might need administrator privileges)");
    Console.WriteLine("Press Enter to quit.");
    Console.ReadLine();
  

如上所述,请以管理员权限运行 Visual Studio。

我们正在使用 AutoFac 进行依赖注入,这很好地结合了这一点,请参阅指南 here。

现在运行控制台项目(设置为启动项目或右键单击>调试>启动新实例)。

【讨论】:

【参考方案3】:

您好,请从 ApplicationHost.config 中删除 IP 名称。

创建一个虚拟目录并发布网络服务文件。

设置 IP 地址: - 右键单击​​“默认网站” - 编辑绑定 - 分配IP地址

重启 IIS。

浏览“默认网站”,它将与您的 IP 地址一起显示。

【讨论】:

这也许是一个解决方案,但它有点费时

以上是关于如何使 ASP.NET Web API Web 服务在本地网络中可用的主要内容,如果未能解决你的问题,请参考以下文章

如何使 ASP.NET Core Web API 操作异步执行?

WCF 服务与 ASP.NET Web Api

ASP.NET Web API

使用ASP.NET Web API和Web API Client Gen使Angular 2应用程序的开发更加高效

使用 Owin 时无法使 ASP.NET Web API 2 帮助页面正常工作

如何指定在 ASP.NET Web API 中是需要 JSON 还是 XML?