更改ASP.NET .ASMX webservices中的命名空间?

时间:2010-09-14 14:43:33

标签: javascript asp.net web-services asmx

我正在尝试从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中来自?它在哪里定义?我怎样才能改变它以使其成为别的东西?

1 个答案:

答案 0 :(得分:3)

您是否同时更新了ASMX和代码隐藏文件? ASMX标记中也有一个参考。