這幾天對以前的老項目進行升級,加入了spring.net,但遇到的很多問題,首先是對AjaxPro的注入失敗,這個是注入不進去的,spring.net沒有像對webservice一樣給AjaxPro提供了代理(如果誰有好的解決辦法請給我留言),所以我使用webservice代替AjaxPro對非同步調用,如何對webservice進行管理呢?網上看到了不少的文章,發現能真正解決問題的很少,而且說的不明白,因為要對webservice進行非同步呼叫,在首次載入的時候可以對webservice注入,但是當你在用戶端進行調用的時候發現載入時候所注入的對象都為null,現在來說下我的解決辦法:
Code
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
public static UserBizImpl GetUserBiz()
{
Spring.Context.IApplicationContext context = Spring.Context.Support.ContextRegistry.GetContext();
return context.GetObject("UserBizImpl") as UserBizImpl;
}
public WebService()
{
}
[WebMethod]
public string SysHello(string name)
{
return GetUserBiz().GetName(name);
}
}
這裡使用構造方法注入,如果使用屬性注入,在用到非同步呼叫的時候對象為null
總結:在spring.net 參考文檔中提出使用spring.net代理類會把webservice的屬性覆蓋,而且消除對.asmx檔案的依賴,並且不寫webservice等特性也是沒問題的,但是我這裡使用的是非同步,如果使用如此配置的話注入的對象會為null,看看原文是怎麼說的
---------既然我們為web服務建立了服務端代理,就沒有必要在web服務類中應用諸如WebMethod之類的特性了。因為此時.NET基礎架構是看不到“真正”的服務物件的,.NET真正接觸到的是應用在代理類上的特性。
也就是說,我們完全可以從服務類中去掉WebService和WebMethod特性,只留下一個普通的.NET對象(一個PONO)。對於上面的例子來說,去掉這些特性後仍然可以正常工作,因為代理類產生器可以自動的在要匯出的介面方法上應用WebMethod特性。-----------------
下一篇講講述如何使用spring.net的webservice代理進行管理web服務,並通過Aop發布web服務已在用戶端訪問
本文出自:http://www.cnblogs.com/myssh/archive/2009/07/03/1516436.html
待續................