Visual studio 2015 Visual Studio 2017/IIS Express:无法连接到配置的开发Web服务器

Visual studio 2015 Visual Studio 2017/IIS Express:无法连接到配置的开发Web服务器,visual-studio-2015,visual-studio-2017,visual-studio-2019,Visual Studio 2015,Visual Studio 2017,Visual Studio 2019,保存正在进行的工作 当尝试从Visual Studio 2019(或Visual Studio 2017或Visual Studio 2015)运行网站时,我遇到以下错误: Visual Studio 2015: 无法连接到配置的开发Web服务器 Visual Studio 2017: 无法连接到配置的开发Web服务器 IIS Express的输出: 正在启动IIS Express… 已在应用程序“/”中成功注册网站“WebSite3”的URL“” 网站“WebSite3”的注册已完成

保存正在进行的工作

当尝试从Visual Studio 2019(或Visual Studio 2017或Visual Studio 2015)运行网站时,我遇到以下错误:

  • Visual Studio 2015:

    无法连接到配置的开发Web服务器

  • Visual Studio 2017:

    无法连接到配置的开发Web服务器

    IIS Express的输出:
    正在启动IIS Express…
    已在应用程序“/”中成功注册网站“WebSite3”的URL“”
    网站“WebSite3”的注册已完成
    IIS Express正在运行

  • Visual Studio 2019:

    无法连接到配置的开发Web服务器

    IIS Express的输出: 正在启动IIS Express。。。 已成功注册网站“WebSite3”应用程序“/”的URL“” 网站“网站3”已完成注册 IIS Express正在运行

IISExpress实际上是在运行和倾听,但实际上什么都不起作用:

你试过什么- 我尝试过的事情(从Stackoverflow的每个其他问题):

  • netsh http添加urlacl url=http://localhost:56997/ 用户=所有人
  • 以管理员身份运行Visual Studio
  • 重新启动Windows
  • 删除隐藏的
    .vs
    文件夹
  • 从其他文件夹运行网站
  • 关闭Windows防火墙
  • 更改网站的端口
  • 更改网站的端口,然后单击创建虚拟目录
  • 从我的文档文件夹中删除IISExpress文件夹
  • 安装Visual Studio fresh(我于2019年安装)
您可以看到IISExpress正在创建侦听套接字,IISExpress通知区域图标显示IISExpress认为网站正在运行:

但它对任何事情都没有反应:

奖金聊天-Windows内置内核模式web服务器 IISExpress.exe本身不会打开侦听套接字

  • 请参见::()
Windows自带一个内置的内核模式迷你Web服务器:
http.sys
。您和IISExpress.exe通过调用以下命令使用此web服务器:

//Initialize HTTP Server APIs
HttpInitialize(HTTPAPI_VERSION_1_0, HTTP_INITIALIZE_SERVER, null);

//Create a Request Queue
HANDLE requestQueue;
HttpCreateHttpHandle(ref requestQueue, 0);

/*
   Add URIs to listen on. We call HttpAddUrl for each URI.
   The URI is a fully qualified URI and must include the terminating (/) character.

   The IANA port numbers state ports 49152-65535 are for dynamic/private purposes.
   HttpAddUrl for localhost on a port >= 49152 works fine for non-admins.
*/
String url = "http://localhost:80/"; //Ports 1-1024 require administrator access

/*
   You can use netsh to modify the HttpServer api ACL to grant everyone acces s to port 80:

      netsh http add urlacl url=http://localhost:80/ user=EVERYONE listen=yes delegate=no

   But it is useful to note that WCF already has an "Everyone Allow" entry for port 80,
   as long as your URL starts with "/Temporary_Listen_Addresses/"

   WCF creates URLs of the form:

      http://+80/Temporary_Listen_Address/[random guid]/
*/
url = "http://+:80/Temporary_Listen_Addresses/{87CB7BDF-A52D-4496-AA1D-B6F60AC2841E}/"; //WCF style url

//Or we can just use one above 1024
url = "http://localhost:2113/";
将URL添加到您的请求队列

//Add the url to our request queue    
ret = HttpAddUrl(requestQueue, url, null);
然后设置一个循环来处理请求:

