是否有一种方法可以使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;
}

如何在不搜索对象的情况下组织客户端和应用服务器之间的交互?是否有一种方法,使数据契约的数据成员作为参考对象在服务器?

是否有一种方法可以使WCF中的数据契约的数据成员作为对服务器中类实例的引用

基本上这就是你必须要做的。不能直接转移对象引用。你可以做几件事1. 使对象查找基于字典,使他们更快。2. 在请求的头中传递对象id,这样API就不会被所有接受对象id的API弄得乱七八糟。在您的服务契约中,您可以首先使用header中的Id搜索对象,然后调用该对象的方法。