JQuery + WCF + HTTP 404 Ошибка - PullRequest
       1

JQuery + WCF + HTTP 404 Ошибка

0 голосов
/ 12 февраля 2011

HI Все, я искал все выше и ниже и, наконец, решил опубликовать запрос здесь.

Я пишу очень простую 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.Я также попытался изменить настройку, как указано здесь

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

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

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

Измените ваш файл web.config, включив в него следующий код:

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

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

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
1 голос
/ 21 февраля 2011

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

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

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

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

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

Но в этом процессе выучили некоторые полезные вещи по fiddler, firebug, межсайтовому скриптингу ..

Я впечатлен jQuery / JSON и планирую глубоко погрузиться сейчас !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...