在 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 得到了结果。
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 得到了结果。