【问题标题】:Team city with WebApi self hosted - WebException an unexpected error occurred on a send带有 Web Api 自托管的 Teamcity - WebException 发送时发生意外错误
【发布时间】:2016-09-14 15:20:51
【问题描述】:

我有 WebApi 和一个 c# 客户端应用程序。 为了运行集成测试,我在这样的基类中使用 owin self host:

Namespace IntegrationTest {
  [SetUpFixture]
  Public Class ServerManager {

    Privet Static IDisposable server;

    [SetUp]
    Protected Static Void StartAPI() {
      server = WebApp.Start<Startup>.("Https://localhost:8080");
      LogIn();
    }

    Public Static Void LogIn() {
      Clientdll.Login(*some Parma's);
    }

   [TearDown]
   Protected Static Void Shutdown API() {
     LogOut();
     server.Dispose();
   }
 }
}

所有测试都在我的计算机本地通过,就像其他计算机从 TFS 服务器获取代码一样,但是当我在团队城市运行测试时,它失败并显示此异常:---> System.Net.Http。 HttpRequestExeption : 发送请求时出错。

---> 系统。 Net.WebExeption : 底层连接已关闭:发送时发生意外错误。

系统。 IO.IOExepyion:无法从传输连接读取数据:远程主机强制关闭现有连接。 ---> 系统。 Net.Socket.SocketExeption : 一个激动人心的连接被远程主机强行关闭。

【问题讨论】:

    标签: asp.net-web-api nunit teamcity self-host-webapi


    【解决方案1】:

    我看到您正在使用 HTTPS 来托管您的 API。您是否已将团队城市机器配置为在端口 8080 上支持 HTTPS?如果 HTTPS 配置不正确(不知道为什么会出现这种情况),在 HTTPS 上创建 HTTP 侦听器不会引发异常,但尝试调用没有附加证书的 HTTPS 端点会导致你描述的错误。

    要支持 HTTPS,您需要:

    1. 为团队城市机器创建证书。由于您是在机器内运行测试,因此您可以选择自签名证书。如果那台机器上有 IIS,则可以使用它来创建证书,如果没有,请下载 MakeCert.exe 并使用它来创建证书(确保使用 cn=localhost)。 在此处查看更多信息How can I create a self-signed cert for localhost?

    2. 通过在 cmd (netsh http set sslcert) 中使用 netsh 命令将证书注册到端口 8080。请参阅此处以获取说明https://msdn.microsoft.com/en-us/library/ms733791.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      相关资源
      最近更新 更多