【发布时间】:2017-06-29 10:30:48
【问题描述】:
停用我们网络服务器上的 TLS 1.0 以使用 TLS 1.2。在那之后,当涉及到交易时,网站确实有问题。我尝试了不同的方法,例如
- 已安装所有待处理的 Windows 更新
- 将 IIS 6 升级到版本 7
- 将整个项目重新编译为 4.5 并在 IIS 中重新导入
- 停用 IIS 中的 .NET 3 功能
- 将所有项目目标框架更新到 4.5
- 受控应用程序池并将其设置为 v4.0(应使用 4.5)
首先,这似乎是应用程序的问题。但是后来我在 VS 中以调试模式尝试了该项目,一切正常吗?与回退到 SSL3 而不是使用 TLS 1.1 或 TLS 1.2 的服务器相比。 (似乎缺少某些功能,并且由 Technet 命名的注册表项是不够的。)
我认为问题可能是使用了一些类,例如
(HttpApplication.cs)
- System.Web
- System.Web.Security
由于缺乏经验,我得出结论向您询问问题。您可能还有其他想法吗?
刚想到其他一些事情:VS 中有一个使用 .NET 4.0 的项目。我更改了目标框架,然后项目确实无法找到一些命名空间。 (此时所有项目都具有相同的目标框架(.Net))。命名空间确实存在,但 VS 无法找到它。所以我重建,清理了解决方案,但没有帮助。然后我关闭了VS并重新打开它。突然,这个项目奏效了。该框架在属性中是 4.0。 (也许这也可能是个问题?)
由于时间紧迫,我很感激任何帮助。
编辑:是否有一种简单的方法来测试(TLS 测试)并显示使用的 .Net 版本?
EDIT2:找到了使用 nuget 包测试框架的解决方案。 http://haacked.com/archive/2010/12/05/asp-net-mvc-diagnostics-using-nuget.aspx/ (稍后会尝试)
我还设法通过远程调试单步执行断点并找到发生故障的位置。有一个带有这个头的文件“References.cs”:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18034
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.18034.
//
#pragma warning disable 1591
这段代码产生问题的地方:
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://....", ResponseNamespace="http://....", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("out", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public PaymentResult SelectPayment([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] uint merchantID, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string mdxi, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string getDataURL, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string tid) {
object[] results = this.Invoke("SelectPayment", new object[] {
merchantID,
mdxi,
getDataURL,
tid});
return ((PaymentResult)(results[0]));
}
对象“结果”永远不会得到值。我按下 F1 来查看 Invoke 在做什么,然后这个网站打开:https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke);k(SolutionItemsProject);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd=true
EDIT3:看起来 Invoke 是参考
系统.Web.服务
但在项目中版本是
运行时版本:v4.0.30319 版本:4.0.0.0
我认为这是问题所在,因为它应该是 4.5...
System.Net.WebException:底层连接已关闭:发送时发生意外错误。 ---> System.IO.IOException: 身份验证失败,因为远程方已关闭传输流。
【问题讨论】:
-
你的问题一点都不清楚。你面临的问题是什么?请提供详细信息,如果异常(堆栈跟踪)等。
标签: c# asp.net .net iis visual-studio-2015