Я критиковал это почти 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, все хорошо:
Проверка с помощью Fiddler возвращает неверный запрос 400:
Далее, когда я пытаюсь получить доступ к сервису через браузер, абсолютно ничего не происходит - просто пустая страница.
Когда я использую свой прокси 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, но я хотел попробовать и выучить - и до сих пор это было больно!
Помощь, как всегда, ценится.