【发布时间】:2016-04-06 18:09:12
【问题描述】:
目前,我在我的项目中使用 WCF 进行网络连接。但是,我想切换到一些网络库,例如 Lidgren Network。
由于它是 WCF,它使用接口,可以通过一种方法发送和接收数据,并且 Lidgren 网络处于较低级别,您需要构建和发送数据包,这不是问题。
问题是,我不知道如何仅使用一种方法(例如使用 WCF)进行发送和接收。
假设我有一些使用 WCF 的客户端代码:
void SomeCode()
{
var status = wcfChannel.CheckUserId(id);
if (status)
{
// true
// do something
}
else
{
// false
// do something
}
}
Lidgren 网络将是:
void SomeCode()
{
var packet = new packet(...);
packet.Write(id);
var status = send2Server(packet);
if (status)
{
// true
// do something
}
else
{
// false
// do something
}
}
所以,'send2Server' 应该以某种方式实现。由于它只能循环接收数据包(?),我没有任何想法。 好吧,一个 - 我可以在 SomeCode 的类中有一些变量,并且客户端网络接收数据包的循环会改变 SomeCode 的类中的这些变量。此外,需要添加一些延迟,并让这些变量进一步使用。 但是,应该有更好的方法来实现这一点。
【问题讨论】:
-
更好的方法通常是 SOAP (WCF)、REST (Web API /
HttpClient) 或其他一些协议和随附的库。为什么要避免 WCF? -
嗯,主要是因为 WCF 不适用于 Mono。
-
Mono 支持大部分 WCF,请参阅 mono-project.com/docs/web/wcf
-
但它并不完美。我的应用无法在带有 Mono 的 Linux 上运行。无论如何,我正在考虑类似的解决方案,在发送数据包后,使用 while(!packetReceived),然后使用方法,比如 ReceiveData(..)。要没有无限循环,请检查循环计数器是否大于预设并中断循环。那么没有别的办法了吗?
-
WCF 在 Linux 上运行良好。我们在许多产品中使用它。如果你有一个具体的问题,我会就此提出一个问题。因为你有 WCF 问题而去插座就像在你的汽车的“检查引擎”灯亮起之后制造一辆自行车。
标签: c# wcf networking