我正试图在客户端调用这样一个简单的Web服务:
$.ajax({
type: "POST",
url: "/service/local/newsservice.asmx/DoPost", // "/news/post/do",
data: {
title: _title,
markdown: _markdown,
categoryId: 1
},
success: function (data) {
alert("success!");
}
});
实际服务是:
[WebService(Namespace = "http://service.site.com/service/news")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class NewsService : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod]
public static void DoPost(string title, string markdown, int categoryId)
{
if (!(Roles.IsUserInRole("Owner") || Roles.IsUserInRole("Administrator")))
return;
CommunityNews.Post(title, markdown, categoryId);
}
}
使用指向"/service/local/newsservice.asmx/DoPost"
的重写网址时,出现以下错误:
用于访问路径的HTTP谓词POST
当我使用普通URL时,我得到了这个(通过Firebug,应用程序静默失败):
DoPost Web服务方法名称无效。
可能会发生什么?
答案 0 :(得分:1)
在ASP.NET中调用Web服务的内置方法是使用服务引用,该引用为您创建JavaScript对象以调用Web服务方法。
要从ECMAScript(JavaScript)调用Web服务方法,您必须 在ASP.NET页面中包含一个服务引用并应用 ScriptServiceAttribute属性为Web服务类定义。 如果在Web中包含对Web服务的服务引用 ASP.NET页面内的ScriptManager或ScriptManagerProxy控件, JavaScript对象将在浏览器中实例化。
代理对象将用于执行以下操作:
使用JavaScript向Web服务方法发出异步请求,
初始化服务器数据类型的代理实例 特别适合用作调用Web方法的输入参数。
由于您使用的是jQuery而不是为ASP.NET AJAX创建的代理对象,因此您可能需要检查一些配置是否正确:
Exposing Web Services to Client Script
要从[ASP.NET AJAX]脚本启用Web服务调用,您必须注册 应用程序的Web.config中的ScriptHandlerFactory HTTP处理程序 文件。处理程序处理从脚本到.asmx Web的调用 服务。以下示例显示了Web.config元素 添加处理程序。
这些配置设置已经是Web.config文件的一部分 您在其中创建的任何新的启用AJAX的网站的模板 Microsoft Visual Studio 2005。
<system.web> <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/> </httpHandlers> <system.web>
对于非ASP.NET AJAX脚本发出的Web服务调用, ScriptHandlerFactory处理程序将调用委托给默认值 handler,使用SOAP而不是JSON格式。代表团是 自动执行,您不必采取任何行动,除非 您希望禁用Web协议的SOAP协议。 在这种情况下,您必须在中输入以下配置设置 Web.config文件。
<system.web> <webServices> <protocols> <clear/> </protocols> </webServices> </system.web>
答案 1 :(得分:0)
我认为问题在于使用
[ScriptMethod]
你真的需要它吗?
同时检查这可能会有所帮助:[ScriptMethod]
http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx
http://msdn.microsoft.com/en-us/library/byxd99hx(v=vs.71).aspx