2011-08-08 50 views
0

我想从Web服务下载xsd规范并自动将这些模式转换(序列化)为类(visual studio - vb.net)。如果负责xsd模式的组织改变他们的方式,只有我的类对应于xsd必须更改(而不是我的代码的其余部分),我想自动更新我的xsd相应的类。这可能吗?如果是这样,有人可以告诉我该怎么做吗?自动序列化

谢谢!

我使用vs2010。我想要做的是:调用一个Web服务,在该服务中可以将输入参数发送到指定要检索的xsd的服务(该服务是GetShemaDefenition并返回一个具有该对象的字符串属性中的模式规范的对象)。我需要从字符串属性中读取xsd字符串,并将其转换为此xsd规范的类表示形式。是否有可能自动执行此操作?我通过使用xsd.exe手动完成了此操作。如果xsd的所有者组织改变了xsd规范,我必须测试是否有新的规范,并且如果存在,我必须构建此xsd的新类表示形式?有可能做我想做的事吗?我怎么知道它是否是xsd的一个重大变化,它也会影响我的代码的其他部分,而不仅仅是xsd的类表示?

坦克很多为您的答复!所以如果我理解你是正确的,那么你说的是没有一个好的自动化这个功能的解决方案,因为如果我最有可能(在某些情况下)更改xsd必须手动更改我的代码?所以我必须在我的应用程序或中间服务中选择?但是在Web服务中提供xsd的目的是什么?我可以使用什么Web服务?我只是想知道,也许很明显,但我对web服务很陌生,并且渴望了解更多信息。

更新:

谢谢!但是你能解释一点吗?我必须做的是:我使用一个Web服务,其中一个属性是一个字符串。该字符串是CDATA块内的XML。提供Web服务的组织不会削减CDATA块内的xml,而是将其转发给将使用xml数据的另一个组织。使用xml数据的组织指定了我必须遵循的xsd schem来生成我的xml正确。这是我可以从另一个Web服务获得的xsd模式。我真的不明白我能从web服务中使用这个xsd文件做什么。我能做些什么,以及我为什么要从Web服务下载它,当我无法自动使用它?因为我必须在xsd更改时手动执行更改,所以我可以轻松地从组织的主页下载xsd模式,并使用xsd.exe创建新类。我知道有一些我不明白的地方:o),你能否澄清?

+0

架构在那里,以便您知道服务器的接口。这就像提供商和消费者之间的合同。这个契约(接口和描述它的xsd)应该是稳定的,并且该服务的提供者不应该经常改变它。专业服务提供者将采取必要的努力保持接口向后兼容以防更改。这说什么都不能阻止他们改变它。 – Mehran

回答

0

您使用的是什么visual studio版本?通常,您可以单击项目的引用并添加Web服务。在这种情况下,Visual Studio会自动创建使用该服务所需的对象。您可以随时通过右键单击参考来更新它。

但是,如果它很可能经常改变,一种解决方案是实现一个适配器类。使用创建一个提供相同功能并调用实际Web服务的接口。在您的应用程序中,您只使用代理类而不使用Web服务。稍后,当Web服务接口发生变化时,您只需更改此中间类的内部。

更新:

可以使用this tool创建你的代码的对象模型。然后你可以compile your new object model并在你的应用程序中使用它。你想要做什么和底线是多少复杂的;当对象模型改变时,你的代码将失败。绝对没有办法想象接口如何改变,所以你可以自动做所有事情,如果函数的名称发生变化,就没有任何事情要做。

但是,您的情况的答案是间接的。如果您无法保证外部服务的稳定性。为什么不创建一个称为实际的中间服务?这种方式将来你不需要碰你的应用程序。您只需修改中间服务,同时保持界面兼容。

+0

我必须发表评论作为一个新问题。 – Liss