2009-08-04 30 views
15

Vì vậy, tôi đang thiết kế một dịch vụ WCF. Tôi không có kinh nghiệm với WCF, và tôi đang cố gắng để quyết định xem nó nên được lưu trữ trong IIS, hoặc một dịch vụ Windows tùy chỉnh .. Hoặc một số tùy chọn khác?Tôi có nên lưu trữ dịch vụ WCF của mình trong IIS không?

Những điều cần xem xét:

  • Nó cần phải tải dữ liệu từ một cơ sở dữ liệu khi khởi động.
  • Nó cần phải duy trì dữ liệu này theo yêu cầu, không phải tải dữ liệu mỗi lần.
  • Nó cần xử lý nhiều yêu cầu cùng một lúc.
  • Nó cần phải được cấu hình càng tốt về điểm cuối.
  • Nó sẽ được gọi là dll bản địa khá nhiều.

Tôi nghi ngờ lưu trữ nó trong IIS sẽ đơn giản hóa một số thứ nhất định, nhưng tôi không chắc nó sẽ là một ý tưởng hay trong tình huống này.

Tùy chọn của tôi là gì và ưu và nhược điểm của chúng là gì?

Trả lời

16

Bạn cần phải cơ bản nhìn vào ba lựa chọn:

1) Hosting trong IIS6 (Windows Server 2003/2003 R2): trong trường hợp này, bạn chỉ có thể lưu trữ các giao thức HTTP - không có gì khác. Đây là một hạn chế khá tự nó, bạn không thể sử dụng ví dụ netTcp cho các tình huống mạng nội bộ.

2) Lưu trữ trong IIS7/WAS (Vista, Server 2008): tùy chọn này cung cấp cho bạn nhiều tùy chọn hơn về giao thức được hỗ trợ và môi trường lưu trữ trông giống như người chiến thắng lúc đầu.

3) Tự lưu trữ: trong trường hợp này, bạn hoàn toàn có thể làm bất cứ điều gì bạn cần làm để lưu trữ và chạy dịch vụ của mình.

Nếu bạn ném tùy chọn # 1 cho bây giờ (nếu bạn chỉ có IIS6 có sẵn, tôi luôn sử dụng tự lưu trữ), nó xuống IIS7 so với tự lưu trữ.

IIS7 cung cấp cho bạn "kích hoạt theo yêu cầu", ví dụ: mã dịch vụ của bạn không có trong bộ nhớ mọi lúc, nhưng sẽ được tải và khởi tạo ngay khi có yêu cầu. Đó có thể là dấu cộng.

Mặt khác, lưu trữ trong IIS7/WAS cướp bạn có khả năng xác định điểm cuối của riêng bạn - điểm cuối của bạn và do đó địa chỉ dịch vụ là thư mục ảo nơi tệp "MyService.svc" của bạn tồn tại - khoảng thời gian. Bạn không thể thay đổi điều đó bằng bất kỳ cách nào, hình dạng hay hình dạng.

Tự lưu trữ có thể trông giống như rất nhiều công việc - nhưng nó cung cấp cho bạn sự linh hoạt nhất: bạn có thể chọn giao thức theo ý muốn, bạn có thể thiết lập lược đồ địa chỉ theo cách bạn thích, và bạn có toàn quyền kiểm soát những gì được thực hiện khi nào. Bạn có thể giới thiệu ServiceHost tùy chỉnh của riêng mình nếu bạn cần thực hiện thêm một số công việc cho dịch vụ lưu trữ, v.v. Trừ khi bạn chỉ chơi xung quanh với WCF một chút, tôi sẽ luôn luôn đề nghị và bỏ phiếu cho tự lưu trữ - nếu bạn cần phải có dịch vụ WCF chạy mọi lúc, bên trong một dịch vụ Windows NT (đó là giải pháp tốt nhất cho môi trường sản xuất), và nếu bạn đang phát triển/gỡ lỗi, bạn hoàn toàn có thể lưu trữ các dịch vụ WCF của mình trong một ứng dụng giao diện điều khiển mà bạn có thể khởi chạy và dừng lại khi rảnh rỗi.

Vì vậy, để làm cho một câu chuyện dài ngắn: cuối cùng, nếu bạn thực sự muốn kiểm soát những gì đang xảy ra, tôi sẽ luôn luôn khuyên bạn nên tự lưu trữ.

Điều này có thể thay đổi khi máy chủ "Dublin" mới Addon của Microsoft xuất hiện - đôi khi sau khi .NET 4 được khởi chạy, có thể đầu năm 2010 - nhưng vẫn còn quá sớm để nói.

Hy vọng điều này sẽ hữu ích.

Marc

+3

Bạn thực sự biết WCF của mình. – Contango

+0

@Gravitas: cảm ơn! Tôi đã học được từ WCF Master :-) (Juval Lowy) –

+0

Xin chào, gần 5 năm sau, bạn có thể cập nhật câu trả lời của bạn với phiên bản mới nhất của WCF và IIS không? Ngoài ra, bạn có nghĩ rằng các tính năng Windows Services Recycling có hiệu quả như các tính năng của IIS không? Cảm ơn! – Nock

3

Tôi có thể nói rằng nếu không có IIS7 và WAS, bạn không thể lưu trữ bất cứ thứ gì trừ các điểm cuối dựa trên HTTP bằng IIS. Như vậy bạn rất có thể muốn tự lưu trữ cho sự linh hoạt.

Đối với cân nhắc dữ liệu của bạn, bất kỳ dịch vụ có thể được mã hóa với nhà nước như vậy mà dữ liệu được lưu trữ, vv

Nhiều yêu cầu sẽ yêu cầu bạn phải sử dụng WCF đồng thời. Bạn muốn thiết lập các thuộc tính trên máy chủ dịch vụ của bạn:

[System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false, 
    InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall, 
    ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)] 
public class MyService : IMyService 
{ 
} 

WCF là một con thú lớn, tôi khuyên bạn nên có một cái nhìn vào cuốn sách và bất cứ điều gì khác mà bạn có thể có được bàn tay của bạn trên Juval Lowy, bạn sẽ không tìm hiểu nó trong một ngày.

1

Có thể một chút về chủ đề nhưng nó xem xét địa chỉ bốn.

Nếu bạn kết thúc với tự lưu trữ và cần phải được "cấu hình càng tốt về điểm cuối", bạn có thể muốn xem Managed Services Engine. MSE là một sản phẩm nguồn mở được tạo ra bởi các dịch vụ của Microsoft cho phép bạn ảo hóa các dịch vụ của mình. Về cơ bản, nó là một máy chủ WCF sử dụng siêu dữ liệu từ kho lưu trữ của chính nó để trưng ra các dịch vụ. Một số tính năng là: hỗ trợ phiên bản dịch vụ bên cạnh, khả năng bật/tắt các hoạt động trên dịch vụ, khả năng lập bản đồ các hoạt động đến điểm cuối, khả năng áp dụng chính sách cho các hoạt động.

Tôi không chắc chắn nếu nó phù hợp với nhu cầu của bạn nhưng nó có giá trị tham gia xem - đặc biệt là nếu bạn cần phải được cấu hình cực kỳ.

+0

MSE hơi cũ, phải không? –

+0

Có và không. Bản phát hành mới nhất là tháng 5 năm 2009 để nó được phát triển tích cực. Nhưng ở đâu nó phù hợp với lộ trình SOA, tôi không chắc chắn (có lẽ không có nơi nào vì nó được phát triển bởi Microsoft Services). –

+0

Đã khoảng 2 năm giữa các bản phát hành nên bây giờ tôi sẽ nói rằng đó là một chút cũ. :) –

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