2010-09-14 54 views
1

我試圖從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從何而來?它在哪裏定義?我該如何改變它,使其成爲別的東西?

+0

您是否在更改後更新了您的Web引用? – 2010-09-14 15:01:36

回答

3

您是否更新了ASMX和代碼隱藏文件? ASMX標記中也有一個參考。

+0

沒有。那是我錯過的。當我打開.asmx文件時,VS一直在提醒設計師,它沒有任何用處。我明確地打開了標記,並且看到了需要更改的內容。 – 2010-09-14 16:24:47