2011-04-16 27 views

Trả lời

5

Nếu bạn muốn gọi tên miền chéo từ javascript đến WCF, bạn phải sử dụng JSONP. Để thêm hỗ trợ JSONP vào WCF, bạn phải xác định nó trong WebHttpBinding. Cấu hình sẽ trông giống như:

<bindings> 
    <webHttpBinding> 
    <binding name="crossDomain" crossDomainScriptAccessEnabled="true" /> 
    </webHttpBinding> 
</binding> 
<behaviors> 
    <endpointBehavior> 
    <behavior name="restBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehavior> 
</behaviors> 
<services> 
    <service name="..."> 
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="crossDomain" 
       contract="..." behaviorConfigurations="restBehavior" /> 
    </service> 
</services> 

Để kiểm tra phần jQuery ví dụ this article.

+0

hi, tôi đã tạo ra một dịch vụ của loại post.When tôi đang gửi dữ liệu từ jquery ajax nó không hoạt động. Phương pháp loại GET hoạt động tốt. – user601367

+1

Các cuộc gọi tên miền chéo/JSONP chỉ hoạt động với HTTP GET. Thông tin thêm tại đây: http://stackoverflow.com/questions/2699277/post-data-to-jsonp –

+2

cách thực hiện yêu cầu 'POST domain'' POST qua ajax? –

2

Tôi đã làm cho nó hoạt động bằng cách sử dụng cài đặt JQuery (1.5.1) $ .ajax CrossDomain được đặt thành true.

Điều tôi chưa hiểu là lý do tại sao khi sử dụng thuộc tính [ScriptMethod (ResponseFormat = ResponseFormat.Json)] trên dịch vụ WCF (.NET4), cuộc gọi thành công mà không có thiết lập crossdomain (tới web. config và $ .ajax) và khi sử dụng thuộc tính [WebGet (ResponseFormat = WebMessageFormat.Json)] nó yêu cầu các thiết lập crossdomain trong webconfig và $ .ajax call. Nếu tôi sử dụng thuộc tính WebGet mà không có cài đặt tên miền chéo, tôi sẽ gặp lỗi "Phương thức không được phép".

đang WCF được sử dụng:

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json)] // requires crossdomain settings 
//[ScriptMethod(ResponseFormat = ResponseFormat.Json)] // no crossdomain settings required 
public string GetNumber(string id) 
{ 
    return "query response on id: " + id; 
} 

bất kỳ ý tưởng?

2

chrome/firefox sẽ không cho phép tôi làm điều này cho đến khi tôi đặt một cách rõ ràng

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 

trong các cuộc gọi của tôi

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