API 调用在本地成功,但在网站发布后失败,即使使用 WebProxy 也如此

问题描述 投票:0回答:1

我在 asp.net MVC 中有一个站点,它通过第 3 方 API 向用户发送短信。 当我在本地测试时,该 API 按计划工作,但在上传到网络后失败并出现以下错误。这是它抛出的错误:

“连接尝试失败,因为连接方没有 一段时间后正确响应,或建立连接 失败,因为连接的主机无法响应 80.85.87.122:443"

最初我尝试使用 HTTP GET 访问 API,然后切换到使用 XML 的 POST,后一种方法返回以下错误: 无法连接到远程服务器

System.Net.HttpWebRequest.GetRequestStream(TransportContext&上下文) 在 System.Net.HttpWebRequest.GetRequestStream()

我消耗资源的代码如下:

private async Task SendSmsUsingXML()
        {
            WebRequest req = null;
            WebResponse rsp = null;
            try
            {
                string fileName = Server.MapPath("~/App_Data/MultiTexterSMSFormat.xml");
                string uri = "https://www.multitexter.com/tools/xml/Sms.php";
                req = WebRequest.Create(uri);
                //req.Proxy = WebProxy.GetDefaultProxy(); // Enable if using proxy
                req.Method = "POST";        // Post method
                req.ContentType = "text/xml";     // content type
                //req.Proxy = new WebProxy("202.79.27.50", 8080);
                // Wrap the request stream with a text-based writer
                StreamWriter writer = new StreamWriter(req.GetRequestStream());
                // Write the XML text into the stream
                writer.WriteLine(this.GetTextFromXMLFile(fileName));
                writer.Close();
                // Send the data to the webserver
                rsp = req.GetResponse(); //I am getting error over here
                StreamReader sr = new StreamReader(rsp.GetResponseStream());
                string result = sr.ReadToEnd();
                sr.Close();
                Response.Write(result);

            }
            catch (WebException webEx)
            {
                Response.Write(webEx.Message.ToString());
                Response.Write(webEx.StackTrace.ToString());
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message.ToString());
                Response.Write(ex.StackTrace.ToString());
            }
            finally
            {
                if (req != null) req.GetRequestStream().Close();
                if (rsp != null) rsp.GetResponseStream().Close();
            }
        }

同样,这在本地有效,但在我发布到网络后失败了。 然后我联系了我的主人(www.1and1.com),因为所有的手指似乎都指向他们是问题所在。 他们的客户服务人员告诉我,由于我的托管包(这是一个共享托管包)的限制,此请求被阻止,如果我升级到专用服务器包,这将不再是问题。 这对我来说毫无意义,因为即使是最基本的网站,简单的 API 调用也是不可或缺的一部分。 经过更多挖掘后,我发现了一个post,其中一位用户向同一家托管公司抱怨了同样的问题。他的解决方案是使用代理服务器,导致 1and1 接受请求。 我上网寻找免费的代理服务器和端口用于测试目的,我找到了一个在本地工作的代理服务器和端口,将其上传到实时站点,但它仍然失败并出现此错误:

无法连接到远程服务器 System.Net.HttpWebRequest.GetRequestStream(TransportContext& 上下文) 在 System.Net.HttpWebRequest.GetRequestStream()

我现在真的束手无策,非常感谢任何有关解决此问题的帮助和/或建议。 为了进一步参考,这是我尝试使用的 SMS API 文档的链接

c# asp.net .net asp.net-mvc
1个回答
2
投票

我建议在云中创建一个虚拟机并将其托管在那里。我在 GoDaddy 上遇到了同样的问题,所以我转移到了 Azure 虚拟机。

© www.soinside.com 2019 - 2024. All rights reserved.