1

複雑な問題があり、何が原因かわかりません。要するに、私は必要なものをほとんどテストするためのアクセス権を持っていますが、私のシナリオでデータベース接続文字列の問題をトラブルシューティングするための最良の方法がわかりません。

私の開発環境は、テスト環境とはかなり異なります。私のテスト環境はDMZにあります。私の開発環境は、データベースサーバーと同じドメイン内にあります。

私の開発環境では、デスクトップで実行し、接続文字列で接続し、信頼できる接続を使用しています。

DMZ内では、IIS7が同じサーバー上で指すシステムドライブにファイルを展開しました。テスト環境は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;
        }
}

私は成功した開発者に接続します。接続文字列、またはそれに関する何かが正しくありません。System.Data.SqlClientを使用して、.Netデータプロバイダーを使用しています。これを使い続けることが重要です。他の環境では必要ないように思われるため、IIS7データベースセクションで接続文字列を構成していません。

私が見つけた記事によると:2つのフォーマットがあります。私の開発マシンが使用しているもの

//.NETDataProvider-信頼できる接続

System.Data.SqlClientを使用します。

SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Data Source=ServerName;" +
"Initial Catalog=DataBaseName;" +
"Integrated Security=SSPI;";
conn.Open();

使用するためにdmzでのテストが必要なIP経由の接続:

//.NETDataProvider-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ホスト上のフォルダーにコピーしていることがあります。dbを呼び出そうとするまで、コードは正常に実行されます。

基本的に、いつ/どのようにトラブルシューティングを行うか、またネットワークの覗き見について何を尋ねるかを知っているので、自分の「スキル」について助けが必要だと感じています。

4

1 に答える 1

4

この問題には応答がありませんでしたが、問題は解決しました。私は次のように接続をトラブルシューティングしました:

1)dmzWebホストから内部データベースサーバーへのアクセス可能性を確認します

  • そのポートでデータベースホストへのTelnetセッションを開き、到達可能であることを確認しました。
  • 次に、そのホストへのodbc接続を正常に作成しました

2).netアプリケーションの接続文字列が機能しなかった理由を特定します

  • コードの周りにtry/catchブロックがあったため、サイレントに失敗し、メッセージのトラブルシューティングができなかったため、同僚がdmzホストでLinqPadを実行することを提案しました>>
  • そのサーバーでLinqPadを実行し、c#で非常に小さなdb接続関数を作成しました。これは、アプリが接続しようとした方法とまったく同じように実行しました。LinqPadは私にエラーを与えました!

問題...データベースアカウントを作成しました(信頼できる接続またはWindowsパススルー認証をdmzから内部dbホストに使用できないため)、アカウントにデータベースへの選択アクセスを許可していませんでした。

データベースアカウントが正しい方法で設定されていることを確認することで問題が解決しました。Linqpadのことを聞いたのは初めてでしたが、プロジェクトを開始したりコンパイルしたりしなくても.netスクリプトを実行できるため、非常に優れたトラブルシューティングツールになり、時間を節約できました。

于 2012-05-20T05:18:47.513 に答える