【发布时间】:2012-11-13 01:25:51
【问题描述】:
我一直在玩 XNA,想尝试让游戏在 LAN 上运行,但事实证明,要做到这一点,我需要使用一种叫做远程处理的东西。无论如何,我设法让它工作
public class TestObject : MarshalByRefObject
{
int testInt;
public Level()
{
this.testInt = 5.Zero;
}
public int GetNumber()
{
return testInt;
}
}
和我的服务器 通道 = 新 TcpChannel(4444); ChannelServices.RegisterChannel(channel, false);
Type type = Type.GetType("Domain.Level,Domain");
RemotingConfiguration.RegisterWellKnownServiceType(type,
"FirstRemote",
WellKnownObjectMode.Singleton);
和客户
this.chanel = new TcpChannel();
ChannelServices.RegisterChannel(chanel, false);
this.testObject = (TestObject)Activator.GetObject(typeof(TestObject),
"tcp://localhost:4444/FirstRemote");
这样可行,但问题是服务器无法访问该对象,我无法创建一个带参数的构造函数,因此无法初始化测试对象上的任何数据。如何制作一个对象,然后让它使用它而不是制作一个新对象?
【问题讨论】:
-
为什么需要使用Remoting?它几乎已被 WCF 取代。
-
WCF?那会做我想要的吗?我不完全知道它是什么或听说过它。
-
一般来说,WCF 会做你想做的事。我不是 XNA 专家,所以 XNA 可能不支持 WCF。你必须检查一下。见stackoverflow.com/tags/wcf/info。
-
显然 WCF 只支持 HTTP 并且 HTTP 意味着比 ICP 慢。看起来 WCF 更多地用于基于 Web 的东西,而我只需要 LAN 的东西。
-
WCF 支持许多协议,包括 TCP。它用于所有网络场景。 XNA 上的 WCF 可能仅支持 HTTP 和 HTTPS。如果您不需要绝对最高速度,那么这不是问题。如果您的应用程序需要尽可能高的速度,那么您可以使用 WCF 创建自己的传输,使用 TCP/IP,然后在客户端和服务端使用它。这为您提供了最佳速度,同时只为您提供了一段代码来支持(传输)。您的更高层将是 WCF,它可能会持续至少十年。