2008-09-08 33 views
6

Lấy một ứng dụng Net Winforms .. kết hợp trong một kết nối mạng không dây flakey, khuấy động với một vài người dùng chỉ đơn giản là kéo phích cắm màu xanh thỉnh thoảng và để có biện pháp tốt, thêm một Quản trị hệ thống quyết định khởi động lại hộp máy chủ SQL mà không cần cảnh báo bây giờ và một lần nữa chỉ để giữ cho mọi người trên ngón chân của họ.Làm cách nào để quản lý ứng dụng của bạn khi cơ sở dữ liệu ngoại tuyến?

những gợi ý và chiến lược để xử lý loại này của kịch bản trong sự tôn trọng để là gì:

  • Xử lý lỗi - ví dụ, bạn có quấn mỗi cuộc gọi đến máy chủ với một try/catch hay làm bạn dựa vào một số hình thức Xử lý lỗi chung để quản lý điều này? Nếu vậy nó trông như thế nào?

  • Quản lý ứng dụng - ví dụ: làm bạn tắt ứng dụng và không cho phép người dùng tương tác với nó cho đến khi kết nối được phát hiện lại? Bạn sẽ làm gì?

+0

Để hoàn tất việc này - chúng tôi sử dụng Dịch vụ đồng bộ hóa MS cho những người làm việc ngoại tuyến. Nhưng chúng tôi thấy rằng chạy hơn 50 người dùng trên Dịch vụ đồng bộ cùng một lúc trên hệ thống lớn là gì, dẫn đến địa ngục SQL Server khi chúng tôi cố gắng quản lý xung đột và tải trên máy chủ. – gleng

+0

Thats lý do tại sao chúng tôi đã thiết lập các tiêu chuẩn văn phòng-ràng buộc chiếc để nhấn SQL Server trực tiếp và không thông qua một trung gian DB như SQL Compact. Cảm ơn tất cả mọi người cho câu trả lời - những gì tôi đã thực sự tìm kiếm là một ý tưởng về những gì mọi người làm trong các tình huống tương tự khi DB không có sẵn. – gleng

Trả lời

3

Trả lời tùy thuộc vào loại đơn đăng ký của bạn. Có những ứng dụng có thể hoạt động ngoại tuyến - ví dụ như Microsoft Outlook. Các ứng dụng như vậy không coi các ngoại lệ kết nối là quan trọng, chúng có thể lưu công việc của bạn cục bộ và đồng bộ hóa nó sau này. Một ứng dụng khác như trò chơi trực tuyến sẽ coi vấn đề giao tiếp là ngoại lệ quan trọng và sẽ thoát nếu kết nối bị mất.

Khi xử lý lỗi, tôi nghĩ rằng bạn nên kiểm soát ngoại lệ trên tất cả các lớp thay vì dựa vào một số mã xử lý ngoại lệ chung. Lớp doanh nghiệp của bạn nên hiểu những gì đã xảy ra ở tầng dưới (lớp truy cập dữ liệu trong trường hợp của chúng tôi) và trả lời tương ứng. Mất kết nối không được coi là ngoại lệ không mong muốn theo ý kiến ​​của tôi. Để thực hành tốt các quản lý ngoại lệ, tôi khuyên bạn nên xem Exception Handling Application Block.

Hành vi ứng dụng, bạn nên tự trả lời cho câu hỏi sau: "Ứng dụng của tôi có giá trị kinh doanh cho khách hàng ở trạng thái bị ngắt kết nối không?" Trong nhiều trường hợp nó sẽ có lợi cho người dùng cuối để có thể tiếp tục công việc của họ trong trạng thái bị ngắt kết nối. Tuy nhiên hành vi như vậy rất khó thực hiện.

Đặc biệt đối với kịch bản của bạn Microsoft phát triển Disconnected Service Agent Application Block

0

