Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否应该将WCF用于简单的文本有线协议?_C#_.net_Wcf_Architecture_Visual Foxpro - Fatal编程技术网

C# 我是否应该将WCF用于简单的文本有线协议?

C# 我是否应该将WCF用于简单的文本有线协议?,c#,.net,wcf,architecture,visual-foxpro,C#,.net,Wcf,Architecture,Visual Foxpro,我需要写一个程序,将与其他.NET程序通信。。。而且还是一个传统的基于TCP的VFP程序。我需要选择一种VFP程序员可以使用的相当简单的TCP消息格式。它可以像一系列由…分隔的小XML blob一样简单。。。我不知道,一个空字符?不管怎样 我需要在TcpListener/TcpClient和WCF之间进行选择。我开始研究WCF,但它的体系结构似乎不透明,而且内置的Visual Studio模板严重偏向于使“web服务”像一种RPC机制,但需要应用程序外部的特殊“主机”或web服务器。微软的WCF

我需要写一个程序,将与其他.NET程序通信。。。而且还是一个传统的基于TCP的VFP程序。我需要选择一种VFP程序员可以使用的相当简单的TCP消息格式。它可以像一系列由…分隔的小XML blob一样简单。。。我不知道,一个空字符?不管怎样

我需要在TcpListener/TcpClient和WCF之间进行选择。我开始研究WCF,但它的体系结构似乎不透明,而且内置的Visual Studio模板严重偏向于使“web服务”像一种RPC机制,但需要应用程序外部的特殊“主机”或web服务器。微软的WCF听起来相当麻烦(涉及代码生成器、命令行和XML垃圾,只是为了远程减去或乘以两个数字)

我想要一个独立的应用程序(没有“主机”),我想要控制wire协议,我想了解它是如何工作的。WCF似乎不能促进这些事情,所以我放弃了它,因为它考虑到了TcpListener/TcpClient

但是,该程序将充当单个(VFP)服务器和多个(.NET)客户端之间的中介,并且将在两个方向和不同连接之间进行通信。使用
TcpListener
TcpClient
,处理连接和线程的工作变得有点混乱,我没有使用
IAsyncResult
的经验,而且我不仅对自己的代码质量没有信心

因此,我想再次征求意见:我是否应该考虑WCF?如果是,你能告诉我以下问题的答案吗

  • web上哪里有对WCF架构的良好解释?还是我需要一本书
  • 在WCF中,双向通信是如何完成的,其中任何一方(单个TCP连接)都可以随时发送消息
  • 我怎样才能越过所有的web服务和RPC混乱,控制wire协议
  • 在WCF中,如何干净地关闭应用程序,并行关闭所有连接,而不使用hacky Thread.Abort()命令

  • 如果没有,我如何设置我的代码(使用TcpListener/TcpClient/NetworkStream),这样我既可以从网络流中读取消息,又可以接受来自其他连接的请求,随时完全关闭,避免浪费CPU时间轮询处于非活动状态的队列和网络流?

    简短回答:使用WCF。虽然有大量的工具和代码生成以及其他一些细节,但没有什么可以阻止您在代码中设置所有内容(您可以在代码中定义契约、设置端点等)

    关于您的具体问题:

  • -这是非常基本的,应该可以让您相对快速地启动和运行
  • 你要找的是。NetTcpBinding允许开箱即用的双工服务(尽管可以使用HTTP实现,但需要特定的绑定)
  • 如果要控制导线格式,则需要创建导线。然而,我不得不强烈地反对它。您想创建一个带有空字符的XML文件来描述单独的消息吗?不需要这样做,XML的本质是您可以创建子元素来执行适当的分组;可以嵌套的元素数量没有限制。真的没有这个必要
  • 只需通过调用关闭,即可完成所有未完成的请求,然后正常关闭。如果你真的想毫无顾忌地拆掉,那就给我打电话

  • 最后,我强烈建议您不要使用NetTcpBinding;VFP将很难在协议中花费时间。但是,如果您使用基于HTTP的协议,那么VFP总是可以轻松使用一些工具来进行调用和使用内容(假设您坚持使用XML)。

    仅针对使用DCOM的常见问题,VFP可以使用DCOM,但需要使用CreateObjectEx()。。。唯一的区别是,您需要知道要连接到的类实例在任何服务器上的GUID,以及要连接的机器名

    然后远程对象通过公开的函数执行其工作,但是从网络上的其他机器调用它的VFP将其视为函数在本地执行,并获取返回值


    我早在10年前就为一家保险公司使用VFP进行了DCOM…

    VFP可以调用COM对象吗?如果是这样,那么创建一个.NET类库,将其公开给COM,并使用它与WCF通信。@John Saunders:是的,我相信它可以通过
    CreateObject
    函数调用。但是,在这种情况下,最好使用
    CreateObject
    ,以便通过COM+集成访问代理(请参见此处的清单10-11:)@John,VFP可以使用COM,但与我的判断相反,我的主管希望中介能够在不同的机器上运行。这意味着DCOM,我不知道如何使用它。由于
    VFP中介
    之间的消息与
    中介客户端
    之间的消息类似,因此我认为最好对两者都使用TCP。没有任何分隔符,从网络流中读取的代码如何知道消息已结束并且不应阻止等待更多数据?@Qwertie:假设他们正在使用WCF;如果是这样的话,那么这些都是由低级别的绑定来处理的,没有理由在消息编码中担心这一点。如果在VFP中使用WCF,则应该通过COM+集成,这样他们就不必担心低级的东西。@casperOne:“他们”使用WCF的假设是不正确的。VFP是一种非.NET技术,因此不能使用WCF;这就是为什么我担心wire协议(好吧,这和效率——我想保持不变)