2011-02-12 3 views
0

HI Все, Я искал высоко и низко и, наконец, решил отправить запрос здесь.JQuery + WCF + HTTP 404 Ошибка

Я пишу очень базовую HTML-страницу, с которой я пытаюсь вызвать службу WCF с помощью jQuery и проанализировать ее с помощью JSON.

Услуги:

IMyDemo.cs

[ServiceContract] 
    public interface IMyDemo 
    { 
     [WebInvoke(Method = "POST", 
      BodyStyle = WebMessageBodyStyle.WrappedRequest, 
      ResponseFormat = WebMessageFormat.Json)] 
     Employee DoWork(); 


     [OperationContract] 
     [WebInvoke(Method = "POST", 
      BodyStyle = WebMessageBodyStyle.WrappedRequest, 
      ResponseFormat = WebMessageFormat.Json)] 
     Employee GetEmp(int age, string name); 


    } 

    [DataContract] 
    public class Employee 
    { 
     [DataMember] 
     public int EmpId { get; set; } 

     [DataMember] 
     public string EmpName { get; set; } 

     [DataMember] 
     public int EmpSalary { get; set; } 

    } 

MyDemo.svc.cs

public Employee DoWork() 
     { 
      // Add your operation implementation here 
      Employee obj = new Employee() { EmpSalary = 12, EmpName = "SomeName" }; 
      return obj; 
     } 

public Employee GetEmp(int age, string name) 
     { 
      Employee emp = new Employee(); 

      if (age > 0) 
       emp.EmpSalary = 12 + age; 

      if (!string.IsNullOrEmpty(name)) 
       emp.EmpName = "Server" + name; 

      return emp; 
     } 

Web.config

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="EmployeesBehavior" name="MySample.MyDemo"> 
     <endpoint address="" binding="webHttpBinding" contract="MySample.IMyDemo" behaviorConfiguration="EmployeesBehavior"/> 
     </service> 

    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="EmployeesBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="EmployeesBehavior"> 
      <webHttp/>   
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

MyDemo.htm

<head> 
    <title></title> 
    <script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.js"></script> 
    <script type="text/javascript" language="javascript" src="Scripts/json.js"></script> 
    <script type="text/javascript"> 
     //create a global javascript object for the AJAX defaults. 
     debugger; 
var ajaxDefaults = {}; 

ajaxDefaults.base = { 
    type: "POST", 
    timeout : 1000, 

    dataFilter: function (data) { 
     //see http://encosia.com/2009/06/29/never-worry-about-asp-net-ajaxs-d-again/ 
     data = JSON.parse(data); //use the JSON2 library if you aren’t using FF3+, IE8, Safari 3/Google Chrome 
     return data.hasOwnProperty("d") ? data.d : data; 
    }, 

    error: function (xhr) { 
     //see 
     if (!xhr) return; 
     if (xhr.responseText) { 
      var response = JSON.parse(xhr.responseText); 
      //console.log works in FF + Firebug only, replace this code 
      if (response) alert(response); 
      else alert("Unknown server error"); 
     } 
    } 
}; 

ajaxDefaults.json = $.extend(ajaxDefaults.base, { 
    //see http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/ 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
}); 

var ops = { 
    baseUrl: "/MyService/MySample/MyDemo.svc/", 

    doWork: function() { 
     //see http://api.jquery.com/jQuery.extend/ 
     var ajaxOptions = $.extend(ajaxDefaults.json, { 

      url: ops.baseUrl + "DoWork", 
      data: "{}", 

      success: function (msg) { 
       console.log("success"); 
       console.log(typeof msg); 
       if (typeof msg !== "undefined") { 
        console.log(msg); 
       } 
      } 
     }); 

     $.ajax(ajaxOptions); 
     return false; 
    }, 
    getEmp: function() { 
     var ajaxOpts = $.extend(ajaxDefaults.json, { 

      url: ops.baseUrl + "GetEmp", 
      data: JSON.stringify({ age: 12, name: "NameName" }), 

      success: function (msg) { 
       $("span#lbl").html("age: " + msg.Age + "name:" + msg.Name); 
      } 
     }); 

     $.ajax(ajaxOpts); 
     return false; 
    } 
} 
    </script> 

</head> 
<body> 
<span id="lbl">abc</span> 
<br /><br /> 
<input type="button" value="GetEmployee" id="btnGetEmployee" onclick="javascript:ops.getEmp();" /> 
</body> 

Я просто не могу добиться этого. Когда я отладки, я вижу ошибку возвращаемой из вызова «

Ошибка сервера в приложении„/“jQuerySample.

 <h2> <i>HTTP Error 404 - Not Found.</i> </h2></span> 

»

Похоже, я что-то отсутствует основной здесь. Мой образец основан на this

Я пытался исправить код на какое-то время, поэтому я хотел бы, чтобы вы посмотрели, можете ли вы понять, что я делаю неправильно здесь ,

Я могу видеть, что служба создается, когда я просматриваю службу в IE. Я также попытался изменить настройку, как упомянуто here

Цените свою помощь. Я буду блог об этом, как только этот вопрос будет решен в пользу других дэвов Thanks -Soni

+4

Это должно быть http://stackoverflow.com/ (разные сайты, разные цели) – Orbling

+1

Миграция этого на SO. –

ответ

1

Это был первый раз, когда я попробовал jQuery/JSON. Я думал, что смогу заставить его работать с некоторыми образцами. Но, как оказалось, никогда не бывает так легко запустить какой-то код!

так я сделал console.log и оказалось, мой объект тзд был как этот [ объекта Комментарий: "Мой комментарий" EvalId: "0" Отправитель: "SS" Timesent: «/ Date (1298299273798 +0530)/"

поэтому вместо msg.EvalId все, что я должен был сделать, это msg [0] .EvalId.toString()

Определенно, страшная «неопределенная» ошибка была чем-то взломать!

Я обязательно буду размещать в своем блоге на этом .., но после нескольких дней удары головой. Оказывается, мне нужно сначала изучить некоторые основы!

Но в этом процессе, узнал некоторые хорошие вещи на стельке, Firebug, Межсайтовый скриптинг ..

теперь я впечатлен JQuery/JSON и планирование для глубокого погружения !!

3

Попробуйте добавить следующий код -

Изменение web.config включить включено следующее:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" /> 
</system.serviceModel> 

Затем украсить MyDemo.svc.cs со следующим атрибутом

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
+1

ОК .. так что я его запустил .. моя ошибка !!
, но теперь я застрял на конце JSON ..
мой код выглядит так
success: function (msg) {
отладчик;
alert (msg.toString);
$ ("span # lbl"). Html ("empID:" + msg.EvalId + "name:" + msg.Submitter);
}
Я получаю неопределенное значение для EvalID и Submitter.
Я попытался использовать JSON2, а также просмотрел некоторые запросы, где они попросили удалить DivX add .. но он все еще не работал .. какие-нибудь идеи? – hangar18

+0

Хотелось бы помочь, если бы вы опубликовали, как вы его получили, «вверх и вниз». Для будущих ссылок других. – RealityDysfunction

Смежные вопросы