是否有一种方法可以使WCF中的数据契约的数据成员作为对服务器中类实例的引用
本文关键字:数据成员 契约 服务器 引用 实例 数据 一种 方法 是否 WCF 可以使 | 更新日期: 2023-09-27 17:50:47
我正在将。net远程解决方案转移到WCF。windows form客户端和会话模式的WCF应用服务器作为windows服务运行,还有一层交互应用服务器和WCF核心单例服务器作为windows服务运行。数据结构由核心和应用服务器的大约20个中等权重类组成,其中大部分是组合关系和相应的接口。在. net Remoting中,客户端和应用服务器的交互是通过对客户端到服务器中对象的接口(代理)的引用来提供的。它使用了OOP的全部特性,工作得非常好。例如Remoting请求:
IDTGroupUser aDTGroupUser = addGroupUser( group, user, requestor);
服务器端:public IDTGroupUser addGroupUser(IDTGroup group, IDTUser user,
IDTGroupUser Requestor)
{
if (Requestor.User.IsSuperUser || Requestor.Group.IsAdmin)
{
DTGroupUser gu = new DTGroupUser(group, user, Requestor);
ISingletonSpace.groupUsers.Add(gu);
return gu;
}
else return null;
}
现在在WCF中没有面向对象的方法。到目前为止,我试图在客户端使用服务器对象的ID链接到服务器对象。如果客户端需要从服务器获取一些东西,那么
客户端发送每个请求一个额外的参数- ID,在服务器端首先通过该对象的ID搜索,然后
执行所需操作。但这看起来是一个很大的瓶颈。WCF要求:
int aDTGroupUser addGroupUser( gID, uID, requestorID);
服务器端(其中IDTUser, IDTGroup, IDTGroupUser和ISingletonSpace是端点):
public int addGroupUser( uint gID, uint uID, uint requestorID)
{
if (IDTUser.UserIsSuperUser(uID) || IDTGroup.GroupIsAdmin(gID)) // 2 searching
{
uint guID = IDTGroupUser.createGroupUser(gID, uID, requestorID); // 3 searching
ISingletonSpace.groupUsersAdd(guID); // 1 searching
return guID;
}
else return -1;
}
如何在不搜索对象的情况下组织客户端和应用服务器之间的交互?是否有一种方法,使数据契约的数据成员作为参考对象在服务器?
基本上这就是你必须要做的。不能直接转移对象引用。你可以做几件事1. 使对象查找基于字典,使他们更快。2. 在请求的头中传递对象id,这样API就不会被所有接受对象id的API弄得乱七八糟。在您的服务契约中,您可以首先使用header中的Id搜索对象,然后调用该对象的方法。