Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法在WCF中将datacontract的datamember作为对服务器中类实例的引用?_C#_.net_Wcf - Fatal编程技术网

C# 有没有办法在WCF中将datacontract的datamember作为对服务器中类实例的引用?

C# 有没有办法在WCF中将datacontract的datamember作为对服务器中类实例的引用?,c#,.net,wcf,C#,.net,Wcf,我正在将.NET远程处理解决方案移动到WCF。 有windows窗体客户端和WCF应用程序服务器在会话模式下作为windows服务运行,还有一层交互应用程序服务器和WCF核心单例服务器也作为windows服务运行。 数据结构由大约20个中等权重的核心和应用服务器类组成,主要是组合关系和相应的接口。 NET远程处理中客户端和应用程序服务器的交互是通过引用客户端上的接口(代理)和服务器上的对象来提供的。使用OOP的全部功能,它工作得非常好。例如,远程处理请求: IDTGroupUser aDTGro

我正在将.NET远程处理解决方案移动到WCF。 有windows窗体客户端和WCF应用程序服务器在会话模式下作为windows服务运行,还有一层交互应用程序服务器和WCF核心单例服务器也作为windows服务运行。 数据结构由大约20个中等权重的核心和应用服务器类组成,主要是组合关系和相应的接口。 NET远程处理中客户端和应用程序服务器的交互是通过引用客户端上的接口(代理)和服务器上的对象来提供的。使用OOP的全部功能,它工作得非常好。例如,远程处理请求:

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是端点):

如何在不搜索对象的情况下组织客户端和应用服务器之间的交互?
有没有一种方法可以使datacontract的datamember作为服务器中对象的引用?

基本上这就是您必须要做的。不能直接传输对象引用。你可以做几件事- 1.使对象查找字典成为基于字典的,以便更快。 2.在请求的标头中传递对象id,这样API就不会被所有获取对象id的API弄乱。在服务契约中,您可以首先从标头中搜索id为的对象,然后调用该对象上的方法。
希望能有所帮助。

“现在在WCF中没有面向对象的方法。”你为什么这么说,你目前的帖子在这一点上并不十分清楚。你仍然可以使用WCF的接口,你只需要添加具体的类型作为一个模板。不,你必须摆脱这种心态。WCF不会使对象成为远程对象,而是传输数据。这不是一回事。
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;
}