2009-05-03 30 views
36

Vì hiện tại tôi đang học cách sử dụng các Dịch vụ WCF, tôi thường xuyên gặp các hướng dẫn trên internet đề cập đến sử dụng ServiceHost khi sử dụng Dịch vụ WCF.WCF: ServiceHost là gì?

Chính xác đây là gì ServiceHost?


Trong dự án hiện tại của tôi Tôi đang sử dụng một dịch vụ WCF và có một tham chiếu đến nó từ ứng dụng của tôi và bất cứ khi nào tôi muốn tiêu thụ nó từ ứng dụng của tôi, tôi chỉ cần nhanh chóng ServiceClient của nó giống như ví dụ:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress); 

và sau đó truy cập vào các phương pháp web của tôi (OperationContract s) từ ví dụ đó (rõ ràng là mở nó trước khi sử dụng phương pháp này và đóng lại sau đó với OpenClose)

My WCF dịch vụ được lưu trữ trong IIS của tôi và tôi chỉ cần truy cập vào .svc từ ứng dụng của tôi để nhanh chóng các ServiceClient.

Vậy tại sao và ở đâu là ServiceHost được sử dụng?

Trả lời

29

ServiceHost về cơ bản cung cấp cho bạn mọi thứ bạn cần để lưu trữ dịch vụ WCF trong cài đặt không phải IIS hoặc WS. Một nơi chung cho một ServiceHost sẽ nằm trong một ứng dụng giao diện điều khiển hoặc dịch vụ Windows. Xem mã ví dụ từ MSDN cho how to setup a ServiceHost in a console app.

+18

Hầu như chính xác. - thậm chí IIS và WAS sẽ sử dụng một ServiceHost để lưu trữ WCF Service của bạn - họ chỉ cần tạo ra nó và xé nó ra sau lưng bạn. –

+4

Vâng, tôi chỉ đang cố gắng mô tả khi bạn nhìn thấy một ServiceHost trong mã của riêng bạn. ServiceHost IIS/WAS thường không được nhà phát triển truy cập trực tiếp. –

+0

Vâng, đúng vậy - ServiceHost gần như vô hình trong kịch bản IIS/WS :) –

23

Triển khai dịch vụ của bạn chỉ là lớp .NET - bạn cần có môi trường thời gian chạy cho nó, vì vậy nó có thể được thực hiện bằng cách nào đó. Đó là những gì ServiceHost dành cho - nó sẽ tải lớp dịch vụ của bạn, thiết lập các thiết bị đầu cuối và trình lắng nghe kênh và tất cả những thứ đó, và do đó cung cấp cho lớp dịch vụ của bạn một "hệ sinh thái" để sống và hoạt động.

Bạn có thể khởi tạo một ServiceHost lớp mình trong một ứng dụng giao diện điều khiển, một dịch vụ Windows, hoặc thậm chí một ứng dụng Winforms, và do đó làm cho lớp dịch vụ WCF của bạn có sẵn cho thế giới bên ngoài - hoặc bạn có thể ủy nhiệm công việc đó cho IIS hoặc WAS. Thậm chí IIS hoặc WS sẽ sử dụng một ServiceHost để lưu trữ dịch vụ WCF của bạn - họ chỉ làm điều đó automagically đằng sau hậu trường, và "theo yêu cầu" - bất cứ khi nào có yêu cầu dịch vụ WCF của bạn đi kèm trong Marc

+1

bạn sẽ sử dụng nó trong các thử nghiệm TDD nơi bạn muốn kiểm tra các cuộc gọi như gửi các tiêu đề cụ thể hoặc dữ liệu đến yêu cầu http (WebOperationContext) tới các phương thức dịch vụ wcf? – PositiveGuy

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