2

我那里有这个代码...

var ewayClient = RapidClientFactory.NewRapidClient(Platform.eWayApiKey, Platform.eWayPassword, EndPoint);
ewayClient.SetVersion(31);

var transaction = CreateTransaction();
var preAuthTransaction = ewayClient.Create(PaymentMethod.ResponsiveShared, transaction);

Assert.IsNull(preAuthTransaction.Errors);

它在单元测试中按预期工作,但如果我在正在运行的 Web 应用程序的上下文中运行它,它会返回错误。

我在两个单独的解决方案中设置了两个单独的 ASP.NET 应用程序。每个都有一个运行上述代码的单元测试。在这两种解决方案中,测试都通过了。

我将相同的代码复制到基本的 GET 控制器操作(不包括断言)中,第一个解决方案得到了没有错误的结果,但第二个解决方案得到了可怕的 S9992 错误。

这两个站点都在 IIS Express 10 上运行。

相同的代码如何在 4 个单独的上下文中运行,而在一个上下文中运行(在本地 Web 应用程序中运行以及部署到 Azure 时)

目前没有意义。

我已经确认 ApiKey 和 Password 是正确的,并且在所有四个上下文中都是相同的。Create Transaction 使用一些常见的属性/地址/等进行硬编码。

注意:我使用的是 NuGet 包版本 1.6.0-beta1

4

1 回答 1

1

我终于找到了解决方案。

我必须设置我现在在 global.asax 中执行的 SecurityProtocol

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12

我知道 eWay 正在更改为需要 TLS 1.2(请参阅https://myeway.force.com/success/s/article/ka828000000L2mlAAC/I-am-testing-in-Sandbox-and-I-am-receiving-an-error -那个连接已经关闭

但是,为什么在我的开发机器上运行的一个 .NET Web 应用程序需要我添加该行,而另一个 .NET Web 应用程序和两个独立解决方案的两个单元测试项目仍然没有暗示我。

一切都在运行.NET 4.6+

似乎 4.0 和 4.5 默认不支持 TLS 1.2,而 4.6+ 则支持。我的一个失败的应用程序启动设置为 Ssl3。但它是 .NET 4.6.1,所以我很困惑。

于 2017-06-15T11:45:43.123 回答