2012-12-10 45 views
7

Sau khi tìm kiếm cả ngày về những gì tôi nên sử dụng, tôi không chắc chắn những gì tùy chọn sẽ là tốt nhất cho nhu cầu của tôi vì vậy tôi hy vọng ai đó có kinh nghiệm hơn có thể giúp tôi ra ngoài.Dịch vụ web hoặc API web để kết nối ứng dụng cửa sổ với MVC 4?

Tôi có một ứng dụng winforms (c#) và ứng dụng web ASP.NET MVC 4 (c#). Tôi muốn kết nối này, mục tiêu là để gửi và nhận dữ liệu từ cơ sở dữ liệu mà tôi sử dụng trong dự án MVC 4, nhưng từ bên trong ứng dụng Windows Forms. Các dữ liệu tôi gửi từ ứng dụng Windows Forms cơ sở dữ liệu, sau đó được sử dụng bởi các ứng dụng MVC 4 web.

Tôi hoàn toàn mới với các dịch vụ web/Web Api 's vì vậy tôi thực sự không thể quyết định những gì tùy chọn sẽ là tốt nhất. Bất kỳ trợ giúp sẽ được nhiều đánh giá cao ..

+1

@hawbsl: tại sao bạn đặt tiền thưởng cho câu hỏi này? Nếu bất cứ điều gì là không rõ ràng, tôi nghĩ rằng bạn nên bắt đầu câu hỏi của riêng bạn, nơi bạn giải thích những gì bạn đang thiếu trong câu trả lời hiện tại (s). – CodeCaster

+1

@CodeCaster câu hỏi là đủ rõ ràng (và nó là nhiều hơn hoặc ít hơn các câu hỏi tôi muốn hỏi) thêm một câu hỏi dupe sẽ không có ý nghĩa. tôi hy vọng cho câu trả lời tốt hơn và tốt hơn và giám sát nhiều hơn các câu trả lời (ngay cả những câu trả lời duy nhất hiện có thể được OK nhưng tôi không có lẽ biết để đánh giá. Nó didnt có bất kỳ upvotes) – hawbsl

Trả lời

1

Với thẻ bạn đã sử dụng, tôi đoán là bạn quyết định giữa SOAP Web Services và WCF. Với hai điều này, tôi nói để đi WCF. Các dịch vụ web SOAP (như được triển khai trong Visual Studio) là công nghệ cũ hơn; vẫn có ích, nhưng WCF có thể làm mọi thứ mà một dịch vụ SOAP cũ hơn có thể làm (bao gồm cả chính xác giống như một dịch vụ SOAP) và nhiều hơn nữa.

Nếu bạn có dịch vụ web kết nối máy chủ web với máy chủ cơ sở dữ liệu của bạn (hai thứ này nên có trên các máy khác nhau; máy chủ web của bạn được tiếp xúc với thế giới theo nhu cầu, trong khi máy chủ DB của bạn sẽ bị khóa như Fort Knox), tôi thấy không có lý do tại sao bạn không nên sử dụng dịch vụ tương tự như-là cho một ứng dụng WinForms nội bộ (sử dụng một mạng LAN/VPN để truy cập vào các lớp dịch vụ trên máy chủ DB). Đối với một ứng dụng WinForms phải truy cập dữ liệu qua Internet, tôi khuyên bạn nên thực hiện lại dịch vụ như một dịch vụ WCF hỗ trợ chuyển dữ liệu được mã hóa an toàn. Bạn cũng có thể thiết lập điểm cuối dịch vụ để chỉ chấp nhận các kết nối HTTPS và do đó chỉ cần chạy dịch vụ hiện có của bạn thông qua SSL/TLS.

Điều bạn chọn chủ yếu sẽ phụ thuộc vào lượng thời gian bạn có thể cam kết giải quyết vấn đề; chuyển sang HTTPS là một sửa chữa nhanh đòi hỏi ít nếu có bất kỳ thay đổi mã nào, trong khi reimplementing trong WCF sẽ mất nhiều thời gian hơn nhưng sẽ cho phép các biện pháp bảo mật bổ sung vượt ra ngoài một đường hầm an toàn đơn giản.

+0

Cảm ơn bạn đã trả lời nhanh. Ứng dụng biểu mẫu windows sẽ được bán dưới dạng sản phẩm nên sẽ có rất nhiều người dùng khác nhau cần truy cập vào cơ sở dữ liệu, qua internet. Hơn nữa, tôi không chọn giữa SOAP hoặc WCF, tôi chọn giữa tất cả các giải pháp có thể vì tôi không có kinh nghiệm về vấn đề này. Tôi đoán tôi sẽ thêm một dịch vụ WCF vào dự án MVC của tôi, như bạn đã đề nghị. Một lần nữa cảm ơn cho câu trả lời. –

3

Nếu bạn đã tạo ra MVC4 dự án sau đó bạn có thể thêm hành động để bất kỳ điều khiển và trở JSON dữ liệu như dưới đây:

public JsonResult GetCategoryList() 
{ 
    var list = //return list 
    return Json(list, JsonRequestBehavior.AllowGet); 
} 

hoặc bạn có thể tạo dự án mới của MVC4 và chọn WEBAPI mẫu. Nó sẽ tạo ra dự án WebAPI cho bạn Nó sẽ tạo ra với ví dụ .so nó sẽ dễ dàng cho để tạo webapi .Tại webapi nó trả lại dữ liệu tự động chuyển đổi sang xmljson theo request

bản đồ Các trừu tượng API WCF Web để ASP.NETWeb API xấp xỉ như sau

WCF Web AP -> ASP.NET Web API 
Service -> Web API controller 
Operation -> Action 
Service contract -> Not applicable 
Endpoint -> Not applicable 
URI templates -> ASP.NET Routing 
Message handlers -> Same 
Formatters -> Same 
Operation handlers -> Filters, model binders 

Other Links

+0

_ "vì vậy sẽ dễ dàng để tạo webapi."_ - bây giờ cố gắng gõ mạnh mẽ tiêu thụ dịch vụ đó, ví dụ một ứng dụng Windows, bởi vì đó là những gì câu hỏi này là về. Tôi muốn nói: bỏ qua WebAPI và đi với WCF. – CodeCaster

+0

Làm thế nào bạn sẽ bảo đảm Json GetCategoryList để _only_ ứng dụng Winforms có thể tiêu thụ nó và không ai khác – hawbsl

+0

nhận tên người dùng và mật khẩu làm thông số và sau đó bạn có thể xác thực và ủy quyền cho người dùng.như trang web paypal web – Nirmal

1

Hoặc một cái gì đó nhẹ như Nancy: http://nancyfx.org/

+0

bạn có muốn nói thêm gì về nó là gì không và tại sao lại sử dụng nó? Trang chủ không chính xác chứa quảng cáo chiêu hàng – hawbsl

0

Thay vì chủ trương cụ thể WCF, tôi khuyên bạn nên WCF Data Services hoặc OData, với quy định mà bạn sẽ cần phải bảo mật.Nếu bạn tìm kiếm WCF thuần túy, bạn sẽ thấy rằng bạn sẽ kết thúc việc tạo nhiều mã để xử lý truy xuất thông tin từ cơ sở dữ liệu và sau đó gửi thông tin đó về cho khách hàng của bạn. Nó không có âm thanh xấu, lúc đầu, nhưng sau khoảng 30 thực thể trong một cơ sở dữ liệu, bạn sẽ nhanh chóng phát triển mệt mỏi của một giải pháp tinh khiết WCF.

OData tuyệt vời, nó sử dụng Entity Framework và nhanh chóng mở thao tác dữ liệu cho cơ sở dữ liệu hiện tại hoặc cơ sở dữ liệu bạn sắp thực hiện. Nó sẽ giúp bạn tiết kiệm rất nhiều thời gian phát triển, nếu bạn có thể làm cho dịch vụ của bạn an toàn. Định dạng của phản hồi dữ liệu linh hoạt. Có rất nhiều thư viện khách hàng được chuyển cho các ngôn ngữ lập trình khác.

Các bước để đảm bảo dịch vụ khá đơn giản. Luôn triển khai đến https. Mọi phương thức đăng nhập hoặc đăng ký, cần phải là phương thức đăng bài, trả về mã thông báo (Giá trị được mã hóa) hoặc một bí mật duy nhất có thể được mã hóa và gửi lại cho bất kỳ yêu cầu tiếp theo nào. Tốt hơn là sử dụng mã thông báo và hết hạn trên mã thông báo .. bởi vì nếu không cả dịch vụ và ứng dụng của bạn dù là thiết bị di động hay máy tính để bàn, cần phải có phương thức mã hóa/giải mã được chia sẻ.

2

Nếu bạn có một MVC 4 App đã có, nó sẽ là tốt hơn để sử dụng Web API (dịch vụ RESTful) Tôi giả sử bạn có một số kiến ​​thức trong việc xây dựng API REST (hiểu biết về POST, PUT, công cụ UPDATE)

Nó là đơn giản trong cấu hình và cách sử dụng. Tất cả những gì bạn cần thực sự là tạo bộ điều khiển mới như:

class MyApiController: ApiController { 

    public Post(SomeClass item) { 
     ....connect to db and do whatever you need with the data 
    } 
} 

Bạn cũng sẽ định cấu hình định tuyến cho Api.

Và sau đó trong ứng dụng winForms, bạn chỉ cần sử dụng lớp HttpClient để thực hiện cuộc gọi api.

HttpClient aClient = new HttpClient(); 

// Uri is where we are posting to: 
Uri theUri = new Uri("https://mysite.com/api/MyApi"); 

// use the Http client to POST some content (‘theContent’ not yet defined). 
aClient.PostAsync(theUri, new SomeClass()); 

Hãy nhìn vào một số chi tiết thực hiện ngay tại đây: Web Api Getting Started

Bắt đầu với WCF không phải là quá dễ dàng như với Web API.

1

Chúng tôi đã có một số vấn đề với công cụ MVC4 WebApi và kết thúc bằng cách sử dụng ServiceStack trên phía máy chủ JavaScript/AJAX cho máy khách web và RestSharp cho khách hàng dày.

Một trong những vấn đề cụ thể của chúng tôi là không có khả năng tự động tạo tài liệu, chênh lệch hiệu suất đáng kể và hỗ trợ tốt hơn cho thử nghiệm đơn vị/tích hợp.

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