C# 向服务器发送数据(消息)的最佳(被广泛接受的)方式是什么

C# 向服务器发送数据(消息)的最佳(被广泛接受的)方式是什么,c#,messaging,C#,Messaging,我有一个C#应用程序(即客户端)和一个服务器。现在服务器获取并向客户端发送各种各样的字符串消息,我使用StreamWriter来实现这一点,现在客户端和服务器上的发送消息看起来非常相同,我将字符串编码为UTF-8,然后发送它 public void SendMessage(String p) { if (p != "") { string StringMessage = HttpUtility.UrlEncode(p, System.Text.Encoding.U

我有一个C#应用程序(即客户端)和一个服务器。现在服务器获取并向客户端发送各种各样的字符串消息,我使用
StreamWriter
来实现这一点,现在客户端和服务器上的发送消息看起来非常相同,我将字符串编码为UTF-8,然后发送它

public void SendMessage(String p)
{
    if (p != "")
    {
        string StringMessage = HttpUtility.UrlEncode(p, System.Text.Encoding.UTF8);

        try
        {
            swSender.WriteLine(StringMessage);
            swSender.Flush();
        }
        catch (IOException e)
        {
            //do some stuff
        }
    }
}
现在,我发送的字符串如下所示:

"SUBJECT@@@@SOMEDATA1<><>SOMEDATA2<><>SOMEDATA3
如何修复此问题?

尝试使用此方法

请改为使用UrlEncode()

方法


相反,UrlEncode()

这在很大程度上取决于应用程序的需要。
一般来说:不,发明自己的协议不是一个好主意

从客户端到服务器发送消息的方法有很多。
我建议您阅读一下WCF,或者如果您使用的是.NET 2.0而不是.NET远程处理。

此外,您可能需要考虑发送HTTP消息,因为有很多框架可以做到这一点。

< P>这完全取决于应用程序的需要。 一般来说:不,发明自己的协议不是一个好主意

从客户端到服务器发送消息的方法有很多。
我建议您阅读一下WCF,或者如果您使用的是.NET 2.0而不是.NET远程处理。

此外,您可能需要考虑发送HTTP消息,因为有很多框架可以做到这一点。

< P>一种方法是使用XML- RPC。我用过。我按照说明进行了修改,并让客户机/服务器在30分钟内工作,然后再在10分钟内根据我的喜好进行修改。基本上,您可以正常调用函数,通过库的魔力,它将阻止服务器执行代码,并返回结果。RPC=远程过程调用

如果您使用asp.net,请使用标有IIS的说明,即使您在linux上使用的是fastcgi或apache。我忽略了这是一个错误,因为它被标记为IIS。有一个可用的.NET远程处理选项(如果服务器不是asp.NET,而是另一个应用程序)


一个不太好的选择是学习webclient并将json字符串发布到服务器。然后将响应读取为json。XML-RPC非常标准,建议使用。

一种方法是使用XML-RPC。我用过。我按照说明进行了修改,并让客户机/服务器在30分钟内工作,然后再在10分钟内根据我的喜好进行修改。基本上,您可以正常调用函数,通过库的魔力,它将阻止服务器执行代码,并返回结果。RPC=远程过程调用

如果您使用asp.net,请使用标有IIS的说明,即使您在linux上使用的是fastcgi或apache。我忽略了这是一个错误,因为它被标记为IIS。有一个可用的.NET远程处理选项(如果服务器不是asp.NET,而是另一个应用程序)


一个不太好的选择是学习webclient并将json字符串发布到服务器。然后将响应读取为json。XML-RPC非常标准,建议使用。

它将如何帮助我解决问题,我根本不谈论编码,它与我如何编码无关,重要的是我不确定我是否需要以这种方式发送数据它将如何帮助我解决我的问题,我根本不谈论编码,它与我如何编码无关,重要的是,我不确定是否需要以这种方式发送数据如果互操作性也是您的要求之一,WCF Rest服务是您的friendIm使用mvc模式,那么模型是否应该连接到从服务器获取数据的WCF客户端?或者WCF客户端应该充当模型本身吗?模型既不是客户端,也没有任何东西连接到它。模型只是业务对象的定义。您应该创建在它们之间传递模型对象的客户端和服务器如果互操作性也是您的要求之一,WCF Rest服务就是您的朋友IM使用mvc模式,那么模型是否应该连接到从服务器获取数据的WCF客户端?或者WCF客户端应该充当模型本身吗?模型既不是客户端,也没有任何东西连接到它。模型只是业务对象的定义。您应该创建客户端和服务器,在它们之间传递模型对象并发送自描述数据。Xml。Soap和其他互操作协议的基石。想想WCF.你说的自我描述数据是什么意思?你能发布exmaple吗?发送自我描述的数据。Xml。Soap和其他互操作协议的基石。想想WCF.你说的自我描述数据是什么意思?你能发布一个exmaple吗?也许我错了,但我认为从客户端调用服务器上的功能而不进行任何过滤不是一件好事。。。无论如何,谢谢,我会仔细看看。@BlueGene:对于任何需要用户登录/身份验证的内容,通常都有身份验证函数(或长api密钥的参数)。OAuth是一种流行的方法。到目前为止,我所做的远程调用不需要身份验证,但在加密方面,您可以将url放在https后面,而不必担心嗅探/中间人攻击。但是,如果您使用.NET和自签名证书.NET会抱怨,您需要关闭某些功能。为此,请查找ServicePointManager.ServerCertificateValidationCallback并为其分配一个始终返回true的函数。也许我错了,但我认为从客户端调用服务器上的函数而不进行任何筛选不是一件好事。。。无论如何,谢谢,我会仔细看看。@BlueGene:对于任何需要用户登录/身份验证的内容,通常都有身份验证函数(或长api密钥的参数)。OAuth是一种流行的方法。到目前为止,我所做的远程调用不需要身份验证,但在加密方面,您可以将url放在https后面,而不必担心嗅探/中间人攻击。但是,如果您使用.NET和自签名证书.NET会抱怨,您需要关闭某些功能。为了那项查询服务
if(Subject="something")
    do something
else if(subject="something else")
    do something else