我很好奇我将如何通过webservices完成以下任务:
有人在之前的帖子中提到我应该使用网络服务。我似乎无法找到解释如何开始这样的事情的任何资源。所有简单的例子似乎只是展示了如何在给定查询的情况下提供XML。
我想知道如何接受内容,以及这与经过身份验证的网页上的上传控件有何不同。我不认为我真的了解网络服务及其好处。
用户如何使用我的网络服务发送XML文件界面?
答案 0 :(得分:2)
如果要进行大型文件上传,则Web服务可能会导致一些问题,因为某些Web服务平台(包括.NET)具有限制数据大小的默认设置。 Web服务的优点是它可以将请求映射到XML或从XML进行映射,因此您可以返回.NET类型,而不需要处理请求参数。 但是,您可能需要付出更多努力来维护状态等。 对于登录,您可以使用登录功能返回某种标识符,该标识符可用于验证用户是否对该会话有效 - 这样做的一种方法是在用户表中为lastActive和sessionGUID添加列,当他们登录时,你生成一个新的sessionGUID并返回它,并且在那个和任何其他有效请求上他们让你更新lastActive,如果在lastActive时间之后有一个请求太久,那么你拒绝请求...有很多类似的方法,但希望你得到一般的想法 - 你不想每次都要求登录细节,但你可以生成一个临时标识符并使用它。 要接受XML文件,您需要使用类似XDocument或XMLReader的内容来读取您收到的数据。假设您不是在讨论Web服务本身使用的XML格式的解析,那么您最有可能接收到一个字符串,然后将其推送到XDocument中,然后使用标准的XDocument函数来处理数据。如果文档很大,那么XMLReader应该更高效。 对于读取CSV文件,有一些(免费和非免费)CSV读取器有助于避免您可能遇到的一些问题,为您提供了一个很好的API来处理字符串或CSV数据串。但是,如果您知道源数据没有非结构化逗号,则可以使用该字符串并用逗号分隔它,然后删除值周围的任何引号。如果可能存在可能包含逗号的地址或其他数据,那么这种情况往往会变得非常快。 XML应该能够很好地通过Web服务传递 - 它应该被编码和解码,因此它会被传递出来。
至于将其存储在数据库中,有多种方法可以做到这一点 - 您可以使用ADO.NET在没有其他库的情况下将数据存储在数据库中,您可以在Visual Studio或SQL Server Management Studio中创建数据库结构然后使用SQLMetal或Linq to SQL生成用于保存数据的类,可以使用第三方数据库映射工具(例如Castle ActiveRecord),或者其他任何东西。这取决于你所知道的以及你愿意学到多少。这与Web服务真的是分开的。在.NET中定义Web服务时,您可以有效地定义标准函数,并将属性标记为Web服务,因此数据库端是标准的.NET数据库,与您为ASP.NET网站所做的不一样,甚至是桌面程序。
答案 1 :(得分:1)
Web服务不适合发送任意文件。它可以完成,但如果这是您创建Web服务的唯一原因,那么您也可以坚持使用HTTP。
如果文件具有特定格式或特定内容,那么您可能希望为此创建Web服务。 ASMX或WCF Web服务的目的是为数据提供可发现性和强类型(除其他外,我暂时坚持基础)。从客户端的角度来看,您不是尝试创建一些丑陋的XML或CSV blob并通过HTTP查看它,而是使用带有POCO类的实际服务代理:
MyService service = new MyService();
MyData data = new MyData() { ID = 3, Name = "Test", Date = DateTime.Now };
service.Save(data);
Visual Studio(以及Java和其他一些平台中的等效工具)将负责为您生成代理,因此您所要做的就是编写上述代码。
但是,如果您只是尝试发送任何数据,这将无法让您随处可见,因为您无法为原始XML生成代理。嗯,你可以,但它只是一个XmlDocument
,在可用性,类型安全性或可发现性方面没有任何作用。
不要对“XML Web Service”中的“XML”感到困惑。它不是发送vanilla XML的工具。相反,XML指的是消息的格式,因为它是通过线路传输的,而不是POST
字符串(id=3&name=Test&date=2010-01-24
)或使用的二进制RPC调用在.NET Remoting中。
在身份验证方面,如果您决定使用WCF,则只需使用正确的绑定。默认情况下,WCF代理通常配置为使用wsHttpBinding
,它使用集成的Windows身份验证来保护消息。同样,假设您使用Visual Studio,除非您决定更改默认设置,否则这一切都会自动完成。