Веб-сервис WCF с неправильным выводом JSON - PullRequest
0 голосов
/ 08 марта 2011

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

Некоторый фон: У меня есть два проекта:

  • 1 C # веб-приложение - где данные WCF будут использоваться JQuery. Я написал прокси JQuery, но я не уверен, работает ли он еще, потому что моя служба WCF, похоже, не отвечает!
  • 1 Служба CF WCF. В настоящее время я не хочу ничего более сложного, чем некоторые службы проверки некоторых данных. Я хотел использовать JQuery для проверки этих сервисов, чтобы проверить ввод данных в форме (например, действительный адрес электронной почты).

Служба - в настоящее время я просто пытаюсь заставить IsEmailValid работать:

namespace AtomicService
{
    [ServiceContract]
    public interface IValidation
    {
        [OperationContract, WebInvoke(
            Method="POST",
            BodyStyle= WebMessageBodyStyle.Wrapped,
            RequestFormat = WebMessageFormat.Json, 
            ResponseFormat = WebMessageFormat.Json)]
        string IsEmailValid(string email);

        [OperationContract]
        bool DoesClientExist(string client);

        [OperationContract]
        bool IsPasswordOk(string password);

        [OperationContract]
        bool IsPostcodeValid(string postcode, string isoalpha2);

        [OperationContract]
        bool IsTelephoneValid(string telephone, string isoalpha2);
    }
}

Моя реализация:

namespace AtomicService
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Validation : IValidation
    {
        public string IsEmailValid(string email)
        {
            return string.Format("Response:{0}", AtomicCore.Validation.CheckEmail(email).ToString());
        }

        //others removed for brevity
    }
}

Когда я тестирую свой веб-сервис с помощью WCFTestClient, все хорошо: a check against the service using the WCFTestClient

Проверка с помощью Fiddler возвращает неверный запрос 400: enter image description here

Далее, когда я пытаюсь получить доступ к сервису через браузер, абсолютно ничего не происходит - просто пустая страница.

Когда я использую свой прокси JQuery:

    /// <reference path="~/System/jquery.js" />

ServiceProxy = function () //constructor for the proxy
{
    this._baseURL = "http://127.0.0.1:88/Validation.svc/";
};

ServiceProxy.prototype =
{
//    getArticles: function (success, error) {
//        this._doAjax("GetArticles", null, success, error);
//    },

    isEmailValid: function (email, success, error) {
        var data = { email: email };

        this._doAjax("IsEmailValid", data, success, error)
    },

    _defaultErrorHandler: function (xhr, status, error) {
        alert(xhr.statusText + ' ' + error);
    },

    _doAjax: function (method, data, fnSuccess, fnError) {
        if (!data) data = {};

        if (!fnError) fnError = this._defaultErrorHandler;

        $.ajax({
            type: "GET",
            url: this._baseURL + method,
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: fnSuccess,
            error: fnError,
            dataFilter: function (data) {
                var response;

                if (typeof (JSON) !== "undefined" && typeof (JSON.parse) === "function")
                    response = JSON.parse(data);
                else
                    response = eval("(" + data + ")");

                if (response.hasOwnProperty("d"))
                    return response.d;
                else
                    return response;
            }
        });
    }


};

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

Я полностью сбит с толку? WCF кажется ужасно более сложным, чем старый метод обслуживания .NET ASMX, но я хотел попробовать и выучить - и до сих пор это было больно!

Помощь, как всегда, ценится.

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Вы выполняете GET в Fiddler, и ваш метод настроен для работы с POST.

Вы можете перейти к выполнению процедуры POST в fiddler, которая должна работать после настройки тела запроса. Вы можете увидеть, что делает WCFTestClient, чтобы дать вам представление о разнице.

0 голосов
/ 08 марта 2011

Я сам использовал Службу данных WCF с объектом EDMX в C # 4.0, и вам нужно следить за междоменными запросами. Я не уверен, так ли это здесь, но всегда есть на что посмотреть. Если порт другой, он попадает в категорию междоменных доменов и поэтому блокируется браузером, если вы явно не разрешите его.

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