2012-05-03 19 views
5

Tôi nhận được lỗi sau khi cố gắng mở cơ sở dữ liệu PostgreSQL của tôi từ một C# tiện ích:rắc rối npgsql trong C# ứng dụng - Kết nối hiện đã buộc phải đóng cửa bởi các máy chủ từ xa

System.IO.IOException: Không để đọc dữ liệu từ kết nối giao thông : Kết nối hiện có bị đóng bởi máy chủ từ xa . ---> System.Net.Sockets.SocketException: Một kết nối hiện đã buộc phải đóng cửa bởi các máy chủ từ xa

Tôi đã thử chạy chương trình này từ một máy tính từ xa và từ máy tính mà trên đó các máy chủ PostgreSQL đang chạy .

Không có tường lửa trên máy tính tại thời điểm này và tôi có thể kết nối với cơ sở dữ liệu và máy chủ chỉ bằng cách sử dụng tiện ích quản trị sau khi sử dụng cùng một mật khẩu. Tôi đã kiểm tra xem tên người dùng có quyền truy cập vào cơ sở dữ liệu hay không.

Đây là mã của tôi cho kết nối:

public bool updateFromServer() 
{ 
    try 
    { 
     NpgsqlConnection conn = new NpgsqlConnection(connString); 
     conn.Open(); 
     conn.Close(); 
     return true; 
    } 
    catch (Exception e) 
    { 
     conn.close() 
     return false; 
    } 
} 

Bất kỳ sự giúp đỡ với điều này sẽ được đánh giá.

+0

Mọi thứ trong nhật ký máy chủ? –

+0

Nhật ký máy chủ là nơi hiển nhiên. Ngoài ra, tôi không phải là lập trình viên C#, nhưng bạn có nhận được stacktrace không? Dòng mã nào gây ra ngoại lệ? –

Trả lời

10

Tôi đã dành 1 giờ tìm kiếm giống nhau và không tìm thấy sự cố nào. Nhưng sau đó nhận ra rằng PG đặt nhật ký của nó trong thư mục pg_log. Tôi nhìn vào nó để xem vấn đề có thể xảy ra.

Hóa ra bạn chỉ cần có mục nhập "lưu trữ" chính xác trong tệp "pg_hba.conf". Đối với tôi, tập tin này nằm trong thư mục C: \ Program Files \ PostgreSQL \ 9.1 \ data. Ví dụ

chủ tất cả mọi 192.168.1.2/32 md5

đâu 192.168.1.2 - là địa chỉ ip của khách hàng.

BTW, bạn vẫn cần có cổng 5432 mở dưới dạng quy tắc Inboud (Windows Vista, Windows 7, Windows 2008+).

+2

Cảm ơn rất nhiều, đây là một cuộc sống tiết kiệm thực sự. – coffekid