6

データベースミラーリングを設定し、これを使用してデータベースconnectionstringに接続しました。

    Data Source={0};Failover Partner={1};Initial Catalog=AdventureWorks;
    Integrated Security=True;

データベースにデータを追加した後、プリンシパルサーバーをシャットダウンして、ミラーサーバーがプリンシパルサーバーになります。接続を再度開くと、次のエラーが発生します。

    System.Data.SqlClient.SqlException: A transport-level error has 
occurred when sending the request to the server. (provider: Shared Memory 
Provider, error: 0 - No process is on the other end of the pipe.)

接続文字列でフェイルオーバーパートナーを指定すると、ADO.NETが機能すると思いました。だから私は今何をすべきですか?

4

4 に答える 4

4

幸い、私はこの問題を修正しました。私がする必要があるのは、ClearPoolメソッドを呼び出すことだけです。

SqlConnection.ClearPool(conn);

このメソッドは、接続プールをクリアします。その後、問題はなくなりました。とても満足しています。

皆様のご支援、誠にありがとうございました。:D

于 2010-02-04T18:50:22.323 に答える
2

私は.netに関する専門家ではありませんが、フェイルオーバーを処理するにはSQLネイティブクライアント(SQLNCLI)が必要です。「ado.net」はSQLOLEDBの場合があります

Windows Server 2003までは、少なくともデフォルトではインストールされていません。スタンドアロンまたはSQLクライアントツールの一部であるため、SQLOLEDBを使用していると思われます

于 2010-02-04T16:05:03.820 に答える
0

プリンシパルをシャットダウンした後、フェイルオーバーが実際にプリンシパルになったことを確認しましたか?SQL Serverで自動フェイルオーバーが行われていなかった場合でも、ミラーはミラーです。

于 2010-02-04T16:32:58.987 に答える
0

十分な大きさのタイムアウトが設定されていないと、これが発生することがわかりました。

https://serverfault.com/questions/249589/db-auto-failover-in-c-does-not-work-when-the-principal-server-physically-goes-o

于 2012-04-12T15:57:37.100 に答える