0

我有一个基本程序,它利用云托管提供商的特定 API。该程序发出一个HttpWebRequest本质上类似于对云中的一个服务器执行操作的请求(例如,关闭它,启动它)。

我遇到的问题是,当我从本地机器执行脚本时脚本可以工作,但当我从我们的生产服务器之一执行脚本时却不行。有问题的服务器是一个Windows 2008 R2盒子(虚拟/托管),如果我能让这个脚本在那里工作,它将成为脚本主机。

有趣的是,这个脚本之前已经在生产环境中运行了至少几个星期(通过 Windows 任务计划程序自动执行)。然后,突然之间,它昨天停止工作。我知道没有服务器更改,但我不是唯一可以访问环境的人,因此可以在那里进行更改。我有点担心可能是某些安全性或防火墙设置导致了问题。我们最近安装了新的病毒防护软件,所以这是一个潜在的罪魁祸首。

  1. HttpWebRequest在某种程度上是否不合适,会使其被阻止或以某种方式失败?
  2. 是否有我应该检查的特定服务器设置可能对该特定程序产生不利影响?

这是我的代码:

using System;
using System.Net;
using System.Text;

class Script {

    static void Main(string[] args) {

        string organizationId = args[0];
        string serverId = args[1];
        string serverCommand = args[2];
        string username = args[3];
        string password = args[4];
        string credentials = username + ":" + password;
        credentials = Convert.ToBase64String(Encoding.Default.GetBytes(credentials));

        //send command to server
        Uri uri = new Uri("https://api.opsourcecloud.net/oec/0.9/" + organizationId + "/server/" + serverId + "?" + serverCommand);
        HttpWebRequest serverRequest = (HttpWebRequest)WebRequest.Create(uri);
        serverRequest.Headers["Authorization"] = "Basic " + credentials;
        HttpWebResponse serverResponse = (HttpWebResponse)serverRequest.GetResponse();

    }

}

这是我的错误:

Unhandled Exception: System.Net.WebException: Unable to connect to the remote se
rver ---> System.Net.Sockets.SocketException: No connection could be made becaus
e the target machine actively refused it 168.143.82.65:443
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre
ss socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock
et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state,
IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetResponse()
   at Script.Main(String[] args)
4

1 回答 1

0

看起来你的Authorization标题有问题。尝试NetworkCredential在您的请求中使用,如下所示:

serverRequest.Credentials = new NetworkCredential(username, password);
于 2013-07-12T17:57:27.390 回答