while (true)
{
   THTTP_REQUEST_ID requestID;
   Int32 requestBufferLength = sizeof(THTTP_REQUEST) + 16384;
   PHTTP_REQUEST request = GetMemory(requestBufferLength );
   DWORD bytesRead;

   ULONG res = HttpReceiveHttpRequest(requestQueue, 
                requestId,          // Req ID
                0,                  // Flags
                request,            // HTTP request buffer
                requestBufferLength,// req buffer length
                ref bytesRead,      // bytes received
                null                // LPOVERLAPPED
                );
   if (res == NO_ERROR)
   {
      res = SendHttpResponse(requestQueue, request, 451, "Totally not NSL", "I don't know what you mean ;)");
      if (res <> NO_ERROR) 
         break;

      // Reset the Request ID to handle the next request.
      requestID = 0;
   }
   else if (res == ERROR_MORE_DATA)
   {
      /*
         The input buffer was too small to hold the request headers.
         Increase the buffer size and call the API again.

         When calling the API again, handle the request that failed by passing a RequestID.
         This RequestID is read from the old buffer.
      */
      requestId = request.RequestId;

      //Free the old buffer and allocate a new buffer.
      requestBufferLength  = bytesRead;
      FreeMem(request);
      request = GetMemory(requestBufferLength);
   }
   else if ((result == ERROR_CONNECTION_INVALID) and (requestID <> 0)) 
   {
      /*
            The TCP connection was corrupted by the peer when attempting to handle a request with more buffer.
            Continue to the next request.
      */
      //Got invalid connection error
      requestID := 0;
   }
   else
   {
      // Other unhandled error; stopping processing requests
      break;
   }      
}
while(true)
{
THTTP_请求ID requestID;
Int32 requestBufferLength=sizeof(THTTP_请求)+16384;
PHTTP_REQUEST REQUEST=GetMemory(requestBufferLength);
德沃德·拜特斯雷德;
ULONG res=HttpReceiveHttpRequest(请求队列,
requestId,//请求ID
0,//标志
请求,//HTTP请求缓冲区
requestBufferLength,//请求缓冲区长度
ref bytesRead,//接收字节数
空//重叠
);
如果(res==无错误)
{
res=SendHttpResponse(requestQueue,request,451,“完全不是NSL”,“我不知道你的意思;)”;
如果(没有错误)
打破
//重置请求ID以处理下一个请求。
requestID=0;
}
else if(res==错误\u更多\u数据)
{
/*
输入缓冲区太小,无法容纳请求头。
增加缓冲区大小并再次调用API。
再次调用API时,通过传递RequestID来处理失败的请求。
此RequestID是从旧缓冲区读取的。
*/
requestId=request.requestId;
//释放旧缓冲区并分配新缓冲区。
requestBufferLength=字节读取;
FreeMem(请求);
请求=GetMemory(requestBufferLength);
}
else if((结果==错误\连接\无效)和(请求ID 0))
{
/*
TCP连接在尝试处理具有更多缓冲区的请求时被对等方损坏。
继续下一个请求。
*/
//收到无效的连接错误
请求ID:=0;
}
其他的
{
//其他未处理的错误;正在停止处理请求
打破
}      
}
这是为了解释为什么是系统在听,而不是IISExpress.exe

如果您阅读了这些评论,您会注意到为什么尝试执行
netshhttpaddurlacl
主要是cargo cult编程;您不需要为超过1024个端口添加权限

相关问题
  • (每个人都链接到的主问题)
  • (没有回答)
  • (以管理员身份运行)
  • (如果您运行的是西班牙语Windows)
  • (从头开始创建新项目)
  • (尝试使用不再存在的WebDev.WebServer.exe)
  • (关闭防火墙)
  • (重新安装Visual Studio)
  • (创建新项目)
  • (重新安装Windows 10)
  • (更改端口)
  • (删除文档中的IISExpress文件夹)
  • (aspnet_regsql.exe;用于在SQL Server数据库中创建用户表-cargo cult编程任何人?)
  • (没有答案)
  • (重置IIS;这不适用,因为我没有将IIS功能添加到Windows-VS附带)
  • (WebDev服务器又名Cassini;已不存在)
  • (试着不要使用IISExpress——显然我不会这么做)

在我的情况下,我在nod32 smart scurity中停止防火墙并解决问题

我尝试了上面列出的所有方法,结果是Windows防火墙才是罪魁祸首

打开防火墙设置。关闭私有和公共防火墙。重新启动Visual Studio。建造。跑工作

然后一步一步地重新打开防火墙。

我也遇到过同样的问题。但是