2011-04-08 12 views
5

Wiem, że wydaje się, że to pytanie zostało opublikowane wiele razy, ale przeczytałem prawie wszystkie (większość samouczków w Internecie), a także Wciąż nie mogę pojąć, co robię źle.Wywołanie usługi WCF programu ASP.NET 4.0 z jQuery daje 400 nieprawidłowych żądań.

Próbowałem zaimplementować na stronie internetowej rozwijamy usługę WWW WCF, która ma być używana przez skrypt jQuery, ale wciąż otrzymuję 400 Bad Request podczas wykonywania żądania AJAX i zaczynam tracić nadzieję.

Proszę zauważyć, że jestem nowy w WCF, a sam utworzyłem się tylko dzięki tutorialom online, więc jest całkowicie możliwe, że przeoczyłem lub poważnie coś spieprzyłem.

Pytania Próbowałem, ale nie pomogło:

SPUB esources czytam bezskutecznie:

Próbowałem też stworzenie nowego rozwiązania, tylko ze stroną i usługą, aby rządzić zakłóceń, ale nadal mam ten sam problem. Tutaj można znaleźć kod:

IService.cs

namespace WebService 
{ 
    using System; 
    using System.ServiceModel; 
    using System.ServiceModel.Web; 

    [ServiceContract(Name = "Service", Namespace = "WebService")] 
    public interface IService 
    { 
     [OperationContract] 
     [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
     String Test(); 
    } 
} 

Service.svc.cs

namespace WebService 
{ 
    using System; 

    public class Service : IService 
    { 
     public String Test() 
     { 
      return "Hello, world."; 
     } 
    } 
} 

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebService.Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $("#doAjax").click(function (event) { 
        event.preventDefault(); 
        jQuery.ajax({ 
         contentType: "application/json" 
         , dataType: "text" 
         , error: function (jqXHR, textStatus, errorThrown) { 
          console.group("AJAX error:"); 
          console.debug(jqXHR); 
          console.debug(textStatus); 
          console.groupEnd(); 
         } 
         , processData: false 
         , success: function (data, textStatus, jqXHR) { 
          console.group("AJAX success:"); 
          console.debug(data); 
          console.debug(textStatus); 
          console.debug(jqXHR); 
          console.groupEnd(); 
         } 
         , type: "post" 
         , url: "/Service.svc/Test" 
        }); 
       }); 
      }); 
     </script> 
     <title>WebService</title> 
    </head> 
    <body> 
     <form runat="server"> 
      <h1><%= this.Page.Title %></h1> 
      <p><input id="doAjax" type="button" value="Run" /></p> 
     </form> 
    </body> 
</html> 

Web.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
     <bindings /> 
     <client /> 
     <behaviors> 
      <endpointBehaviors> 
       <behavior name="Behavior"> 
        <webHttp /> 
       </behavior> 
      </endpointBehaviors> 
      <serviceBehaviors> 
       <behavior name=""> 
        <serviceMetadata httpGetEnabled="true" /> 
        <serviceDebug includeExceptionDetailInFaults="false" /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
     <services> 
      <service name="Service"> 
       <endpoint behaviorConfiguration="Behavior" binding="webHttpBinding" contract="WebService.IService" /> 
      </service> 
     </services> 
    </system.serviceModel> 
</configuration> 
+0

Czy znalazłeś odpowiedź na to pytanie? Mam ten sam problem i nie mogę znaleźć rozwiązania ... :( –

+0

@NaveedButt nie, a ja od czasu przeniesienia się do innych projektów. Wypróbuj poniższe odpowiedzi, a jeśli możesz to zrobić, opublikuj odpowiedź/komentarz aby inni wiedzieli, co robić: – Albireo

+0

Jestem w stanie zobaczyć więcej szczegółów na temat błędu, wstawiając div na stronę i ustawiając jego html na jqXHR w przypadku błędu, w wyniku czego otrzymuję lepszą wydajność. opublikuje rozwiązanie tutaj, gdy znajdę jeden IA. –

Odpowiedz

1

Hej! Miałem ten sam problem (..... znowu), ale w końcu zorientowałem się, że działa poprawnie.

Teraz to jest mój własny przykład, ale dlatego, że pracował dla mnie, mam nadzieję, że będzie pracować dla Ciebie zbyt ... Kluczem linia że byłem zapominając było w moim poleceniem $ ajax:

contentType: "application/json; charset=utf-8" 

Dobrej szczęście :) Spędziłem pół dnia w tym wydaniu.

interfejs:

[OperationContract] 
[WebInvoke(ResponseFormat = WebMessageFormat.Json)] 
int CreateMilestone(Milestone Input); 

klasy:

[DataContract] 
public class Milestone 
{ 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember] 
    public string Date { get; set; } 
    [DataMember] 
    public int Risk { get; set; } 
    [DataMember] 
    public int Complexity { get; set; } 
} 

sposób:

public int CreateMilestone(Milestone Input) 
    { 
     return 0; 
    } 

jquery:

$("#btnSubmit").click(function() { 

    if ($.trim($("#txtName").val()) == "") { 
     $("#dName").effect("highlight", 500); 
    } 
    else { 

     var date = $("#txtDate").datepicker("getDate"); 
     var data = { 
      Name: $("#txtName").val(), 
      Date: (date.getMonth() + 1) + "-" + date.getDate() + "-" + date.getFullYear(), 
      Risk: parseInt($("#sRisk").text()), 
       Complexity: parseInt($("#sComplexity").text()) 
      }; 
      var jsondata = JSON.stringify(data); 
      $.ajax({ 
       type: "POST", 
       async: false, 
       url: 'Services/ProjectService.svc/CreateMilestone', 
       contentType: "application/json; charset=utf-8", 
       data: jsondata, 
       dataType: "json", 
       success: function (msg) { 
       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { 
        //      alert(XMLHttpRequest.status); 
        //      alert(XMLHttpRequest.responseText); 
       } 
      }); 
     } 
    }); 
2

Nazwa usługi musi być w pełni kwalifikowana. Wypróbuj: <service name="WebService.Service">

Powiązane problemy