使用API​​的应用程序无法在服务器上运行

科宾斯

会员
已加入
2020年5月12日
留言内容
11
地点
荷兰人
编程经验
10+
使用Visual Studio,我用api(8个apiControllers)创建了一个控制台应用程序。在我的本地计算机上,它工作正常。在我同事的机器上也没问题。将exe文件复制到WindowsServer2012R2时,出现问题。 api侦听端口44311。exe正在运行。当使用netstat查看时,我看到端口44311正在侦听。但是,当尝试在浏览器中获得答案时,什么都没有出现(在浏览器中,我必须输入网址 http:// _ localhost:44311 / BitVise / Test)。该API带有摇摇欲坠的功能,但是在浏览器中,摇晃也不会返回任何内容,但会显示错误“此站点不可用”。

一些代码:Program.cs:
C#:
using System;
using System.Configuration;

namespace BitViseApi
{
  class Program
  {
    static void Main(string[] args)
    {
      string domainAddress = ConfigurationManager.AppSettings["domainAddress"];
      using (WebApp.Start(url: domainAddress))
      {
        Console.WriteLine("Service Hosted " + domainAddress);
        System.Threading.Thread.Sleep(-1);
      }
    }
  }
}
Startup.cs:
C#:
using Owin;
using System.Web.Http;

namespace BitViseApi
{
    class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.EnableCors();
            config.Routes.MapHttpRoute(
                name: "createUserApi",
                routeTemplate: "Bitvise/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
            SwaggerConfig.Register(config);
            appBuilder.UseWebApi(config);
        }
    }
}

BitViseController.cs的开头:
C#:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Web.Http;
using System.Web.Http.Cors;
using BssCfg815Lib;
using System.Security.Cryptography;
using System.Text;
using NLog;

namespace BitVise
{
   [EnableCors(origins: "*", headers: "*", methods: "*")]

    public class TestController : ApiController
    {
        public string Get()
        {
            return "BitViseAppi is working";
        }
    } // TestController

    public class VirtAccountsController : ApiController
    {
        public IEnumerable<LocalVirtAccount815> Get(string username, string password)
        {
            string result;
            BitViseHelper helper = new BitViseHelper();
            helper.Log(LogLevel.Info, "Call to VirtAccounts. Login: username=" + username + ", password=" + password);
            bool loginOkay = helper.CheckUser(username, password, out result);
            if (!loginOkay)
            {
                helper.Log(LogLevel.Error, "  Login failed: " + result);
                return null;
            }
            helper.Log(LogLevel.Info, "  Login succeeded.");
            清单<LocalVirtAccount815> virtAccounts = helper.ListVirtAccounts();
            helper.Log(LogLevel.Info, "  " + virtAccounts.Count + " Virtual accounts retrieved.");
            return virtAccounts;
        }
    } // VirtAccountsController


...
该图显示了控制台应用程序正在运行,正在侦听并且浏览器显示了错误。
BitVise.png


有人知道我忘记了什么或我做错了什么吗?

提前致谢,

肺心病
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
该服务器上正在运行什么AV?有防火墙设置吗?您是否尝试过禁用AV或在该端口的防火墙上戳一个洞?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
我记得,netstat可以告诉您正在监听哪个进程。实际上是您的应用吗?还是有另一个基于Kestrel的应用程序已经抢占了端口?

您还绝对确定没有AV或其他软件实际上可能像某些nannyware的防火墙一样吗?在过去的两个星期中,我的公司遭受了巨大的打击,因为他们无法接受企业VPN和Internet。当我们首次询问端点安全团队是否进行了任何更改时,他们拒绝了。我们开始询问其他人是否已部署了任何AV软件。仍然没有。原来,法务部门的另一个安全团队已经部署了一个"data loss prevention"技术上不是AV的应用程序-仅仅是nannyware。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
这没有告诉我们哪个应用程序正在使用该端口。因此,我认为,如果您无法访问端口,则可以假设端口上可能正在运行其他端口。仔细检查所有防火墙规则。

在此使用 高架 CMD: tasklist | findstr YOUR EXECUTABLE NAME
Or better : netstat -ano | findStr 44311 - This gives you the pid running on the port. Then run :
tasklist /FI "PID eq pidhere" 显然,您将pidhere替换为第一个命令的实际pid。

并在此处发布输出。您应该有类似以下示例的内容:

屏幕截图_138.jpg
 

科宾斯

会员
已加入
2020年5月12日
留言内容
11
地点
荷兰人
编程经验
10+
对不起。
BitViseApi的PID为2608。
并且侦听端口44311的进程的PID似乎是4。
因此,很明显我的应用程序BitViseApi没有监听端口44311 :-(
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
更改端口号时,netstat还会报告该端口也在监听吗?如果是这样,哪个应用程序正在该端口上监听?还系统吗?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
听起来好像有一些AV或nannyware正在运行,并且位于应用程序的前面,代理您尝试打开的端口-并且该AV或nannyware不在本地计算机上运行,​​而是在服务器上运行。我建议与您的服务器管理员和/或安全团队联系,以了解他们的意见。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
您是否有机会运行像PeerBlock这样的应用程序?

如果您的API适用于TCP,请下载并运行以下命令: Windows的TCPView-Windows Sysinternals

然后告诉我们在应用程序启动时端口上运行的服务是什么。一旦我们知道了很多,我们应该能够禁用它。

该程序还将允许您终止该服务。但是,为了不破坏某些内容,只需首先报告它提供的服务即可。
 

科宾斯

会员
已加入
2020年5月12日
留言内容
11
地点
荷兰人
编程经验
10+
感谢您的回复。
我已经联系了我的团队,但是他们确定没有AV正在运行。也许是它的保姆软件。

安装TCPView之后,没有进程正在侦听端口44311。
启动我的api,使用pid 4(系统)的进​​程正在侦听。
BitVise3.jpg
 

科宾斯

会员
已加入
2020年5月12日
留言内容
11
地点
荷兰人
编程经验
10+
只是,我试图在本地计算机上运行该应用程序。结果一样!另外,系统(pid = 4)正在侦听端口44311。
但是:向我的api发送请求,我得到正确的结果!
因此,事实系统正在监听“我的端口”应该不是问题。

因此,还有另一个原因是api没有响应。
有人知道吗?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
我真的建议与您的IT安全人员交谈以了解发生了什么。我希望您的应用程序直接侦听端口-而不是系统代理您的应用程序。如果您在不受IT人员管理的个人计算机上运行相同的代码,是否还会将系统显示为正在侦听?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
那不是他问你的。他问你系统'在本地计算机上监听相同的端口吗?

如果您的API在本地运行。您需要联系服务器提供商,并让他们为您跟踪问题。除非您能证明C#或您的编程存在问题,否则在他们返回您之前,我们几乎无法为您提供帮助。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
当他们切换为默认使用HTTPS时,.NET 肺心病e的历史中有一段历史。他们发现开发人员很懒惰,不会采取额外的步骤使用HTTPS来提高其应用程序的安全性,因此他们决定应鼓励默认情况下的安全性。

现在的问题是:为什么它对您和您的朋友有用,但对服务器无效?还是这个飞行员错误?在本地计算机上,飞行员在未安装证书的情况下自动决定使用HTTP,然后在与服务器进行对话时(假定存在证书)使用HTTPS?
 
最佳 底部