2013-07-01 13 views
9

Chúng tôi có dịch vụ SOF WCF đã được thiết lập. Giao diện của nó được định nghĩa trong WSDL, từ đó các lớp C# được tạo ra cho máy chủ của chúng tôi (các khách hàng tạo ra các ràng buộc phía máy khách trong các ngôn ngữ khác nhau, từ cùng một WSDL). WSDL có một phiên bản hiện tại, chúng ta có thể thay đổi một chút, và các phiên bản cũ, mà chúng ta không thể thay đổi hoặc thả mà không có một khoảng thời gian không dùng nữa, tham vấn… Các yêu cầu SOAP có xu hướng phức tạp, có nhiều không gian tên XML trong cùng một yêu cầu .Dịch vụ SOAP hiện có và Ứng dụng Web góc mới

Dịch vụ SOF WCF có rất nhiều "thông minh" trong đó và cung cấp chính xác các loại phương tiện tìm nạp và báo cáo mà chúng tôi cần cho một ứng dụng web mới mà chúng ta cần thực hiện. Chúng tôi hy vọng sẽ sử dụng AngularJS cho phía khách hàng của điều đó. Nhưng những yêu cầu SOAP phức tạp này không dễ thực hiện trong thế giới JavaScript. Nếu chúng ta chỉ có một dịch vụ REST, chúng ta có thể sử dụng dịch vụ Tài nguyên góc cạnh. Nếu không phải vậy, thì một máy chủ đã nói JSON, mặc dù trong một phong cách RPC như SOAP, sẽ chạy khá gần.

Tôi đã có nhiều ý tưởng khác nhau về sự không phù hợp trở kháng giữa máy chủ và ứng dụng khách của chúng tôi có thể giảm nhẹ như thế nào. Nhưng không có gì âm thanh nhanh chóng hoặc dễ dàng.

Tôi đã nghĩ: -

  1. Viết một dịch vụ REST mới. Chính xác điều mà phía khách hàng muốn, nhưng là một phần phát triển mới nghiêm trọng.
  2. WebHttpBinding sẽ cung cấp một cái gì đó. Nhưng có vẻ như tôi yêu cầu C# đánh dấu thuộc tính tùy chỉnh (cách đạt được khi C# của chúng tôi được tạo từ WSDL) và có thể sẽ không hỗ trợ các loại phức tạp của chúng tôi
  3. Thu thập hoặc viết tải JS phía máy khách để trừu tượng gọi SOAP dịch vụ. Tuy nhiên, trừ khi điều này có thể được tự động tạo ra từ WSDL, đó là một lượng lớn mã phía máy khách để viết.
  4. Viết IDispatchMessageFormatter cho máy chủ, chấp nhận một số định dạng JSON của thư mà tôi phát minh ra. Âm thanh khó khăn, đặc biệt là những ví dụ tốt về những người thực hiện và tích hợp IDispatchMessageFormatter dường như khó đi qua.
  5. Viết một MessageEncoder để trao đổi giữa JSON và XML. Nhưng điều này không thực sự là một hoạt động mã hóa, như đã trở nên rất rõ ràng khi tôi cố gắng viết nó!

Tôi đang tìm kiếm đề xuất.

+0

Máy chủ WCF của bạn sử dụng bao nhiêu hợp đồng (phương pháp)? Bạn có thể viết một máy chủ WebAPI nhúng và gọi lớp thực hiện dịch vụ WCF (1 phương thức web: 1 hợp đồng hoạt động) và trả về các đối tượng dữ liệu mù quáng được đóng gói lại như json (nghĩa là khả thi về số lượng và độ phức tạp của các hợp đồng hoạt động)? Điều này có thể xảy ra, mặc dù nếu bạn dựa vào tính đa hình trong các hoạt động dịch vụ của bạn thì những thứ đó không thể được nhân bản trong JSON (AFAIK). –

+0

Có bảy dịch vụ và tổng cộng khoảng 50 hoạt động. – PeteAC

+0

Làm thế nào để viết một dịch vụ nghỉ ngơi sẽ ủy thác các cuộc gọi đến dịch vụ xà phòng? –

Trả lời

8

Nói chung, tôi đề xuất một dịch vụ REST cho bất kỳ phát triển AngularJS nào và đã bao bọc một số hệ thống cũ với các máy chủ API Node.js. Tất nhiên có một số lượng lớn "nó phụ thuộc", nhưng nói chung hầu hết các dự án sẽ hạnh phúc hơn và hiệu quả hơn sau tuyến đường đó.

Một số điều cần suy nghĩ

  1. thế nào cũng không SOAP API hiện tại của bạn phù hợp với những yêu cầu về giao diện người dùng?
  2. Bạn có kinh nghiệm với Express, Sinatra, Flask hoặc các khung công tác khác cho phép phát triển nhanh chóng các API REST không? Tôi thấy tôi có thể xây dựng một máy chủ API Node.js Express API vững chắc trong một vài giờ và sau đó mở rộng nó khi tôi xây dựng ứng dụng AngularJS.
  3. Bạn có kinh nghiệm với AngularJS như thế nào? Đó là một dự án nâng cao hơn để xây dựng một tầng dữ liệu phía máy khách phức tạp.

Sáu lý do Tại sao Văn là quan trọng cho AngularJS

  1. Nó nhanh hơn nhiều để viết mã kiễu góc bằng $ tài nguyên và $ http. Nhận quyền API là một khuyến nghị tốt để phát triển AngularJS hiệu quả. Thật vậy, bạn có thể lập luận rằng AngularJS được thiết kế cho REST, và đó là lý do tại sao JavaScript đơn giản làm việc cho mô hình (xem 2).
  2. Mô hình dữ liệu đối tượng JavaScript đơn giản của Angular hoạt động tốt với API REST có thể nói JSON khớp với giao diện người dùng. Tuy nhiên, các vấn đề phát sinh khi không có sự phù hợp tốt - Angular không có mô hình dữ liệu chính thức, do đó bạn sẽ viết rất nhiều mã cố gắng hợp lý hóa API của bạn để hoạt động tốt với Angular. Thư viện của bên thứ ba như breeze.js có thể cung cấp một số giải pháp, nhưng nó vẫn còn khó xử.
  3. Bạn có thể mở rộng dễ dàng với bộ nhớ đệm. Thật dễ dàng để thêm Redis hoặc memcache hoặc Varnish hoặc các giải pháp lưu bộ nhớ cache HTTP phổ biến khác vào danh sách kết hợp. Tóm tắt dựa trên tài nguyên là hoàn hảo cho các chiến lược lưu trong bộ nhớ đệm do tính minh bạch và tính không hoạt động của một api REST.
  4. Khớp nối lỏng lẻo của front-end và máy chủ - sẽ dễ dàng hơn để hỗ trợ các thay đổi đối với chương trình phụ trợ nếu bạn di chuyển SOAP hoặc cần tích hợp với các dịch vụ khác.
  5. Thường dễ dàng hơn khi kiểm tra các API JSON riêng biệt với logic AngularJS, vì vậy các bộ thử nghiệm của bạn sẽ đơn giản và hiệu quả hơn.
  6. API REST mới của bạn sẽ dễ dàng hơn để tận dụng cho các dự án tương lai AngularJS và JSON.

Tôi hy vọng điều đó sẽ hữu ích.

Chúc mừng, Nick