2011-12-16 44 views
7

Tôi đã thử mọi kết hợp để gửi yêu cầu gửi yêu cầu POST tới WCF RESTful từ jQuery.Gửi yêu cầu gửi tới WCF RESTful với json

Ai đó có thể bắt chước và làm cho nó hoạt động. Mã đang ở đây: http://pastebin.com/Ua97919C

Tôi đang làm việc với WCF trong 2 năm qua, nhưng mỗi khi tôi gửi yêu cầu POST, điều đó khiến tôi phải đấu tranh rất nhiều.

Tôi đang vật lộn để làm cho nó hoạt động trong 4 ngày qua và trải qua ít nhất 35-40 bài đăng.

Cuối cùng, yêu cầu này sẽ được gửi từ iPhone đến WCF.

Khi tôi kiểm tra bằng Fiddler, lỗi chủ yếu là: * Máy chủ gặp lỗi khi xử lý yêu cầu. Thông báo ngoại lệ là 'Tin nhắn đến có định dạng tin nhắn không mong muốn' Raw '. Các định dạng tin nhắn dự kiến ​​cho hoạt động là 'Xml', 'Json'. Điều này có thể là do WebContentTypeMapper chưa được định cấu hình trên liên kết. Xem tài liệu của WebContentTypeMapper để biết thêm chi tiết. '. Xem nhật ký máy chủ để biết thêm chi tiết. Trường hợp ngoại lệ stack trace là: tại

System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 

Trả lời

4

Thêm một tập tin Global.ascx trong dung dịch youe và thay thế mã bằng sau

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
    { 
     HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
     HttpContext.Current.Response.End(); 
    } 
} 

một điều nữa chnage dataType:'text'

$.ajax({ 
    type: "POST", 
    url: "http://localhost:4638/Edulink.svc/SaveUserData",       
    dataType: "text", 
    contentType: "application/json", 
    data:'{"EmailID":"praveen", "LevelID": 1}',   
    success:function(data, status) {    
     console.log(data); //gives 1     
    }, 
    error:function(request, status, error) { 
     alert("o0ops");   
    } 
}); 
+0

Không .. Nó ném lỗi tại jQuery.min.js sau đó. Tôi đã thử điều đó sớm hơn. – iMatoria

+0

tôi đã thử/thử lại cả hai. – iMatoria

+0

Bạn có thể tạo một dự án mẫu và tự mình thử. – iMatoria

2

Vấn đề là phong cách cơ thể của hoạt động. Bạn tuyên bố nó như

[WebInvoke(
     Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     RequestFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.WrappedRequest, 
     UriTemplate = "/SaveUserData")] 
string SaveUserData(UserInfo userInfo); 

có nghĩa là yêu cầu phải bọc trong một đối tượng, với một thành viên cho tên đối tượng. Nếu bạn gửi yêu cầu này dưới đây, nó sẽ hoạt động.

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: url, 
    data: '{"userInfo":{"EmailID":"praveen", "LevelID": 1}}', 
    dataType: "json", 
    processData: false, 
    success: function (data, textStatus, jqXHR) { 
     debugger; 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     debugger; 
    } 
}); 

Một lựa chọn khác là thay đổi BodyStyle tài sản của các hoạt động để Bare, trong trường hợp yêu cầu ban đầu của bạn là đúng.

+0

Không, nó cũng không hoạt động. Bạn có thể tải về mẫu và làm cho nó hoạt động: http://www.filefactory.com/file/c0dd2ac/n/WCFPost.zip – iMatoria

+0

Bạn có thể xem mẫu tôi có tại pastebin tương tự như kịch bản của bạn, và làm cho bạn công việc. Tệp SVC: SVC: http://pastebin.com/aG7FNDb0. Tệp SVC.cs: SVC.CS: http://pastebin.com/vhqeBSV3. Tệp HTML: http://pastebin.com/fDiYzR3Q. Web.config: http://pastebin.com/j4yw1axb – carlosfigueira

+0

Cảm ơn những nỗ lực. Nhưng, nó vẫn không hoạt động. Tôi có mọi đoạn mã như bạn đã nói. – iMatoria

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