繁体   English   中英

不确定如何使用Web服务发送复杂数据

[英]Not sure how to send complex data using Web Services

我已经查看了网站上的一些问题,但是我仍然无法理解从哪里开始。

我以前从未对网络服务做过任何事情,所以请耐心等待。

我分配的当前项目是编写一个查询数据库并将数据返回给客户端的Web服务。 (在C#中使用.NET 2008编程)

到目前为止,我已经能够做基本数据类型没有问题,但我不能100%确定从那里去哪里。 我一直在返回一个XmlDocument类型,但我不确定这是最好的方法,甚至是正确的方法。

目前正在创建一个ASP.NET Web服务,尽管有人建议我使用WCF Web服务。

有人能说明从哪里开始吗? 或者也许是通过webservices发送和接收大量数据的教程的链接?

编辑:到目前为止答案很好,但我仍然不能100%肯定如何回答。 我认为网络服务将与客户端程序以及网站的组合进行交互,如果可能的话......这就是我对此的新意见。

http://msdn.microsoft.com/en-us/library/ms733127.aspx

WCF使用数据契约的这一概念 - 它为复杂对象提供序列化帮助。

根据您发送回客户端的数据结构,我不建议使用XmlDocument作为返回类型。 它会为您的回复添加大量不必要的批量。

您确实没有说明要支持的协议,但是如果您通过HTTP传输数据,那么将数据作为JSON格式的字符串发送回客户端将更好地简化它。

您可以定义您将返回格式为JSON的复杂类型,如下所示:

[WebGet(ResponseFormat=WebMessageFormat.Json, UriTemplate="GetComplexObject/{id}")]
public MyComplexType GetComplexObject(int id){
  //do work to get your object
  return myObject;
}

如果将MyComplexType定义为DataContract WCF将负责将对象序列化为JSON ...

[DataContract]
public class MyComplexType{
  [DataMember]
  String Name {get;set;}
}

如果您正在寻找REST-ful服务,那么WCF可能是使用WebHttp功能的首选方法。

WCF团队汇总了一系列关于使用WCF WebHttp(.NET 4新手)的演练。 他们假设了一些关于web http编程的知识,但他们非常好,希望能帮助你走上正确的轨道。

我希望这有帮助!! 祝好运。

将数据发送回客户端的最佳方法是通过xml,因为几乎所有语言都知道如何处理xml文档。

如果你想要使用几乎所有可用的语言来实现你的Web服务,那么如果你想要返回一些与语言有关的东西并不是最糟糕的。

另一个可能性是返回json对象。

如果您决定使用WCF,可以在以下网址获得教程: http//dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx

通常, 本文将介绍如何构建一个发送JSON的ASP.NET Web服务。

JSON比XML更快,并且正在成为大多数新Web服务的标准。 我强烈推荐JSON.NET库用于JSON序列化。

我使用常规ASPX.NET Web服务实现了两种方法:

  1. 在客户端和服务器上具有相同的底层对象库,并将数据从Web服务对象转换为客户端对象。

  2. 在客户端和服务器上具有相同的底层对象库,并将数据作为数据对象的字符串表示形式传递到服务器或从服务器传递数据(通常是XML格式,但可以是JSON或其他类似格式)

我找到的第一个选项非常繁琐。 即使您在服务器和客户端上具有相同的类/对象,Web服务也会声称其库版本是唯一的。 即使命名空间相同,从Web服务返回的对象也会在其中的某个位置具有Web服务命名空间,因此您必须编写函数来转换它们。 我知道一种方法可以解决这个问题,但这不值得付出努力,至少对我来说并非如此。

第二个选项是我现在使用的那个。 我在客户端和服务器上都有一个库。 它具有从数据库获取和保存数据的对象。 然后,我有通用实用程序函数,用于将对象与XML字符串串行化。 当我从服务器发送数据时,我将其序列化为服务器上的XML字符串,并在客户端进行反序列化。 我向服务器发送数据时反向。 我还分解了传入/传出Web服务的大量数据,以减少错误和数据传输时间。

WCF可能更好。 从未使用过它。 但以上是我对标准Web服务所做的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM