MIDAS高手请进,为什么我每运行一个Client就启动一个Server程序。

redsignal 2003-03-11 04:15:12
我按照诸位的意见,配置完成好DCOM后,就出现这样的问题,Client程序连续运行、关闭几次以后,又出现“RPC服务器不可用”的错误。
...全文
43 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cynwhm 2003-03-12
  • 打赏
  • 举报
回复
gz
天涯浪子 2003-03-12
  • 打赏
  • 举报
回复
常用的DCOM的线程模型有2种:Apartment和Single。

如果用Apartment模型,则许多客户端可以共用同一个应用程序服务器。
其优点是:启动和执行的速度快,耗用系统资源少,且管理方便。
其缺点是:不具备多工处理能力。
如果用Single模型,则每一个客户端,在服务器上都会有一个对应的应用程序服务器被执行。
其优点是:具备多工处理能力。
其缺点是:当有很多客户端运行时将占用较多的系统资源。

实际的开发中多采用Apartment(默认),只有当进行大数据量查询或重要数据的写入操作时才会选用Single模型。

根据你说的情况,你很可能选用了Single模型。
ljianq 2003-03-12
  • 打赏
  • 举报
回复
看看服务器的项目选项中的ATL设置是否使用了Multiple Use.
redsignal 2003-03-12
  • 打赏
  • 举报
回复
Server 中的部分头文件如下,是否有类型不对

/////////////////////////////////////////////////////////////////////////////
// TAppServerImpl Implements IAppServer, default interface of AppServer
// ThreadingModel : Apartment
// Dual Interface : TRUE
// Event Support : FALSE
// Default ProgID : TestServer.AppServer
// Description : Test Server System
/////////////////////////////////////////////////////////////////////////////
class ATL_NO_VTABLE TAppServerImpl: REMOTEDATAMODULE_IMPL(TAppServerImpl, AppServer, TAppServer, IAppServer)
{
public:

BEGIN_COM_MAP(TAppServerImpl)
RDMOBJECT_COM_INTERFACE_ENTRIES(IAppServer)
END_COM_MAP()

// Data used when registering Object
//
DECLARE_THREADING_MODEL(otApartment);
DECLARE_PROGID("TestServer.AppServer");
DECLARE_DESCRIPTION("Test Server System");

// Function invoked to (un)register object
//
static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
{
TRemoteDataModuleRegistrar regObj(GetObjectCLSID(), GetProgID(), GetDescription());
// Disable these flags in order to disable use by socket or web connections.
// Also set other flags to configure the behavior of your application server.
// For more information, see atlmod.h and atlvcl.cpp.
regObj.Singleton = false;
regObj.EnableWeb = true;
regObj.EnableSocket = true;
return regObj.UpdateRegistry(bRegister);
}


// IAppServer
protected:
};
redsignal 2003-03-12
  • 打赏
  • 举报
回复
我已经解决
redsignal 2003-03-12
  • 打赏
  • 举报
回复
我采用的是Apartment,头文件都可以看出来
DECLARE_THREADING_MODEL(otApartment);
conanfans 2003-03-11
  • 打赏
  • 举报
回复
估计是你Server使用的类型不对
cuptbluesky 2003-03-11
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1495/1495688.xml?temp=.3677179
redsignal 2003-03-11
  • 打赏
  • 举报
回复
就只有一个应用程序服务器。我也找不到原因。完全按照 shuaigc(new man)所讲配置的。
shuaigc 2003-03-11
  • 打赏
  • 举报
回复
下了。有一种可能是你的服务器上有多个应用程序服务器(如果是保留一个)。否则配置正确肯定不会有这个问题的。
shuaigc 2003-03-11
  • 打赏
  • 举报
回复
你所有的客户端都连的是同一个应用程序服务器的情况下产生这种情况吗?(就是运行一个客户端就激活一个服务器)

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