Trong ứng dụng của chúng tôi, chúng tôi cung cấp cho người dùng tùy chọn kết nối với máy chủ khác, nếu kết nối cơ sở dữ liệu không khả dụng và họ có thể nhập một địa chỉ IP khác thử.

1

Chúng tôi có điều này trong phương pháp Main() của chúng tôi mà bẫy tất cả các trường hợp ngoại lệ unhandled ...

Application.ThreadException += new 
System.Threading.ThreadExceptionEventHandler(UnhandledExceptionCatcher); 

Thread.GetDomain().UnhandledException += new 
UnhandledExceptionEventHandler(Application_UnhandledException); 

và sau đó Application_UnhandledExceptionUnhandledExceptionCatcher thông điệp thân thiện với người dùng hiển thị.

Ngoài ra, ứng dụng sau đó gửi dữ liệu email như dấu vết ngăn xếp đến các nhà phát triển có thể rất hữu ích.

Nó phụ thuộc vào ứng dụng của khóa học nhưng đối với các loại thất bại mà bạn mô tả tôi sẽ đóng ứng dụng xuống.

2

tôi đã không đụng WinForms và .NET cho năm nay, vì vậy tôi không thể cung cấp cho bạn bất kỳ chi tiết kỹ thuật, nhưng có câu trả lời hình ảnh lager:

Đầu tiên và quan trọng nhất - không ràng buộc dữ liệu mẫu của bạn trực tiếp vào cơ sở dữ liệu.

Tạo lớp dữ liệu/mô hình riêng biệt mà bạn ràng buộc tiện ích biểu mẫu của mình.

Từ đó, bạn có một số tùy chọn có sẵn cho bạn tùy thuộc vào mức độ ổn định và tính sẵn có mà bạn cần cung cấp.

Có lẽ một trong những giải pháp đơn giản nhất ở đây là chỉ bật/tắt các phần ứng dụng cần tương tác với cơ sở dữ liệu dựa trên trạng thái kết nối.

Cấp bảo vệ tiếp theo sẽ bao gồm bộ nhớ đệm một phần của mô hình dữ liệu cục bộ và trong khi kết nối cơ sở dữ liệu bị hỏng, sử dụng bộ đệm cục bộ để xem và vô hiệu hóa bất kỳ chức năng nào yêu cầu kết nối cơ sở dữ liệu rõ ràng.

Có lẽ điều khó khăn nhất (có thể cung cấp trải nghiệm ổn định nhất cho người dùng cuối) là sao chép cơ sở dữ liệu cục bộ và sử dụng một số lược đồ đồng bộ hóa để giữ bản sao của cơ sở dữ liệu đồng bộ với db từ xa.

1

Điều này có thể hơi nhỏ quá hỗ trợ nhiều cho trường hợp ngoại tuyến, nhưng bạn đã xem "Microsoft Sync Framework" chưa? Bao gồm trong khuôn khổ là "Dịch vụ đồng bộ hóa cho ADO.NET 2.0", cho phép ứng dụng của bạn nhấn một phiên bản SQL Server CE cục bộ. Điều này có thể dễ dàng được đồng bộ hóa với một máy chủ SQL trung tâm thông qua một loạt các phương pháp.

Khung này xử lý tình huống ngoại tuyến vĩnh viễn và như tôi đã nói, nó có thể không phù hợp với yêu cầu cụ thể của bạn, tuy nhiên nó sẽ cung cấp cho ứng dụng của bạn hỗ trợ ngoại tuyến vững chắc.

0

Sử dụng một cái gì đó giống như SQLite để lưu trữ dữ liệu ẩn cho đến khi một kết nối có sẵn.

Cập nhật: Tôi tin rằng SQLite là phần cuối cho Google Gears, mà từ sự hiểu biết của tôi làm những gì bạn đang tìm kiếm trong ứng dụng web ... mặc dù tôi không biết liệu nó có thể được sử dụng trong ngữ cảnh không web hay không.

Các vấn đề liên quan