2013-03-05 34 views
6

tôi đã tìm kiếm kỹ lưỡng trên Internet (hầu hết các liên kết đã gửi cho tôi đến stackoverflow;)) để cố gắng tìm ra giải pháp làm thế nào để giữ một Dịch vụ WCF tồn tại dưới IIS (7.5).Giữ một dịch vụ WCF còn sống dưới IIS

Nhiều câu trả lời ở đây gợi ý viết một ứng dụng định kỳ sẽ gửi các yêu cầu giả tới dịch vụ WCF để giữ cho nó luôn hoạt động.

Câu hỏi của tôi là: nếu tôi tạo chuỗi trong WCF sẽ bắt đầu khi dịch vụ được gọi đầu tiên (trong một hàm dựng tĩnh) sẽ định kỳ tiêu thụ WCF?

Ý tôi là ví dụ trong C#:

while (true) 
{ 
    WebClient client = new WebClient(); 
    string returnString = client.DownloadString("http://..."); 
    Thread.Sleep(1000 * 5); 
} 

giả định rằng "http: // ..." là một URI để một WebMethod cung cấp mà ví dụ trả về một số nguyên.

Điều đó có hiệu quả không? Về cơ bản tôi cần một số loại dịch vụ web (không phải là một WCF nhưng không phải là một dịch vụ Windows) đang chạy trên một máy chủ thực hiện một số hoạt động và cập nhật một cái gì đó trong một cơ sở dữ liệu SQL Server. Quay lại đầu trang Cung cấp Phản hồi THÔNG TIN THÊM Vì vậy, nếu cách tiếp cận được mô tả sẽ không hoạt động, cách tốt nhất để đạt được điều này là gì?

+2

Đối với kịch bản của bạn? Chắc chắn không phải WCF. Tại sao không sử dụng dịch vụ Win? –

+0

Vì tôi cũng cần đôi khi gửi một số dữ liệu đến nó qua HTTP – kamilkp

+1

Ok. Làm thế nào là loại trừ lẫn nhau? Bạn có thể có dịch vụ WCF AND Win, cả hai đều sử dụng cùng một thư viện cho logic nghiệp vụ, vv Nếu không, tại sao không? –

Trả lời

1

Tôi đề nghị bạn tạo một chương trình nhỏ (giao diện điều khiển ứng dụng) gọi các dịch vụ web. Chương trình sẽ lấy làm đối số url của dịch vụ web. Sau đó, bạn tạo một cửa sổ theo lịch trình nhiệm vụ chạy chương trình. Bằng cách này, bạn có rất nhiều tính linh hoạt so với phương pháp nhúng mà bạn đang truy vấn vì chương trình chỉ là một ứng dụng khách khác cho dịch vụ web.

1

Cố gắng tránh sử dụng vòng lặp while. Có thể http://quartznet.sourceforge.net/ là thứ bạn đang tìm kiếm. Trên WCF, hãy bắt đầu tạo Task mỗi 10 phút, điều này sẽ giúp WCF tự hoạt động.

5

AppFabric cho phép bạn tạo các dịch vụ WCF có thể tự khởi động và được sống lâu - điều này có thể là giá trị kiểm tra ra như là một tùy chọn lưu trữ (nó chỉ là một plugin cho IIS)

Auto Start

+0

Tôi quên đề cập đến rằng tôi đang triển khai nó trên một số dịch vụ lưu trữ miễn phí. NET (www.somee.com) vì vậy tôi không thể thực sự gây rối với IIS. – kamilkp

+0

Ah. Nếu bạn thực sự muốn thử ý tưởng về một chủ đề gọi dịch vụ, bạn nên xem xét các dịch vụ WCF của WF, hỗ trợ giấc ngủ, đoàn xe, v.v. - mặc dù dịch vụ windows là một lựa chọn tốt hơn – NDJ

+0

Nếu tôi lưu trữ WCF trong Windows Service, WCF sẽ được giữ sống ở mọi thời điểm? – kamilkp

9

Tới IIS của bạn -> Application Pool (hoặc tạo mới) -> Advanced settings và thiết lập thường xuyên Time Interval = 0

enter image description here

Xem chủ đề liên quan here.

0

Điều bạn đang làm về cơ bản là sai ngay từ đầu.

Vấn đề là: IIS cơ bản là nhà môi giới yêu cầu không trạng thái cho các yêu cầu http (IIS cơ bản) và nhà môi giới yêu cầu cho các yêu cầu dịch vụ (IIS w. AppFabric).

Những gì bạn đang yêu cầu là làm thế nào để biến IIS không quốc tịch vốn đã thành một máy chủ trạng thái, với các luồng vĩnh cửu đang chạy.

Đó không phải là những gì IIS làm, IIS xử lý các yêu cầu và AppDomain của nó là tùy thuộc vào AT TẤT CẢ TIMES bị rách nát (destorying tất cả các chủ đề).

Làm cho câu trả lời được upvoted trở nên nguy hiểm nhất, vì nó dạy bạn cách ảnh hưởng đến quá trình tái chế, mà không kiểm soát các giọt nước mắt (tắt tên miền và chủ đề ứng dụng) mà bản thân IIS sẽ thực hiện một cách intermittenly.

Người yêu cầu là "nước ngoài" đối với bản thân IIS.

Vòng đời bên trong của dịch vụ mặc dù, được quản lý hoàn toàn bởi IIS (và cấu hình của các ứng dụng của nó).

Vì vậy, nếu với "tiếp tục sống", bạn có nghĩa là: liên tục yêu cầu một số dịch vụ, sau đó làm như Andreas đề xuất thêm (tạo một công việc lên lịch).

Nếu có "giữ nguyên" nghĩa là: để đảm bảo cùng một phiên bản của lớp xử lý các yêu cầu, thì bạn cần phải xem xét đến thời gian hoạt động của WCF.

Nếu có "giữ nguyên" nghĩa là: để tạo mã bạn đã tạo "trạng thái" và giữ các biến tĩnh f.eks còn tồn tại, vâng, bạn không chấp nhận IIS về cơ bản là pr không quốc tịch. yêu cầu người môi giới với quản lý trọn đời nội bộ.

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