2010-03-12 54 views
5
  1. cần sử dụng một dịch vụ RESTful để có thể thực hiện cuộc gọi ajax đến một dịch vụ WCF (ví dụ: bằng cách sử dụng WebInvoke thuộc tính trên Operation hợp đồng)
  2. Khi dịch vụ được thực hiện RESTful bằng cách thêm webHttp ràng buộc trên máy chủ dịch vụ, máy chủ có thể có các điểm cuối khác không? (wsHttp hay netTcp)
  3. cần rằng aspNetCompatibilityEnabled được thiết lập là true cho một dịch vụ mà có webHttp ràng buộc (và có thể thiết lập này cùng tồn tại cho thiết bị đầu cuối khác)
  4. Tôi hiểu rằng tôi có thể sử dụng cả hai JQuery và ScriptManager cho thực hiện cuộc gọi WCF trên máy khách. Tại sao tôi nên sử dụng cái kia?

Trả lời

4

câu trả lời

  1. số
    AJAX thường được sử dụng cho việc gửi đơn giản HTTP GET ("phần còn lại") yêu cầu. Nó không phải như vậy. Bạn cũng có thể định dạng một tải trọng bằng cách sử dụng một phong bì SOAP và POST nó tới điểm cuối. Trong trường hợp đó, dịch vụ WCF sẽ phải là wsHttp hoặc basicHttpBinding, ít nhất. Đây là an example of using VBScript to create and send a SOAP request, nhưng bạn có thể làm tương tự trong Javascript. Bạn không thể sử dụng các phần mở rộng SOAP nâng cao hơn, như WS-Security, XML DigSig, v.v. Vâng, bạn có thể nhưng sẽ không thực tế. Ví dụ, tôi không biết về bất kỳ thư viện chuẩn hóa XML nào trong Javascript, đó là điều cần thiết để thực hiện WS-Security hoặc chữ ký số. Có 17 chướng ngại vật tương tự. Kết quả: bạn không thể sử dụng các phần mở rộng SOAP nâng cao hơn khi gọi từ Javascript.
    .
    Nếu bạn sử dụng jQuery ajax, bạn sẽ cần sử dụng gọi lại beforeSend trên yêu cầu ajax để đặt tiêu đề SOAPAction.
    .
    Có nói rằng, sẽ dễ dàng hơn nhiều khi xử lý json trong một chương trình Javascript, hơn là đi bộ DOM của một tài liệu XML. Nói cách khác, bạn nên sử dụng JSON/REST khi kết nối từ Javascript sang WCF, thay vì SOAP. Đôi khi nó không phải là một lựa chọn, tôi đoán.


  2. Dịch vụ WCF có thể có nhiều điểm cuối và chúng có thể nghe cùng hoặc các phương tiện vận chuyển khác nhau như HTTP, net.tcp, net.pipe hoặc net.msmq.

  3. No. aspNetCompatibilityEnabled chỉ cho phép một số tính năng giống như ASMX trên máy chủ. Nó ảnh hưởng đến cách dịch vụ được thiết kế và nó độc lập với chữ ký thư. Nó loại trừ việc sử dụng các giao thức không phải HTTP. Để biết thêm về điều này, hãy xem Wenlong Dong's article.

  4. để sử dụng khung làm việc nào trên máy khách - dễ hơn? Tôi không có kinh nghiệm với ScriptManager, nhưng các tiêu chí quyết định là khá đơn giản. jQuery hoạt động tốt và phù hợp nếu bạn đã sử dụng jQuery. Nếu bạn không có hoặc muốn jQuery, bạn có thể sử dụng XmlHttpRequest để gửi các yêu cầu SOAP hoặc REST. Nếu những thứ đó không phù hợp, hãy sử dụng cái gì đó khác.

+0

@Cheeso - Nếu tôi sử dụng JQuery trên máy khách để thực hiện cuộc gọi AJAX, tôi cho rằng câu trả lời cho (1) sẽ là có, vì bây giờ tôi phải sử dụng Json làm phản hồi và điều này có thể được thực hiện bằng cách áp dụng thuộc tính WebGet và thay đổi RequestFormat thành Json?Điều này về cơ bản sẽ không biến dịch vụ này thành một dịch vụ RESTful? – DotnetDude

+0

No. bạn có thể sử dụng jQuery ajax và chỉ định dataType = 'xml', để chỉ ra loại dữ liệu bạn đang mong đợi từ máy chủ. Nếu đó là phản hồi XML thì sẽ không tự động được đánh giá như một giá trị json bởi jQuery. – Cheeso

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