2009-07-17 30 views
7

Tôi đang thử các dịch vụ web cho một ý tưởng tôi đã có. Chạy trong gỡ lỗi có vẻ như lớp dịch vụ web khởi tạo mỗi khi khách hàng gọi một phương thức trong dịch vụ web. Tôi có thể thấy điều này bằng cách thấy rằng hàm tạo được gọi mỗi khi tôi gọi một phương thức. Tôi chỉ khởi tạo dịch vụ web proxy một lần trong ứng dụng khách.Dịch vụ web .NET có bắt đầu với từng cuộc gọi phương thức không?

Điều này có nghĩa là tôi phải lưu trữ tất cả dữ liệu giữa các cuộc gọi và có nghĩa là nếu tôi sử dụng databse, tôi sẽ phải kết nối lại với mọi cuộc gọi đến một phương thức.

Điều đó không đúng?

+0

Tại sao? Đó là cách các trang web hoạt động và một dịch vụ web thực sự chỉ là một trang web với một chức năng thay thế. –

+0

Ồ đúng. Giống như một trang web. Bận! Tôi sẽ thử ý tưởng WCF Cảm ơn – Richard210363

+0

Spencer Ruport: Nếu bạn chưa xử lý các trang web hoặc các khung công tác không quốc tịch khác trước đây, ban đầu nó có vẻ lạ. Sau khi tất cả, trong một khuôn khổ nhà nước bạn sẽ không phải làm tất cả những công việc thêm nhiều lần. – Halvard

Trả lời

3

Đối với ASMX, điều đó đúng và chủ yếu là điều tốt. Các dịch vụ phải là không trạng thái càng tốt và nếu bạn thực sự cần lưu trữ thứ gì đó giữa các cuộc gọi thì bạn có thể sử dụng một singleton. Tuy nhiên, tôi không nghĩ rằng việc giữ một kết nối cơ sở dữ liệu sẽ đủ điều kiện, bởi vì chúng được lưu trữ và bạn muốn sử dụng phạm vi sử dụng của bạn.

Nếu bạn muốn một đối tượng duy nhất ở lại giữa các cuộc gọi, WCF sẽ cung cấp tùy chọn này. Do ASMX đã lỗi thời, bạn có thể muốn chuyển sang WCF.

+1

Có thể không hoàn toàn lỗi thời. "Di sản" là từ MS sử dụng. –

+0

Đó là rất khéo léo của họ. –

5

Điều đó thực sự đúng.

Dịch vụ web (trong Kiến trúc hướng dịch vụ) có nghĩa là không trạng thái (chúng không nhớ bất cứ điều gì giữa các cuộc gọi ... tất cả sự kiên trì dữ liệu tùy thuộc vào bạn).

Nếu bạn tìm kiếm đủ lâu trên web, bạn sẽ tìm thấy các nỗ lực để tạo các dịch vụ web trạng thái (có vị trí của chúng, nhưng đi ngược lại các nguyên tắc cốt lõi của SOA). Tuy nhiên, bạn sẽ thấy rằng họ không làm giảm bớt mối quan tâm của bạn. Bạn sẽ nhận được một instantianciation lớp mới với mọi cuộc gọi và bất kỳ kết nối đến DB sẽ phải được tái tạo.

2

Vâng, đúng 100%. Mỗi khi một máy chủ nhận được yêu cầu, một đối tượng mới được khởi tạo để xử lý yêu cầu trên một luồng riêng biệt.

Đây là điều tương tự xảy ra với Biểu mẫu web ASP.NET cơ bản.

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