我有一个在 Windows Server 上的 IIS 中运行的 ASP.Net Webforms 网站。该服务器上还有 SQL 服务器。
该网站的一切工作正常,但现在我发现使用 DataAdapter 填充表格存在问题。
这是一些代码,请注意,这只是代码的基本轮廓,因为实际代码包含机密信息。
public List<Summary> Fetch(string Connection, int parameter1, int parameter2, bool parameter3)
{
List<Summary> collection = new List<Summary>();
using (SqlConnection dbConnection = new SqlConnection(Connection))
{
using (SqlCommand dbCommand = dbConnection.CreateCommand()) // Result is complex
{
dbCommand.CommandType = CommandType.StoredProcedure;
//
// Code to add parameters and set commandText goes here
//
using (SqlDataAdapter da = new SqlDataAdapter(dbCommand))
{
DataTable table = new DataTable();
DataRow row;
try
{
da.Fill(table);
}
catch(Exception ex)
{
// Log error
}
for (int i = 0; i < table.Rows.Count; i++)
{
row = table.Rows[i];
Summary data = Populate(row);
collection.Add(data);
}
}
}
}
return collection;
}
Run Code Online (Sandbox Code Playgroud)
上面的内容位于库中,在 Web Forms 站点中的调用方式如下。
var Summaries = MyLibrary.Fetch(ConnectionString, 1, 111, false);
Run Code Online (Sandbox Code Playgroud)
正如我所说,一切都很顺利。现在,上面突然停止工作并且Summaries总是空的。
为了调查我尝试了以下方法。
使用 xUnit 创建一个测试,其参数与网站使用的参数相同。这些是在调试过程中捕获的,以确保它们匹配。结果返回 1 项。
然后,我在 SQL Management Studio 中运行存储过程,它与 xUnit 测试相匹配,返回了 1 个项目。
然后我检查了 SQL Profiler,这就是事情看起来有点奇怪的地方。当网络表单调用图书馆时,跟踪中没有记录任何内容。
因此,网站和 xUnit 测试都使用相同的库,传递相同的参数,但其中一个可以工作,而另一个则不能……非常奇怪。
作为最后的手段,我将库项目添加到 Web Forms 项目中,并继续进行调试...然后我发现了错误。
da.Fill(table);
Run Code Online (Sandbox Code Playgroud)
上面的行生成了以下异常。
抛出异常: Microsoft.Data.SqlClient.dll 中的“Microsoft.Data.SqlClient.SqlException” 已成功与服务器建立连接,但在登录过程中发生错误。(提供程序:SSL 提供程序,错误:0 - 证书链是由不受信任的机构颁发的。)
看看这里的堆栈,我看到了很多回复,我需要安装证书。
我的问题是,如果是这样的话,那么为什么以及为什么现在呢?从运行到现在,代码没有任何变化。该网站和 SQL 服务器位于同一 Windows 服务器上。另外,为什么在没有它的情况下 xunit 测试可以工作,而当我在同一台机器上调试时,网站却不能工作!
我现在更改的唯一项目是安装 .Net 6 和星期二补丁,导致一些更新和服务器重新启动。
Pie*_*pen 73
Microsoft.Data.SqlClient 4.0 默认使用 ENCRYPT=True。您可以将证书放在服务器上(不是自签名的证书),或者将
TrustServerCertificate=是;
在连接字符串上。
小智 22
我也遇到了这个问题。网络6.0
当我升级Microsoft.EntityFrameworkCore.SqlServer时,它突然开始发生
从版本=“6.0.0”到版本=“6.0.1”
我将Encrypt和TrustServerCertificate添加到连接字符串中。
数据源=(本地);初始目录=XXXXXXX;Trusted_Connection=True;MultipleActiveResultSets=True;加密=真;TrustServerCertificate = True
| 归档时间: |
|
| 查看次数: |
40787 次 |
| 最近记录: |