在 BizTalk 中使用 C# Restharp 方法,抛出 NullReferenceException "Object reference not set to an instance of an object"

Using C# Restharp Method in BizTalk, throws NullReferenceException "Object reference not set to an instance of an object"

    public static string getAccessToken()
    {
       
            var client = new RestClient("...");
            client.Timeout = -1;
            var request = new RestRequest() { Method = Method.POST };
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddParameter("grant_type", "client_credentials");
            request.AddParameter("client_id", "...");
            request.AddParameter("client_secret", "...");
            IRestResponse token = client.Execute(request);
            string varToken = token.Content;
          
            return varToken;
        
    }

这种获取令牌的方法有效! 但是使用令牌的方法抛出 NullReferenceException“对象引用未设置到对象的实例”

    public static string testAccessToken(string token)
    {
       
       var client = new RestClient("...");
       client.Timeout = -1;
       var request = new RestRequest(Method.GET);
       request.AddHeader("Content-Type", "application/json");
       request.AddHeader("Authorization", "Bearer " + token);

       IRestResponse response = client.Execute(request);
       string varToken = response.Content;

       
       return varToken;
       
        
    }

当我在 Visual Studio 表单应用程序中测试方法 testAccessToken(string token) 时它可以工作,但是当我使用它时 BizTalk 它抛出 NullReferenceException“对象引用未设置到对象的实例”

有人知道如何解决这个问题吗?

问题已解决。 即使在示例 Windows Form 应用程序中,创建的 Restsharp class 返回了结果,但 Biztalk 中相同的 class 没有返回任何结果。 原因是 TLS 加密。许多服务器仍然允许 TLS 1.0 到 1.2,但 OAuth2 环境中的服务器明确允许 1.2,包括用于 Business Central 的 Mircosoft 服务器。

两种方式通向目标。 首先,在 Windows 中将 TLS 1.2 设置为默认协议。为此需要手动更改注册表。 但是,客户服务器上的这些更改可能导致客户的其他应用程序无法再通信。

更好的方法是在每次调用时告诉 Restsharp 应该使用哪种加密。 "System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12"

瞧,Biztalk 终于从 class 得到了结果。