SSIS 脚本任务中的 HttpClient.SendAsync("...") 问题

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

我想从我的脚本任务内部访问 MS Graph API。 我没有让 SDK 工作(至少在 SSIS 中),所以我想我应该使用 System.Net.Http HttpClient 编写自己的类。在 SSIS 之外,我没有遇到任何问题使其正常工作。当我尝试在 SSIS 中运行 HttpClient.SendAsync() 时,我收到了错误。

public void Main()
        {
            var HttpClient = new HttpClient();
            var req_msg = new HttpRequestMessage(HttpMethod.Get, "http://ip.jsontest.com/");

            HttpResponseMessage t = System.Threading.Tasks.Task.Run(async () =>
                await HttpClient.SendAsync(req_msg)).Result;

            MessageBox.Show(t.StatusCode.ToString()); // -> OK

            var req_msg2 = new HttpRequestMessage(HttpMethod.Get, $"https://graph.microsoft.com/v1.0/users/{test_name}");

            HttpResponseMessage t2 = System.Threading.Tasks.Task.Run(async () =>
                await HttpClient.SendAsync(req_msg2)).Result; // -> Error

            MessageBox.Show(t2.StatusCode.ToString());

            Dts.TaskResult = (int)ScriptResults.Success;
        }

这是错误:

   bei System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   bei System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   bei System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   bei Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

这可能与 Https 有关,至少这是我的理论。然后在常规的 C# 项目中这又不是问题了。

getAsync(), postAsync(), ... 也是同样的方式

ssis dotnet-httpclient script-task
1个回答
0
投票

事实证明 HttpClient 没有使用(正确的)安全协议。显然我根本不是该主题的专家,但使用以下代码将脚本开头的安全协议更改为 TLS 1.2:

System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)3072;

彻底解决了我的问题。希望这对某人有帮助

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