2009-12-31 36 views
35

Tôi có dịch vụ Windows được tùy chỉnh bằng văn bản mà tôi chạy trên một số máy ảo Hyper-V. Các máy ảo được khởi động lại một vài lần một giờ như một phần của một số thử nghiệm tự động đang chạy. Dịch vụ được đặt thành tự động bắt đầu và hầu như mọi lúc, nó bắt đầu hoạt động tốt."Đã hết thời gian chờ trong khi chờ dịch vụ kết nối" sau khi khởi động lại

Tuy nhiên, có thể 5% thời gian, không có mẫu mà tôi có thể nhận ra, dịch vụ không khởi động được. Khi không thành công, tôi gặp lỗi trong Trình xem sự kiện cho biết

Đã hết thời gian chờ (30000 mili giây) trong khi chờ dịch vụ Tên dịch vụ của tôi kết nối.

Khi điều này xảy ra, tôi có thể khởi động dịch vụ theo cách thủ công hoặc khởi động lại và dịch vụ sẽ bắt đầu hoạt động tốt.

Điều tôi không thể hiểu được là thời gian chờ 30 giây dường như không xuất hiện trong mã của tôi. Dòng đầu tiên của phương thức OnStart() của lớp dịch vụ của tôi ghi nhật ký "Starting ..." vào nhật ký log4net của nó. Khi dịch vụ không khởi động được, tôi thậm chí không nhận được bất cứ thứ gì đã đăng nhập, điều này cho tôi biết rằng log4net không thể đăng nhập vì bất kỳ lý do gì hoặc thời gian chờ xuất hiện trước khi OnStart() của tôi được gọi.

Dịch vụ chạy trên nhiều hệ điều hành, từ XP tới Win7 và 2008R2, và tôi biết rằng việc thiết lập dịch vụ để bắt đầu trễ có thể giải quyết vấn đề này cho Vista và sau đó.

Tôi đã không thể gỡ lỗi từ xa điều này vì thực tế là nó xảy ra liên tục và trong khi khởi động hệ thống, và tôi đang thua lỗ để tìm cách tiếp tục tìm hiểu những gì đang xảy ra. Bất kỳ ý tưởng?

+0

Dịch vụ của bạn có phụ thuộc vào bất kỳ dịch vụ nào khác hoặc bất kỳ dịch vụ nào phụ thuộc vào dịch vụ của bạn để bắt đầu không? –

+0

Không, nó hoàn toàn độc lập. –

+0

Bạn đang sử dụng loại ứng dụng nào cho log4net? –

Trả lời

10

Bạn có thể muốn xem post này, nó không giống với hoàn cảnh của bạn nhưng giải pháp này cung cấp lời khuyên âm thanh về các dịch vụ Windows và chức năng khởi động.

+2

Cảm ơn, đây là những gì tôi đã làm - thiết lập ServicesPipeTimeout đến 120 giây trên tất cả các máy ảo mà dịch vụ này chạy. –

+0

Theo liên kết ở trên, tôi đặt một số cuộc gọi đến SetServerStatus trong mã tôi tiến hành trong OnStart. Thật vậy điều này thông báo cho hệ thống về sự tiến bộ và chủ động ngăn chặn thời gian chờ. –

5

Tôi đoán - và đó là tất cả - đó là đĩa đang đập mạnh trong khi khởi động, đến điểm mà .NET Framework không bắt đầu trong 30 giây mà Windows phân bổ cho các dịch vụ để bắt đầu.

Giải pháp kludgy có thể là đặt dịch vụ bắt đầu theo cách thủ công, sau đó viết một dịch vụ sơ khai rất nhỏ trong mã không được quản lý (ví dụ: C++, Delphi) để bắt đầu dịch vụ.

Một cách tiếp cận khác có thể là bắt đầu dịch vụ từ xa từ một máy khác. Lệnh sc sẽ thực hiện công việc một cách độc đáo.

+0

Trong trường hợp của tôi, dòng đầu tiên trong OnStart là đăng nhập với log4net nhưng tôi chưa bao giờ thấy thông báo tường trình này (tôi không thấy thông báo tường trình nào từ dịch vụ). Máy tính đã cũ và đĩa không thực sự nhanh. Sau khi thay đổi ServicePipeTimeout thành 60 giây, dịch vụ đã bắt đầu. (http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/several-service-control-manager-issues-event-ids/5eb047bb-e5bf-47b3-a661-299f6f9835ba) –

1

Tôi nghĩ rằng tôi có thể cũng đã tìm thấy một yếu tố đóng góp cho loại này không bắt đầu khi khởi động lại lỗi. Có vẻ như nếu Nhật ký sự kiện Windows được đặt thành Ghi đè sự kiện> 7 ngày .. kích thước 512kb .. Nhưng nhiều hoạt động đã xảy ra trong cửa sổ này, thì Nhật ký sự kiện có hiệu quả đầy đủ vì nó không thể ghi đè lên số các sự kiện được tạo bên trong khung thời gian đó. Nếu bạn đặt bản ghi sự kiện thành kích thước lớn hơn HOẶC để ghi đè khi cần thì bạn sẽ không gặp phải sự cố này

3

Vì nó đáng giá, tôi phát hiện ra rằng tôi nhận được thông báo này (gần như ngay khi khởi động dịch vụ) vì tôi không có phiên bản 4.5 của khung công tác .NET được cài đặt trên máy mục tiêu. Tôi đã khôi phục phiên bản tôi đang sử dụng sang phiên bản 4.0 (đã được cài đặt trên máy mục tiêu) và dịch vụ hoạt động như mong đợi.

+0

Cảm ơn! Thật không may là nó không chỉ cho bạn biết rằng khuôn khổ là mất tích:/ – user145400

0

Vấn đề của tôi với cùng lỗi là do.Cài đặt mạng trên máy chủ không hoạt động chính xác.

Để con số này ra:

tôi đã thực hiện một ứng dụng giao diện điều khiển nhỏ với logic giống như các dịch vụ thực hiện, và tôi đã thực hiện một try-catch xung quanh mảnh đang toàn bộ, bán phá giá nó tất cả ra để giao diện điều khiển.

Không chắc chắn lý do thông tin không phát sinh, nhưng chúng tôi đã thấy các thông báo có giá trị về lỗi khung mà chúng tôi sẽ không bao giờ thấy khác.

2

Tôi đã gặp lỗi này trong Trình xem sự kiện khi cố gắng cài đặt dịch vụ bằng PowerShell.

Sự cố tôi gặp phải là tôi có các giá trị khác nhau cho "Tên dịch vụ" và "Tên hiển thị dịch vụ" trong tập lệnh PowerShell của tôi đối với những tệp mà tôi đã chỉ định trong tệp program.cs của Ứng dụng bảng điều khiển của mình.

+1

Bạn là một người tiết kiệm cuộc sống! – MEMark

0

Chúng tôi đang gặp sự cố tương tự trên Máy chủ Windows 2016.

Sửa chữa có vẻ như đang hoạt động đang thay đổi người dùng theo đó dịch vụ chạy từ Tài khoản dịch vụ cục bộ sang Quản trị viên cục bộ (không chắc nguyên nhân là gì).

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