(编辑添加一个例子,希望能让它更清晰一点)
我主要是VB6开发人员,但我目前正在尝试使用VB.Net编写Web服务,以便在我们的产品和第三方之间进行通信。第三方软件将调用我们的Web服务来更新各种数据。
我已经阅读了有关如何执行此操作的各种信息,并已成功生成原型Web服务。我现在关心的是如何正确地做到这一点。我们的客户希望我们为我们的Web服务提供WSDL和XSD,因此他们可以在他们的最终实现它,所以我想确保我做对了。因此,我有以下假设/问题:
Web服务将收到应更新的各个字段。为了保持这种灵活性,我认为这可能是一个XML参数。我猜这就是为什么我们的客户想要XSD。这个假设是否正确?传递XML输入参数是一种好习惯吗?
我创建了一个简单的类,其中包含应更新的字段样本(标题,地址1,地址2等),然后使用XSD.Exe生成XSD。这让我想到 - 我的输入参数应该是这个类的实例,而不是基于XSD的XML文档吗?
例如,要更新的字段与客户端数据有关。有许多可能的字段可以更新,但一次只能更新一些。显然,我不希望每个可能字段都有一个包含40个参数的方法,并且还要求我只提供一个方法。因此,我的想法是有一个参数命名要更新的字段及其值。将XML用于此参数似乎是明智的。我对客户对XSD的请求的假设是为了确保XML参数只包含有效字段。但与此同时,我使用Visual Studio基于我创建的示例类生成了一个XSD。但现在我不确定哪个最好用,即:
a)XML:cliData As Xml.XmlDocument:出现在WSDL中,但是如何生成XSD以确保XML有效?手动?
b)类:cliData As ClientData:在WSDL中序列化,因此每个字段都显示为单独的元素。大概不需要XSD,但我不认为这给了我选项只包括几个字段,这不等于有大量的参数吗?
c)字符串:cliData As String:传入某种字符串,手动解开,但不进行验证。
我最初计划返回Web服务的状态(例如“OK”或某些失败消息),尽管我已经在其他地方看到过SOAP Faults的引用。有一些链接到MSDN文章讨论这个,但链接似乎被打破了!有没有人对此有任何建议?
如果有人在其他地方提出这些问题,我道歉 - 我在这个网站和整个互联网上搜索过,但是信息已经过多了,我最终得到的问题多于答案!
谢谢, 奥利
答案 0 :(得分:1)
这听起来好像让你的生活变得更加复杂。 ASP.NET将为您处理Web服务的所有脏工作。说实话,我不确定XSD的用途。我只是在您的Web服务上创建一个方法,它接受字符串作为参数或采用自定义类。 ASP.NET Web服务或WCF服务将为您处理序列化。查看msdn站点以开始使用它。 http://msdn.microsoft.com/en-us/library/ms972326.aspx
答案 1 :(得分:0)
我使用了接受XML字符串作为输入的服务,发现它比使用参数的一组方法调用更麻烦。如果您在服务中收到XML字符串,则必须解析它才能获取值。我发现使用所需参数编写一个或多个方法更容易。
我假设您的客户端不会使用.NET来调用您的Web服务。如果愿意,您可以使用wsdl.exe为它们生成代理。
答案 2 :(得分:0)
过于灵活是错误的。该服务应该执行服务的目的。如果需求稍后更改,则向服务添加新操作,或者更好的是,添加新版本的服务 - 这样做既便宜又容易。
另外,如果你刚刚开始,过去开始没有任何意义。直接转到WCF,不要关注ASMX Web服务,这是过时的最好的事情 - 对它们进行的增强很少(如果有的话),也许只是关键的安全修复。
除此之外,基本WCF更简单。此外,在很大程度上,您为简单案例编写的代码也可以在稍后可能出现的更复杂的情况下使用,几乎没有或没有变化。