azure - PostAsync 在控制台应用程序中工作 - 在 SSIS 包中不起作用
问题描述
我有一个相当麻烦的问题。我正在尝试通过 SSIS 在 Azure 中发布 Webjob。以下请求适用于我的测试应用程序,它是一个控制台应用程序。
public static void Main(string[] args)
{
string ApiUrl = "HTTPS";
string call = "triggeredwebjobs/JOB NAME/run";
string result = string.Empty;
string userPswd = "USER" + ":" + "PASSWORD";
userPswd = Convert.ToBase64String(Encoding.Default.GetBytes(userPswd));
var response = new HttpResponseMessage(HttpStatusCode.NotFound);
try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(ApiUrl);
client.Timeout = TimeSpan.FromMinutes(30);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", userPswd);
response = client.PostAsync(call, new StringContent(string.Empty, System.Text.Encoding.UTF8, "application/json")).Result;
}
}
catch (Exception ex)
{
throw ex;
}
}
}
上面的代码是成功的,并向 Azure 中的目标 webjob 发出 post 请求以触发它。
当我将以下代码放入 SSIS 包并尝试从 Visual Studio 运行它时,它不起作用。
public void Main()
{
// TODO: Add your code here
try
{
string ApiUrl = "HTTPS";
string call = "triggeredwebjobs/JOB NAME/run";
string result = string.Empty;
string userPswd = "USER" + ":" + "PASSWORD";
userPswd = Convert.ToBase64String(Encoding.Default.GetBytes(userPswd));
var response = new HttpResponseMessage(HttpStatusCode.NotFound);
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(ApiUrl);
client.Timeout = TimeSpan.FromMinutes(30);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", userPswd);
response = client.PostAsync(call, new StringContent(string.Empty, System.Text.Encoding.UTF8, "application/json")).Result;
}
}
catch (Exception ex)
{
Dts.Events.FireError(0, "ERROR", ex.Message, null, 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
我得到状态码 404。
关于如何纠正这个问题的任何想法?我被困在这个问题上,我已经开始绕圈子试图解决它。我唯一能想到的是网络问题,但我不知道如何验证这一点。
解决方案
我找到了解决这个问题的方法:需要添加 SecurityProtocol
来自解决方案的引用:
关键是添加安全协议并应用所有类型:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | Tls32 |.. 这解决了问题
可以在此处找到更强大的解决方案:通过 AppSettings 配置 ServicePointManager.SecurityProtocol
推荐阅读
- android - openlayers Web 应用程序在移动设备上运行速度非常慢(Android Chrome)
- javascript - How do I change mix up tables to Sequelize?
- php - 如何让 Joudi/Laravel-H5P 工作以实现 H5P 文件的编辑器?
- html - 使用 css 填充包含水平图像数组的 div 的宽度
- c# - Asp.net 核心中的 Active Directory
- python - Python图像重塑(1,28,28,1)在图像处理中不起作用
- android-studio - How can i trace eating with mouth closed using Google ML Kit
- browser - How to differentiate HTTP traffic by browser tab in Fiddler?
- ios - 在代码中的两个不同位置设置相同的回调闭包
- laravel - Laravel Websockets Apache2 ReverseProxy 设置