我一直在抨击这个近2天。我已经阅读了数百个博客,SO帖子和MSDN文章,我仍然没有得到我的WCF服务!
一些背景知识 我有两个项目:
服务 - 目前,我只是想让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测试我的web服务时,一切都很好:
使用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服务方法更复杂,但我想尝试学习 - 到目前为止它一直很痛苦!
一如既往的帮助,赞赏。
答案 0 :(得分:2)
您正在使用fiddler进行GET,并且您的方法已设置为使用POST。
您可以更改为在fiddler中执行POST,这应该在您设置请求正文后起作用。您可以捕获WCFTestClient正在做的事情,以便您了解差异。
答案 1 :(得分:0)
我自己在C#4.0中使用了带有EDMX对象的WCF数据服务,您需要注意的一件事是跨域请求。我不确定这是否是这种情况,但它始终值得关注。如果端口不同,它将属于跨域类别,因此除非您明确允许,否则将被浏览器阻止。