2010-01-22 33 views
7

Chúng tôi có một ứng dụng mà chúng ta muốn để lộ một số lượng lớn các đơn vị cơ sở dữ liệu và một số logic kinh doanh. Mỗi thực thể sẽ yêu cầu khả năng Đọc, Thêm và Cập nhật. tại thời điểm này chúng tôi không mong đợi để cho phép xóa.Multi Tenant Cấp chất lượng API cho các tổ chức kinh doanh và logic kinh doanh

phần mềm mà chúng tôi xây dựng được sử dụng trong nhiều lĩnh vực kinh doanh, do đó, một số dịch vụ của Cục hoạt động đa ngành, một số khách hàng của chúng tôi sử dụng phương pháp này để có cơ sở dữ liệu riêng biệt vì lý do tài chính.

Chúng tôi muốn có thể giảm thiểu số lượng thiết bị đầu cuối cần được duy trì. Tại thời điểm này chỉ có 3 bảng được tiếp xúc với nhau như WCF giao diện mỗi với 6 phương pháp kèm theo. điều này có thể quản lý được nhưng nếu hoạt động có 50 cơ sở dữ liệu đột nhiên trở thành 150 điểm cuối. tệ hơn nếu chúng ta có 50 bảng tiếp xúc với 2500 điểm cuối.

Có ai có đề xuất về cách chúng tôi có thể thiết kế hệ thống mà chúng tôi vẫn có một mô hình thực thể đơn giản của công việc Job.add (var1) hoặc iList = Job.GetSelected ("sql type read").

không có tất cả những thiết bị đầu cuối

+0

Hãy đầu tư vào trình kiểm tra chính tả –

Trả lời

0

Nó có vẻ như bạn có thể vượt qua "bản sắc" cho mọi truy vấn và lấy đó vào tài khoản. Điều này có nghĩa là mọi bản ghi trên bảng "Công việc" của bạn sẽ cần phải có một tham chiếu đến "danh tính" của chủ sở hữu nhưng điều đó không phải là vấn đề lớn.

Chỉ cần đảm bảo rằng mọi truy vấn đều xác thực "danh tính" và bạn sẽ không sao.

+0

Một cách tiêu chuẩn để thực hiện việc này là với ID phiên, thường được chuyển trong tiêu đề cookie HTTP. – Peter

0

Nếu tôi hiểu chính xác câu hỏi của bạn, tôi nghĩ bạn cần điểm cuối duy nhất nhưng bạn có thể có một hành vi dịch vụ đơn lẻ mà điểm cuối của bạn tham chiếu.

Tạo một endpoint mặc định:

<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyService.DefaultBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Đặt mặc định của bạn ràng buộc:

<bindings> 
    <wsHttpBinding> 

    <binding name="DefaultBinding"> 
     <security mode="None"> 
     <transport clientCredentialType="None"/> 
     </security> 
    </binding> 

    </wsHttpBinding> 
</bindings> 

Có tất cả các điểm tham chiếu dịch vụ cho hành vi mặc định và ràng buộc:

<service behaviorConfiguration="MyService.DefaultBehavior" 
      name="MyService.Customer"> 
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" 
       contract="MyService.ICustomer"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 

Mỗi lần bạn thêm một dịch vụ, một mục cấu hình đơn giản của nó.

0

Cung cấp Multi-Tenancy, Without A bazillion End Điểm

Một cách là để đi với một dịch vụ WCF kiểu REST rằng có thể sử dụng tên đăng nhập/mật khẩu để phân biệt mà khách hàng mà bạn đang làm việc với, và do đó có thể chọn nội bộ mà DB để kết nối.WCF cung cấp cho bạn các UriTemplate cho phép bạn để ánh xạ một phần của URL để của param trong các phương pháp web của bạn:

Bạn có thể thêm Uri Templates khác cho các nhiệm vụ hơn là tốt, chẳng hạn như sau:

Ai đang sử dụng Dịch vụ của tôi?

