我有一个复杂的问题,我不确定是什么原因造成的。简而言之,我几乎可以测试我需要的任何东西,但我不确定在我的场景中解决数据库连接字符串问题的最佳方法。
我的开发环境与我的测试环境有很大不同。我的测试环境在 DMZ 中。我的开发环境与数据库服务器在同一个域内。
在我的开发环境中,我在桌面上运行并使用连接字符串进行连接并使用受信任的连接。
在 DMZ 中,我已将文件部署在 IIS 7 指向同一服务器的系统驱动器上。因为测试环境在 DMZ 上,所以我使用服务器的 IP 地址和必须在连接字符串中指定的特殊端口号。
我的 Web 应用程序不包含连接字符串。我将连接字符串保存在 .cs 文件中,并基于 .Net 中的 Evironment.machineName 变量,应用程序在运行时决定使用哪个连接字符串并将其存储到全局静态变量中,所以我基本上有:
public static readonly string strDBConnDev = "connection stuff here";
public static readonly String strDBConnTest = "connection stuff here";
public static String strDBConn;
然后我有一个在运行的页面加载时触发的函数
public static void setEnvVars()
{
// This is psuedocode
if(environment.machinename = "mydevmachine")
{
strDBConn = strDBConnDev;
}
if(environment.machinename = "mytestmachine")
{
strDBConn = strDBConnTest;
}
}
我在 dev 上建立了成功的连接。连接字符串或有关它的某些内容不正确。我正在使用 .Net 数据提供程序,使用 System.Data.SqlClient。我继续使用它很重要。我没有在 IIS 7 数据库部分配置任何连接字符串,因为在我们的其他环境中似乎不需要。
根据我发现的一篇文章:有两种格式。我的开发机器使用的那个
// .NET DataProvider -- 可信连接
使用 System.Data.SqlClient;
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Data Source=ServerName;" +
"Initial Catalog=DataBaseName;" +
"Integrated Security=SSPI;";
conn.Open();
以及我需要在 dmz 中进行测试才能使用的通过 ip 的连接:
// .NET DataProvider -- 通过 IP 地址
using System.Data.SqlClient;
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Network Library=DBMSSOCN;" +
"Data Source=xxx.xxx.xxx.xxx,[port number];" +
"Initial Catalog=DataBaseName;" +
"User Id=UserName;" +
"Password=Secret;";
conn.Open();
我的难题是我遇到了麻烦,以至于我知道在 DMZ 中设置了连接字符串变量。但是我的连接失败,但我没有收到错误。它只是悄悄地失败了。我检查了 DMZ 上的 IIS 日志,没有发现任何线索或提示的证据。我还检查了 Windows 应用程序日志,并没有发现任何东西,我认为这非常令人惊讶。
我觉得卡在这一点上,因为我觉得我需要故障排除的想法,以便我可以从我的 dmz 主机了解和测试数据库服务器的连接、可见性和凭据。
我如何部署的一点背景是我在我的机器上构建,然后将文件复制到我的 c# Web 应用程序到 dmz 主机上的文件夹中。代码运行良好,直到它尝试调用数据库。
我觉得我的“技能”需要一些帮助,基本上知道何时/如何进行故障排除以及向我的网络窥视者询问什么。