正 文

在数据架构规划前进行XML消息的设计


www.7dspace.com  更新日期:2006-2-1 8:40:49  七度空间


接口的实现

你可以使用Microsoft® .NET Framework SDK中的wsdl.exe工具来实现一个Web服务的接口。这一命令行工具可以对WSDL文件进行操作,生成Web服务的stub类(实现了给定接口的类)或代理类(客户端使用的类)。

例如,想要生成天气服务接口的stub类,你可以运行wsdl.exe,后面加/server开关,传递给它接口的WSDL地址,如下面这样:

C:\> wsdl.exe /server /o:WeatherStub.cs
http://localhost/MSDNMag/weatherinterface.wsdl
Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 1.0.3705.0]
Copyright (C) Microsoft Corporation 1998-2001. All rights reserved.

Writing file 'WeatherStub.cs'.

默认的,wsdl.exe会生成C#代码,如果你可以使用/language开关来选择生成Visual Basic® .NET或JavaScript语言。在这个例子中,生成的WeatherStub.cs文件包含一个抽象的WeatherInterface类来实现天气的接口。这个类包含一个GetWeather方法,它可以接受一个字符串参数,然后返回一个CurrentWeather的实例。 CurrentWeather类是根据在XML架构中的CurrentWeather类型而生成的。

开始实现服务代码的时候,把WeatherInterface类加入到你的工程中,创建一个新的Web服务,然后把这个Web服务改成从WeatherInterface抽象类继承,然后你就可以重写基类的GetWeather方法,实现你的业务逻辑,就像示例7那样。为了通过SOAP展现这个GetWeather方法,你需要加入一个WebMethod属性,来明确这个GetWeather方法就是较早前在 WeatherInterface.wsdl定义的那个GetWeather操作的具体实现。你还需要在返回的信息中加入一个Xml元素,添加一个 SoapDocumentMethod属性,并且把它的ParameterStyle属性设置成为SoapParameterStyle.Bare。(请参见示例7

如果你使用Visual Basic .NET开发,你不用手动的添加这些属性,当你从overrides菜单中选择GetWeather 方法时,Visual Studio就会自动地把它们添加在你的代码里。

如果你编写了Web服务,并且找到那个自动生成的WSDL文件,你会发现里面包含了很多的信息,这确实是个麻烦。首先,WSDL文件里面包含完整的WeatherInterface,其次,文件还包含了支持HTTP GET和HTTP POST协议的另外两个接口。

包含有完整的接口会影响单一接口多次实现的目标。所以你首先要从服务的WSDL文件中删除那些接口的内容,然后确保它指向你先前创建的 WeatherInterface.wsdl文件。想达到这一目的,你需要给Web服务本身增加一个WebServiceBinding属性,指出服务实现的WSDL绑定(WeatherInterface绑定)的名称,以及定义绑定的WSDL文件的地址。你还需要设定每个Web方法的 SoapDocumentMethod属性的绑定属性,指出这些Web方法在绑定中定义的具体操作。示例8展示了经过这些修改的Web服务。

最后,我建议你关闭服务的WSDL文件中绑定的HTTP GET和HTTP POST。如果是为某些特定的应用程序关闭这些协议,你只要编辑应用的Web.config文件,在system.web节中增加webServices节即可,如下所示:

<webServices>
     <protocols>
          <remove name="HttpGet"/>
          <remove name="HttpPost"/>
      </protocols>
</webServices>

你也可以通过编辑machine.config文件来对整个计算机关闭以上的协议,从协议列表中删除HttpGet和HttpPost即可。

现在,当你创建了Web服务并且查看其WSDL文件时,你得到了一个简洁的文件,仅仅引入了WeatherInterface.wsdl文件,并且添加了服务定义(参见示例9),你可以把服务定义也看成是WeatherInterface.wsdl中定义接口的特殊实现。

对界面编程

开发客户端程序来实现天气接口,你可以使用wsdl.exe,或者是在Visual Studio里添加Web引用来从接口生成代理类。注意,当你生成这个类时,你需要指出WeatherInterface.wsdl,因为里面包含着接口信息,特别当类中没有实现这些接口的服务的地址时。因此,客户端必须在设计时和运行时都设置这一地址。避免在客户端代码中写死这个地址,你最好把它放置在你客户端的配置文件中,在运行时动态读取就可以了。以下就是WeatherInterface的客户端代码:

Private Sub btnWeather_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnWeather.Click
    Dim ws As New localhost.WeatherInterface()
    ws.Url = System.Configuration. _
            ConfigurationSettings.AppSettings("ServiceUrl")
    Dim cw As localhost.CurrentWeather = _
            ws.GetWeather("20171")
End Sub

总结

Web 服务是利用XML消息来传递数据的技术,所以编写Web服务的时候尤其要精心的用XML架构和WSDL来设计消息的结构。当你从设计消息结构开始,而不是从编写方法开始的时候,你的Web服务需要接收和返回何种类型的数据就变得比较清晰了。使用XSD和WSDL来设计消息结构,你可以创建一个标准的接口定义,让Web服务的开发者去实现,同时客户端的开发者也可以参照其来进行编程。下次你再开发Web服务的时候,请先用Visual Studio XML架构设计器来设计消息的结构吧。

3页,页码:[1] [2] [3] 

上一篇:用VC实现PC并行端口数字信息的输入/输出
下一篇:使用.NET Framework从VB6中访问事件日志
标题:在数据架构规划前进行XML消息的设计 作者:Yasser Shohoud 来源:MSDN
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