我已经从事了一段时间的项目,该项目将对用户名使用JQueryUI自动完成(基于SPWeb.AllUsers),并将以相同的形式分别从潜在的大列表中提取内容。我最初尝试了一种页面方法,但是除了整个页面html (尽管设置了内容类型等)之外,无法获得返回,因此我继续通过ASMX尝试它。其结果是一个500。运行Fiddler给出了完整的ASP错误:“服务器管理员阻止了您试图保存或检索的文件。”我相当肯定方法中的代码没有被击中,因为在方法的第一行上设置的断点不会被触发。
这是我的web服务:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class projectWebService : System.Web.Services.WebService
{
public class person
{
public person(string name, string company)
{
this.name = name;
this.company = company;
}
public string name { get; set; }
public string company { get; set; }
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string getNames()
{
try
{
//Query list to filter by company and sort by name
var userQuery = from SPUser user in SPContext.Current.Web.AllUsers
orderby user.Name ascending
select user;
List<person> userList = new List<person>();
foreach (SPUser user in userQuery)
{
userList.Add(new person(user.Name, "something"));
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(userList);
}
catch (Exception ex)
{
return ex.Message;
}
}
}我试过几种不同的方法,结果也是一样的。下面是AJAX调用:
$.ajax({
type: 'POST',
dataType: 'json',
data: '{}',
contentType: 'application/json; charset=utf-8',
url: 'projectWebService.asmx/getNames',
success: function (msg) {
alert(msg.toString());
var people = $.parseJSON(msg);
$('#projectManager').autocomplete({
source: people
});
},
error: function (xhr, msg, error) {
alert(msg.toString());
alert(error);
}
});试图设置"UseHttpGet“和发出GET请求也没有成功。
我在这里发现了一个相关的问题:这一条提到了一个可能是罪魁祸首的web.config条目。,我把它设置为无效。
另外,本文介绍了其他可能(?)是必需的。 --这对我来说不起作用,而是为无效的web.config获得了一个ASP错误。
我希望有人之前要么不得不处理这件事,要么看到一些我不知道的事情。谢谢你的帮助!
发布于 2014-06-19 14:41:49
事实证明,我忽略了一个关键的行为: web服务类和页面方法都无法从用户控件中访问,而我试图将其作为SharePoint web部件的一部分。就这一点而言,它也不能从web部件中访问。我的解决方案是创建一个单独的asmx服务,并通过指令这里将其作为一个场解决方案部署到我的站点。从那里看,它相对来说是无痛的。
https://stackoverflow.com/questions/23919742
复制相似问题