Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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#.NET远程处理最佳实践?_C#_Remoting_Serializable_Marshalbyrefobject - Fatal编程技术网

C#.NET远程处理最佳实践?

C#.NET远程处理最佳实践?,c#,remoting,serializable,marshalbyrefobject,C#,Remoting,Serializable,Marshalbyrefobject,好的,所以我知道我对.NET远程处理非常陌生,我有一个关于最佳实践的问题。首先,我已经有了一个我已经构建的内部应用程序,还有我引用的dll,它可以为我处理所有的数据。我希望我的应用程序的服务器版本能够利用所有这些类及其方法,并能够来回传递这些自定义对象 我的问题是,我是否应该将[Serializable]应用于我想要来回传递的所有类,然后创建专门使用我的方法获取、添加或更新、删除等的特殊类 现在,我在所有与数据库来回通信的类中都有Get、AddOrUpdate和Delete方法。我已经了解到我不

好的,所以我知道我对.NET远程处理非常陌生,我有一个关于最佳实践的问题。首先,我已经有了一个我已经构建的内部应用程序,还有我引用的dll,它可以为我处理所有的数据。我希望我的应用程序的服务器版本能够利用所有这些类及其方法,并能够来回传递这些自定义对象

我的问题是,我是否应该将[Serializable]应用于我想要来回传递的所有类,然后创建专门使用我的方法获取、添加或更新、删除等的特殊类

现在,我在所有与数据库来回通信的类中都有Get、AddOrUpdate和Delete方法。我已经了解到我不能将ByRefObject&[Serializable]封送到所有这些类,否则我将遇到问题。所以,这就是为什么我认为我需要创建单独的类来进行“管理”(例如Get、AddOrUpdate、Delete),而不是创建属性定义和方法调用

一个我认为需要做的例子

[Serializable]
    public class Users {
        #region Properties...
        private int _userID;
        private string _displayName;
        private string _userName;
        private string _firstName;
        private string _lastName;
        private string _LogOnPassword;
        private List<Users> _Associates = new List<Users>();
        private AuthenticationLevel _authorizationLevel;
        private string _userSettingsXML;
        private string _active;
        private string _signature;
        private int _PhoneExtension;
        private int _Index;
        private List<UserAssignedRoles> _Roles = new List<UserAssignedRoles>();
[可序列化]
公共类用户{
#区域属性。。。
私有int_用户id;
私有字符串_displayName;
私有字符串\u用户名;
私有字符串_firstName;
私有字符串_lastName;
私有字符串_LogOnPassword;
私有列表_Associates=新列表();
私有身份验证级别\u授权级别;
私有字符串_userSettingsXML;
私有字符串_活动;
私有字符串签名;
专用int_电话分机;
私有整数指数;
私有列表_角色=新列表();
然后要真正创建一个列表,我需要一个单独的类,叫做UserManagement

public class UserManagement : MarshalByRefObject { 
    public List<Users> GetUsers() { 

    }
}
公共类用户管理:MarshalByRefObject{
公共列表GetUsers(){
}
}

非常感谢您!

远程处理可能是一个很好的方法,但是由于您没有给出很多关于为什么要远程处理的上下文,请允许我提供一个额外的建议。您可能需要考虑创建跨Web层通信的Web服务。是一种成熟的技术,它使通信变得简单。您可能还想了解面向服务的体系结构(SOA),也许可以从开始

使用WCF重用您当前的类应该不会有任何问题。服务只会给您提供更好的结构,而且WCF技能比.NET远程处理技能更常见(对于您之后需要管理此代码的人员)


祝你好运!-Bill

看到了,如果需要,只要你有足够的特权,你可以将所有对象作为MarshalByRefObject传递。所有其他的都取决于你的设计决定。一般来说,远程处理的最佳做法是放弃它,转到WCF。也许你只限于Fx2左右,但一定要调查一下选项。亨克,谢谢,我想我是肯定是走WCF路线。看起来这将是一种比远程处理简单得多的方法,更优雅,这正是我所寻找的。太棒了,谢谢!是的,我对信息的缺乏表示歉意。我的应用程序基本上采用了新请求的功能。到目前为止,它主要是数据库驱动的,不需要任何服务器内置客户端基础设施。我学习了一点.NET远程处理,但我一直很好奇还有什么。我正在研究WCF。非常感谢你的链接。比尔,我有一个问题。我阅读了你提供的文章,感谢你,这些是我需要阅读的关键材料。我去了我注意到我必须生成代理,然后将该文件合并到我的客户机中。我不喜欢的是我的客户机代码没有遵循我的类设计的优雅。所以我的问题是,我可以保留我的类设计,如MyDatabase吗e、 客户代码中的订单、MyDatabase.Users等,或者这只是需要做出的牺牲?您不需要使用代理,尽管这是一种方便的简化方法。如果您想“自己动手”,请在codereview.stackexchange.com上查看这篇文章,并提供一些示例代码: