.NET 1.1和.NET 3.5之间进行通信的“最佳”方式

时间:2010-01-11 09:38:02

标签: .net wcf web-services .net-1.1

我的意思是:

  • 最便宜的开发成本(1.1项目不太可能存活> 6个月)
  • 最简单的迁移到WCF或类似的

通过我的意思沟通:

  • 计算机之间的远程通信
  • 很可能没有防火墙限制

使用.Net 1.1,选项似乎是:套接字,远程处理和各种Web服务。

已经提出在套接字上使用二进制序列化DataTables的选项作为解决方案,但我对此持谨慎态度。

更新:本案例中的“服务器”是带有.Net 1.1的Windows Embedded Standard。在此阶段,我们无法向图像添加任何新组件,如IIS,ASP或MSMQ等。考虑到这一点

7 个答案:

答案 0 :(得分:8)

由于最终您将迁移到WCF,您可能需要考虑使用BasicHttpBinding立即构建WCF服务,BasicHttpBinding支持旧的ASMX样式Web服务,即WS-BasicProfile 1.1。您可以从.NET 1.1应用程序轻松使用此服务。

您还可以考虑在WCF中使用MsmqIntegrationBinding,其中.NET 1.1应用程序将从MSMQ发布/接收消息。

您可能需要查看以下相关文章:

答案 1 :(得分:3)

WebServices(基于asmx)应该在两者之间工作而没有问题。

答案 2 :(得分:1)

套接字应该相当简单。您需要发送什么类型的数据?如果它只是简单的字符串/其他原始类型,你可以想出一个基本的xml布局,并发送它。

答案 3 :(得分:1)

我们在代码中使用远程处理和Web服务来进行通信1.1< - > 3.5。我们发现Web服务最容易从1.1移植到3.5。

答案 4 :(得分:1)

在.NET 1.1中,您无法真正拥有二进制序列化的DataTable。在1.1中,默认情况下在2.0中,当您使用BinaryFormatter序列化DataSet或DataTable时,您获得的只是存储在字节数组中的XML序列化,以及您可能期望从所有这些重复标记中获得的膨胀。

在.NET 2.0及更高版本中,您可以在DataSet或DataTable上设置RemotingFormat = SerializationFormat.Binary以获得真正的紧凑二进制序列化,但我不认为这是.NET 1.1中的一个选项。

答案 5 :(得分:1)

信不信由你,经过一番调查后, Remoting 实际上看起来非常适合这个:

  • 它为WCF提供了类似的API
  • 比套接字高得多
  • 支持多个“频道”(HTTP或TCP)
  • 迁移到WCF相当容易(需要更改代码)。

据我所知, Web服务对于1.1来说“太难”了,因为它需要ASP.NET,我们没有+通常设置过多。

套接字级别太低。

MSMQ 只是因为进入门槛高(类似于Web服务)......我们无法在Windows Embedded版本(1.1机器)中添加任何新组件,我怀疑MSMQ是不是“标准”。

答案 6 :(得分:1)

您无需使用内置序列化来序列化DataTable对象。 DataTable只是一堆列和行。您应该简单地遍历表的行,并对每个行进行序列化。

根据您的权衡,您可能希望将DataTable复制到等效的数据传输对象中,然后二进制序列化该对象。这样的对象将由一组镜像组成,这些对象镜像DataTable的结构。该对象将为DataTable的每一列提供一个属性。

这样,您就可以避免序列化表元数据,并且应该可以轻松快速地进行二进制序列化。

鉴于此,我会避免Remoting。确实,该结构有点类似于WCF的结构,但它几乎都不受支持。糟糕的是,你几乎使用了最旧的.NET版本,你真的不想依赖一种过时的技术。

套接字并不漂亮,但它们很容易理解。如果你小心,你将创建相对容易维护的套接字代码,至少只要你必须坚持使用.NET 1.1。

您可能希望查看.NET 2.0中添加的新类(例如TcpClient),并创建类似的API。这样,如果您能够将映像更新到.NET 2.0,那么您将发现利用Microsoft必须维护的代码更容易。