私は .net の世界は初めてですが、プログラミング歴は 15 年ほどです。現在、クライアント/サーバー ベースのシステム (社内開発) があります。シン クライアントは、ソケット経由でビジネス ロジック プロセス (BLP) に接続します。
クライアントは xml メッセージを BLP に送信し、BLP は同じソケットを介して xml で応答します。
ここまでは順調ですね。BLP は unmanaged c または Ada で記述されています (同じ設計の 2 つのシステムがあります)。
これらの BLP は現在、Web サービスとして公開されています (または、少なくともそれらが提供するいくつかのサービスは公開されています)。
アプリケーション サーバーとして .net/c#/IIS7 を決定しました。
Web サービス要求は IIS に送られ、IIS はそれを c# コードに渡します。さて、これらの BLP のスポーンは非常に重いので、スポーンが 10 接続と言うプールと、aps.net c# コードがプールからの接続を要求し、接続をプールに返すために呼び出すことができるいくつかの関数を作成しました。これは基本的に接続されたソケットです。
私の質問は、IIS でこのプールを静的にする方法ですか? これは「データベース」プールのようなものだと思います。最適には、web.config に接続プールを記述するエントリが必要です。
- 実装する必要があるインターフェイスはありますか?
- 見るべきサンプルコードはありますか?
- それは可能ですか?
私の検索のほとんどは、アプリケーション プールについて説明していますが、これは私が望んでいるものではないと思います。
洞察に満ちたコメントに感謝
編集:
うーん、ポーリングはスレッドセーフなので、最初のオプションを最初に試しました。global.asax と 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 はコントローラーからは見えません。この世界では初心者なので、明らかに間違っていることはありますか?/ビョルン