刚学习Remoting,出问题了,高人进来说两句

liyihui2001 2006-11-01 04:00:38
运行时出错,提示无法找到程序集

先写了两个个接口,编译成interface.dll,包含了IServer和IUser
生成服务端解决方案,包含一个应用程序项目(服务端)和一个类库项目,类库项目中用两个类分别继承了interface.dll中两个接口的方法

我在客户端中只添加对接口dll的引用,调用远程对象的方法(返回另外一个对象,有Serializable属性),结果运行出错:无法找到程序集
客户端程序添加实现类库的引用,则运行正常。

个人理解,既然返回的对象从给定的接口继承,就可以不添加实现类库的引用(如:IUser user = sc.GetUser(),可为何还向我要实现类的引用呢????

关于远程对象的发布和引用对是按照网上给好的例子一步一步做的,没有问题。

各位看看,发表发表意见。
...全文
179 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhongwanli 2006-11-07
  • 打赏
  • 举报
回复
http://wannyjong@cnblogs.com
mikebai 2006-11-07
  • 打赏
  • 举报
回复
首先你要确定这个类是要传到客户端还是要在客户端调用,如果是传入客户端不能使用接口,且必须可序列化,如果只是调用可以用接口,客户端对接口操作
===========================
经典~~~~~~
真相重于对错 2006-11-07
  • 打赏
  • 举报
回复
首先你要确定这个类是要传到客户端还是要在客户端调用,如果是传入客户端不能使用接口,且必须可序列化,如果只是调用可以用接口,客户端对接口操作
liyihui2001 2006-11-06
  • 打赏
  • 举报
回复
楼上的兄弟,我的写法和你的基本上一样,只是我的BugList也是用接口写的,所以在Get的时候就有了这个问题,现在只能先把我的类似你BugList类的实现也引用到客户端。
路人霆 2006-11-01
  • 打赏
  • 举报
回复
嗬嗬,和我刚看的时候一样的想法呢。
通过接口来进行调用。举个简单的例子来理解。
下面是客户端的一个实际调用的UI类实现。
public class UIRemotingBugList : IUIBugList
{
public UIRemotingBugList()
{
// RemotingConfiguration.Configure(
//AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, false);

}
private IServerModel ism =
(IServerModel)Activator.GetObject(
typeof(IServerModel),
//"tcp://localhost:9999/BugServer"
"tcp://192.168.0.11:9999/BugServer"
);
public List<BugList> GetAllBugList()
{
List<BugList> rs = new List<BugList>();
//

BugList[] bs = ism.GetBugList();
foreach (BugList b in bs)
{
rs.Add(b);
}
return rs;
}
}
下面是服务器端的写法:
public class BugServer : MarshalByRefObject,IServerModel
{
public void TestM()
{
Console.WriteLine("BugServer:Client Connected!");
}
public BugList[] GetBugList()
{
BugListDB db = new BugListDB();
TestM();
return db.GetAllBugLists();
}
}

那么实际上客户端和服务器都只引用到了IServerModel这个接口。
public interface IServerModel
{
void TestM();
BugList[] GetBugList();
}
服务器端的具体实现类就不用在客户端出现了。都通过引用一个共同的接口库即可。
liyihui2001 2006-11-01
  • 打赏
  • 举报
回复
自己顶一下
pol000 2006-11-01
  • 打赏
  • 举报
回复
帮楼主顶~~
xray2005 2006-11-01
  • 打赏
  • 举报
回复
学习ing ...
liyihui2001 2006-11-01
  • 打赏
  • 举报
回复
上面的问题中有什么方法不在客户端添加对实现类的引用,只通过接口进行?
真相重于对错 2006-11-01
  • 打赏
  • 举报
回复
对接口操作,无需具体实现类
liyihui2001 2006-11-01
  • 打赏
  • 举报
回复
个人感觉也好像不行,但是如果这样不行,怎么才能不在客户端添加对实现类的引用?接口在这里好像没什么意义了
真相重于对错 2006-11-01
  • 打赏
  • 举报
回复
客户机上并没有引用这个类,而是接口,也就是说客户机上无法得到这个类的具体类信息。
除非客户机也引用实现的类的dll
liyihui2001 2006-11-01
  • 打赏
  • 举报
回复
返回实现IUser的类,为什么不能这样用?
真相重于对错 2006-11-01
  • 打赏
  • 举报
回复
sc.GetUser() 这个方法返回什么?
IUser or 实现IUser的类,如果是后者,当然出错
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-11-01 04:00
社区公告

让您成为最强悍的C#开发者