Bằng cách yêu cầu khách hàng cung cấp tên người dùng và mật khẩu, bạn có thể ánh xạ tới DB cụ thể. Và bằng cách sử dụng UriTemplate của /{tableName}/{operation}/{params ...}, bạn có thể sử dụng mã trong dịch vụ web của mình để thực thi các thủ tục DB cho bảng, hoạt động và thông số.

Bao bì It Up

cấu hình web của bạn sẽ không cần phải được thay đổi nhiều ở tất cả chẵn. Loạt bài viết trên web sau đây là một nơi tuyệt vời để tìm hiểu về các dịch vụ web kiểu REST, mà tôi tin rằng phù hợp với những gì bạn cần: http://www.robbagby.com/rest/rest-in-wcf-blog-series-index/

+1

Đặt "động từ" trong URL không được coi là RESTful. Một trong những nguyên mẫu cơ bản của REST là chỉ sử dụng GET, POST, PUT và DELETE làm động từ của bạn. Trong trường hợp này GET sẽ thay thế lựa chọn, POST sẽ thay thế chèn, và PUT sẽ thay thế cập nhật. – Peter

+0

ah, bắt tốt. tôi đã không nhận ra tôi đã làm điều đó trong câu trả lời của tôi. vì vậy tất cả các url đều có thể giống nhau, chỉ cần sử dụng một động từ HTTP khác cho các thao tác cơ bản chèn, cập nhật, xóa và chọn. – ajawad987

+0

Tôi đã nêu lên câu trả lời của mình, cảm ơn Peter lần nữa! – ajawad987

0

Với Apache, bạn có thể sử dụng một bộ quy tắc viết lại URL khá đơn giản để ánh xạ một tập hợp tùy ý Bảng bảng DB và các điểm cuối tương ứng của chúng với một điểm cuối duy nhất có tham số.

Ví dụ, để ánh xạ $ ROOT/tên_bảng/column_name đến $ ROOT/index.php tn = tên_bảng & cn = column_name, bạn có thể thêm một quy tắc như vậy đến $ ROOT/.htaccess:

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/?$ index.php?tn=$1&cn=$2 [QSA,L] 

Sau đó, bạn chỉ cần duy trì $ ROOT/index.php (trong đó tất nhiên có thể tạo mã trạng thái HTTP thích hợp cho các bảng và/hoặc cột không tồn tại).

1

WCF Data Services cho phép bạn hiển thị dữ liệu của mình theo cách RESTful bằng cách sử dụng dữ liệu mở (OData). Điều này được chính thức gọi là dịch vụ dữ liệu ADO.Net và trước đó là Astoria. Bất kỳ bộ sưu tập IQueryable có thể được tiếp xúc. Cách hiển thị trong hầu hết các ví dụ là sử dụng khung Entity, tuy nhiên có những ví dụ cho thấy việc sử dụng với NHibernate và các công nghệ truy cập dữ liệu khác. OData là một API tự mô tả dựa trên Atom-Pub với một số tiện ích mở rộng tùy chỉnh. Với số lượng mã tối thiểu bạn có thể cho bạn thấy toàn bộ cơ sở dữ liệu ở định dạng được xác định rõ. Đó là phần dễ dàng.

Để thực hiện đa cấp, bạn có thể tạo bộ chặn truy vấn trong ứng dụng Dịch vụ dữ liệu WCF để triển khai logic đó. Số lượng các trình chặn và sự phức tạp của mã bạn viết sẽ phụ thuộc vào mô hình bảo mật và các yêu cầu của bạn. Nhìn vào một cái gì đó như các mẫu T4 hoặc CodeSmith để tạo ra các phương pháp đánh chặn dựa trên lược đồ cơ sở dữ liệu của bạn có thể là một cách để ngăn chặn rất nhiều mã hóa thủ công lặp đi lặp lại.

Liên kết tôi đã cung cấp có rất nhiều thông tin và hướng dẫn về Dịch vụ dữ liệu WCF và sẽ cung cấp một nơi tốt để bắt đầu xem liệu nó có đáp ứng nhu cầu của bạn hay không. Tôi đã nhìn vào WCF Data Services cho một vấn đề tương tự (Multi-tenancy), và rất thích nghe cách bạn triển khai thực hiện giải pháp của mình.

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