我試圖從javascript調用一個ASP.NET .asmx webservice,使用的不是Visual Studio創建它時使用的默認名稱空間。更改ASP.NET .ASMX webservices中的命名空間?
當我使用Visual Studio嚮導創建一個名爲你好web服務,在文件夾Web服務,它會創建這樣的:
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);}});
臨屋t工作正常。我的問題是,我的調用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)]
...
但是那並不是」工作。我收到「OtherNamespace未定義」錯誤。顯然,即使.asmx文件中的命名空間和javascript調用中的前綴具有相同的值,它們也不會引用相同的內容。
MyWebSite.WebServices在哪裏?前綴,在調用JavaScript從何而來?它在哪裏定義?我該如何改變它,使其成爲別的東西?
您是否在更改後更新了您的Web引用? – 2010-09-14 15:01:36