我是 .net 世界的新手,但已经编程了约 15 年。今天,我们有一个基于客户端/服务器的系统(即内部开发)。瘦客户端通过套接字连接到业务逻辑进程 (BLP)。
客户端向 BLP 发送 xml 消息,BLP 通过与 xml 相同的套接字进行回复
到目前为止,一切都很好。BLP 是用非托管 c 或 Ada 编写的(我们有两个系统,相同的设计)
这些 BLP 现在将作为 Web 服务发布,(或者至少它们提供的一些服务是)
我们决定使用 .net/c#/IIS7 作为应用服务器。
Web 服务请求进入 IIS,然后将其传递给我们的 c# 代码。现在,产生这些 BLP 非常繁重,所以我为它们编写了一个池,它产生了 10 个连接,以及 aps.net c# 代码可以调用的一些函数来要求来自池的连接,并返回一个到池的连接。这基本上是一个连接的套接字。
那么我的问题是,如何在 IIS 中使这个池成为静态的?我认为它是一种“数据库”池,最好在 web.config 中有一个描述连接池的条目。
- 有什么我应该实现的接口吗?
- 有什么示例代码可以看吗?
- 可行吗?
我的大部分搜索都描述了应用程序池,我认为这不是我想要的。
感谢有见地的评论
编辑:
嗯,投票是线程安全的,所以我先尝试了第一个选项。有一个 global.asax 和一个 global.asax.cs alreay,所以我把代码像
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 。在这个世界上完全是新手,有什么明显的错误吗?/比约恩