2012-11-08 84 views
3

我是.net的新手,但一直在編程約15年。 今天,我們有一個基於客戶端/服務器的系統(即內部開發)。 瘦客戶端通過套接字連接到業務邏輯過程(BLP)。爲iis創建池

客戶端發送XML消息到通過同一插座回覆與XML

到目前爲止一切順利的BLP。該BLP是寫在任一託管C,或在阿達(我們有兩個系統,相同的設計)

這些BLPs現在被髮布爲Web服務,(或者至少一些服務,他們提供的)

我們已決定將.net/c#/ IIS7作爲應用程序服務器。

該Web服務請求進入到IIS,它將它傳遞給我們的C#代碼。 現在,產生這些BLP非常重,所以我爲它們寫了一個池, 產生了10個連接,並且aps.net c#代碼可以調用到 的一些函數需要從池中建立連接,並返回連接到游泳池。 這基本上是一個連接的插座。

我的問題是,如何使這個池靜態在IIS中? 我認爲這是一種'數據庫'池,最好是 我在web.config中有一個描述連接池的條目。

  • 有沒有我應該實現的任何接口?
  • 有沒有示例代碼要看?
  • 它可行嗎?

我的大多數搜索描述應用程序池,我認爲這不是我想要的。

感激有見地的意見

編輯:

嗯,投票是線程安全的,所以我試圖與第一選項第一。有一個Global.asax和alreay一個的global.asax.cs,所以我把這樣的代碼

public class WebApiApplication : System.Web.HttpApplication 
{ 
    //bnl start 
    private Pool myPool = null; 
    public Pool MyPool 
    { 
     get { return myPool; } 
    } 
    //bnl stop 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     //bnl start 
     myPool = new Pool(3, 0, "localhost", 58031, "user", "pwd", "proj"); 
     myPool.Initialize(); 
     //bnl stop 

    } 
} 

但隨後在控制器中,我看不到池..

namespace Resttest.Controllers 
    { 
     public class ValuesController : ApiController 
     { 
      // GET api/values 
      public IEnumerable<string> Get() 
      { 
       // the pool has method getPoolItem to return a free item/connection 
       PoolItem pi = Resttest.WebApiApplication.MyPool.getPoolItem(); 
       return new string[] { "value1", "value2" }; 
      } 

然而Resttest .WebApiApplication.MyPool未從控制器中看到。 在這個世界上完全是新手,有什麼明顯的錯誤嗎? /Björn

+0

WMI可以幫助您執行某些IIS事件嗎? – AssaultingCuccos

回答

2

ASP.NET應用程序無法像PHP一樣工作:例如:每個ASP.NET Web應用程序無論請求生命週期如何運行都不會中斷。然而,它默認每20分鐘回收一次。您可以在應用程序池參數中更改此值。

要在應用程序啓動期間創建靜態資源,請創建global.asax和(其姐妹global.asax.cs),並將代碼放入ApplicationStart事件中。有一個視覺工作室模板來自動創建這些文件。

由於堆在請求之間共享,所以也會共享一個singleton。但是,請特別注意線程安全,因爲多個請求可以並行運行。

其他溶液(和最好的一個althoug複雜得多)是使用IoC容器像Autofac並登記在全球實施的爲您服務(見DOC更多的解釋,解釋如何安裝和使用Autofac ISN」真的在這個答案的範圍內)

+0

嗯,民意調查是線程安全的,所以我首先嚐試了第一個選項。 – user1808951

+0

Autofac不會解決任何線程安全問題。但只要您使用它,您就可以從配置(或約定)管理您的每項服務的範圍,並且您的服務消費者不必爲此煩惱。 – Eilistraee