我正在尝试从javascript调用ASP.NET .asmx webservice,而不是Visual Studio在创建它时使用的默认命名空间。
当我使用Visual Studio向导创建名为Hello的Web服务时,在WebServices文件夹中,它会创建:
namespace MyWebSite.WebServices
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class Hello : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
浏览器中的javascript使其可见:
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
ServiceReference serviceReference = new ServiceReference();
serviceReference.Path = "~/WebServices/Hello.asmx";
serviceReference.InlineScript = false;
scriptManager.Services.Add(serviceReference);
它是从这样的Javascript调用的:
MyWebSite.WebServices.Hello.HelloWorld(function(rval){{alert(rval);}});
工作正常。我的问题是我的调用javascript是在一个单独的程序集中,作为服务器控件的一部分,需要一个不同的命名空间。我要么重新修改程序集的工作原理 - 以某种方式使webservice的命名空间成为参数,或者我需要更改webservice的命名空间,以便它与调用匹配。
目前,我正在探索后者。 (因为更改程序集将意味着更改同样使用此程序集的其他网站,我宁愿不这样做,除非有必要)。
所以,我希望我的Javascript调用看起来像这样:
OtherNamespace.WebServices.Hello.HelloWorld(function(rval){{alert(rval);}});
我以为我可以更改.asmx文件中的命名空间:
namespace OtherNamespace.WebServices
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
...
但这不起作用。我收到“未定义其他名称空间”错误。显然,即使.asmx文件中的命名空间和javascript调用中的前缀具有相同的值,它们也不会引用相同的内容。
MyWebSite.WebServices在哪里。前缀,在调用javascript中来自?它在哪里定义?我怎样才能改变它以使其成为别的东西?
答案 0 :(得分:3)
您是否同时更新了ASMX和代码隐藏文件? ASMX标记中也有一个参考。