2010-03-22 23 views
5

Tôi đang tìm cách tạo một dịch vụ web đơn giản mà khi được thăm dò trả về một id duy nhất. ID phải là con người có thể đọc được (ví dụ: không phải là một guid, có thể ở dạng 000023) và đơn giản được tăng lên 1 lần mỗi lần được gọi.Dịch vụ web để trả về số tự động có thể đọc được duy nhất của con người

Bây giờ tôi cần phải xem xét rằng nó có thể được gọi bởi hai ứng dụng khác nhau cùng một lúc và tôi không muốn nó trả về cùng một số cho mỗi ứng dụng.

Có tùy chọn nào khác ngoài việc sử dụng cơ sở dữ liệu để lưu trữ số hiện tại không?

Chắc chắn điều này đã được thực hiện trước đó, bất cứ ai có thể chỉ cho tôi một số mã nguồn nếu có.

Cảm ơn,

Neil

+0

+1 - câu hỏi thú vị, mặc dù tôi luôn sử dụng cơ sở dữ liệu tôi muốn được xem một giải pháp thay thế. – amelvin

+0

Có ưu tiên ngôn ngữ/nền tảng nào không? –

+0

Vâng C#, cơ sở dữ liệu Sql server 2008 nếu cần, .NET 3.5 – Neil

Trả lời

1

Sử dụng một phần mảnh quan trọng của mã để kiểm soát dòng chảy cùng một lúc thông qua một phần của mã. Bạn có thể thực hiện việc này bằng cách sử dụng lock statement hoặc bằng cách sử dụng trực tiếp nhiều hơn một chút và sử dụng trực tiếp mutex. Làm như vậy sẽ đảm bảo rằng bạn trả về một số khác cho mỗi người gọi.

Để lưu trữ, sử dụng cơ sở dữ liệu quá mức cần thiết để trả lại số tự động tăng - mặc dù SQLServer và Oracle (và nhiều khả năng khác nhưng tôi không thể nói cho họ) cả hai đều cung cấp tính năng tự động tăng khóa, vì vậy bạn có thể có webservice được gọi, tạo một mục mới trong bảng cơ sở dữ liệu, trả về khóa và người gọi có thể sử dụng số đó làm khóa quay lại bản ghi đó (nếu bạn đang tiết kiệm nhiều dữ liệu hơn sau cuộc gọi ban đầu). Bằng cách này bạn cũng để cơ sở dữ liệu lo lắng về việc tạo ra các số duy nhất, bạn không phải lo lắng về chi tiết của nó - mặc dù đây không phải là một lựa chọn tốt nếu bạn chưa có cơ sở dữ liệu.

Tùy chọn khác là lưu trữ nó trong một tệp cục bộ, mặc dù sẽ tốn kém khi đọc tệp, tăng số lượng và ghi lại, tất cả trong một phần quan trọng.

+0

Điều này sẽ được sử dụng bởi các ứng dụng khác nhau vì vậy tôi sẽ không tạo hàng với dữ liệu. Mục đích duy nhất của dịch vụ là cung cấp một số tăng dần duy nhất. Sẽ có quyền truy cập vào cơ sở dữ liệu nếu được yêu cầu. Nó chỉ có vẻ lạ với tôi để có một bảng chỉ với một giá trị (số gia tăng). – Neil

+0

Nếu bạn đã có sẵn cơ sở dữ liệu thì đây là tùy chọn tốt nhất (và nhanh nhất). Nó không phải là quá lạ - bạn chỉ tận dụng một trong các tính năng của cơ sở dữ liệu. – slugster

0

bạn có thể sử dụng một tập tin.

Mã giả:

if (!locked('counter.txt')) 
    counter = read('counter.txt') 
else 
    wait 
    startAgain 
lock('counter.txt') 
counter++ 
print counter 
write('counter.txt', counter) 
unlock('counter.txt) 
Các vấn đề liên quan