遇到了一个小问题。 我们有一个来自Netgear的面向互联网的VPN,允许员工和教师使用他们家中的RDC访问学校网络。 他们使用他们的网络浏览器登录VPN,点击我们的一个远程服务器,然后他们进入RDC。 人们虽然有一个大问题,但是已经注销了。 它似乎逃脱了他们的头脑。 所有 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试做一个服务器客户端应用程序,以了解有关使用c#的远程程序的更多信息。
结构很简单。
我有一个服务器,当调用updateInventory函数并且每个客户端(使用委托)向事件注册一个函数时,该服务器都会触发事件。
因此,当任何一个客户端更新清单时(通过调用updateInventory函数),所有客户端都会通过事件的方式对其进行警告。
现在的问题是它根本无法正常工作,当客户端调用updateInventory函数时,服务器中的那个不会被唤醒。
该程序具有以下4个组件:
库存变化的Args
它是可序列化的,并且用作事件触发的函数的参数。 我将其编译为.dll,并通过“添加引用...”在服务器和客户端上使用:
using System;
[Serializable]
public class InventoryChangeArgs:EventArgs
{
private string pno;
public string Pno
{
get
{
return pno;
}
set
{
pno = value;
}
}
private int change;
public int Change
{
get
{
return change;
}
set
{
change = value;
}
}
public InventoryChangeArgs(string pno, int change)
{
Console.WriteLine("InventoryChangeArgs constructed");
this.pno = pno;
this.change = change;
}
}
库存管理器
声明委托,事件并声明何时触发事件。 客户端具有相同的类,唯一不同的是UpdateInventory内容,该内容为null,其他所有内容都相同。
public class InventoryManager:MarshalByRefObject
{
public delegate string InventoryChangeHandler(object sender, InventoryChangeArgs info);
public event InventoryChangeHandler Changed;
public void UpdateInventory(string pno, int change)
{
Console.WriteLine("UpdateInveroty has been invoced");
if (change == 0)
Console.WriteLine("No changed event");
else if (Changed != null)
{
Changed(this, new InventoryChangeArgs(pno, change));
Console.WriteLine("Changed event");
}
}
}
客户端上的事件函数将事件Wan函数添加到事件并设置远程配置:
class Client
{
static void Warn(object sender,InventoryChangeArgs args)
{
Console.WriteLine("It was changed by: {0] the {1}",args.Change,args.Pno);
}
static void Main(string[] args)
{
RemotingConfiguration.Configure("Client.exe.config",false);
InventoryManager inv=new InventoryManager();
inv.Changed+=new InventoryManager.InventoryChangeHandler(Warn);
Console.WriteLine("Client started");
inv.UpdateInventory("102", 2);
Console.ReadLine();
}
}
远程配置文件该客户端,服务器的远程配置文件与以下几行几乎相同:
...
<application name="Server">
<service>
<wellknown
mode="Singleton"
type="InventoryManager, InventoryManager"
objectUri="InventoryManager" />
</service>
...
<channel ref="tcp" port="9000">
...
<configuration>
<system.runtime.remoting>
<application>
<client>
<wellknown
type="InventoryManager, InventoryManager"
url="tcp://localhost:9000/Server/InventoryManager"
/>
</client>
<channels>
<channel ref="tcp" port="0">
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>
如果有人可以给我一些帮助,我将不胜感激。 提前致谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.