我正在使用 SSIS(面向 SQL Server 2016 的 Visual Studio 2015)构建脚本任务以使用 API。我在本地机器(Visual Studio 2017)上构建了以下代码,效果很好:
public void Main()
{
string baseURL = "API.com";
Uri requestUri = new Uri(baseURL);
HttpWebRequest req = WebRequest.Create(requestUri) as HttpWebRequest;
string username = "APIKEY";
string password = "";
string auth64 = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(username + ":" + password));
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls |SecurityProtocolType.Tls11 |
//SecurityProtocolType.Tls12;
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 |
// SecurityProtocolType.Tls12|SecurityProtocolType.Ssl3;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
//ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;
//System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)3072;
//System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)0x00000C00;
req.Headers.Add("Authorization", "Basic " + auth64);
//req.KeepAlive = false;
//req.ProtocolVersion = HttpVersion.Version10;
//req.ServicePoint.ConnectionLimit = 1;
try
{
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
Console.WriteLine("Worked");
}
}
}
catch (Exception e)
{
Console.WriteLine("Didn't Work");
}
}
一旦我将其粘贴到脚本任务中并尝试运行它,我就会收到以下错误:
无法从传输连接读取数据:现有连接被远程主机强行关闭
再挖一点,我看到了这个:
底层连接已关闭:发送时发生意外错误
我能找到的有关此错误的所有内容都建议将其更改SerivcePointManager为 TLS12。请注意上述代码中已注释掉的所有迭代。似乎没有任何效果。