这让我今天发疯了。希望这里有人可以帮助我破解它。
基本上,我创建了一个带有 WCF 服务的测试站点,供 jQuery 使用。它具有三种方法,其中两种方法完美。
该服务返回 JSON。它具有三种方法,其中两种方法完美。第三个没有 - 我不明白为什么。
这是我所知道的。
如果我从 Visual Studio 启动站点,我可以浏览到服务并查看格式化的 JSON。如果我尝试在浏览器(即 IIS 版本)中执行相同操作,则会收到 400 错误。但仅适用于一种方法 - 其他方法都很好。
正是这种不一致让我感到困惑。
我已将其设置为 IIS 中的网站,而不是虚拟目录。要浏览到它,URL 的格式为http://mytestsite.local
经过演练(我已经有一段时间没有完成任何 WCF 工作了!),我采取了从 web.config 中删除与服务相关的配置信息的方法。相反,我有一个引用 .svc 文件中的类 WebServiceHostFactory 的 Factory 属性。
以下是方法:
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
public UserDTO[] GetUsers()
{
using (var dbContext = new GSChallengeContext())
{
var results = from u in dbContext.Users
select new UserDTO()
{
UserId = u.UserId,
Forename = u.Forename,
Surname = u.Surname,
};
return results.ToArray();
}
}
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
public UserDTO[] GetUserById(int userId)
{
using (var dbContext = new GSChallengeContext())
{
var results = from u in dbContext.Users
where u.UserId == userId
select new UserDTO()
{
UserId = u.UserId,
Forename = u.Forename,
Surname = u.Surname,
DateOfBirth = (DateTime)u.DateOfBirth
};
return results.ToArray();
}
}
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
public VehicleDTO[] GetVehiclesByUserId(int userId)
{
using (var dbContext = new GSChallengeContext())
{
var results = from v in dbContext.Vehicles
where v.UserId == userId
select new VehicleDTO()
{
VehicleId = v.VehicleId,
UserId = v.UserId,
Registration = v.Registration,
Alias = v.Alias,
Disabled = v.Disabled
};
return results.ToArray();
}
}
这是进行调用的代码:
function ShowUserVehicleInfo()
{
var userId = $("#users").val();
var outStr = "";
$.getJSON('Services/GSChallenge.svc/GetVehiclesByUserId?userId=' + userId,
function (data) {
$.each(data, function (index, elem) {
outStr += "<div class=\"vehicleData\">" +
"<p>Registration: " + elem.Registration + "</p>" +
"<p>Alias: " + elem.Alias + "</p>" +
"<p>Disabled: " + elem.Disabled + "</p>" +
"</div>"
});
}
);
}
我在发布之前进行了搜索,但还没有找到任何解决问题的方法——甚至没有帮助。
任何人都可以帮忙吗?