在前面的ajax学习中,异步交互的级联动态下拉DropDownList效果就是通过webService的使用实现的。但其web服务的引用是在前台页面中直接通过ajax服务器端控件的属性配置调用的,算是比较“非正规”的引用方法。
1、创建一个非常简单的webService文件,通过解决方案添加新项-web服务(后缀名为asmx),命名为webService。
代码如下:
- [WebMethod]
- public String Test()
- {
- return "Test Successfully !";
- }
默认的其他代码最好不用改动。
2、使用web服务。有两种方法实现。第一,使用WSDL.exe命令行工具。在命令行上使用wsdl.exe时,它会根据web服务的wsdl描述生成一个包含代理类的.cs文件。使用web服务的url来指定该文件,例如:
在使用这个代理类时,只需要把生成的.cs文件添加到项目中,使用下面的代码就可以了:
- webService myService =new webService();//webService即为我们新建的web服务文件名称
- String result=myService.Test();
默认状态下,生成的类将放在根命名空间中,因此不需要使用using语句,但是,可以使用wsdl.exe命令行选项/n:<namespace>指定一个不同的命名空间。
此方法的不足:如果服务正处于开发或处于连续变动中,比较费事。
第二个方法,也是比较好的常用的方法(详见4)。先做第3步吧。
3、新建一个aspx页test.aspx,页面代码如下:
- <form id="form1" runat="server">
- <div>
- <asp:Label runat="server" ID="resultLable"></asp:Label>
- <br />
- <asp:Button runat="server" ID="triggerButton" Text="Invoke CanWeFixIt()" OnClick="triggerButton_Click" />
- </div>
- </form>
4、首先需要在项目中添加对web服务的引用。方法是:在项目解决方案中选择“添加web引用”,在弹出的对话框中直接键入web服务文件webService.asmx的URL,或者在“本地机器上的web服务”自动查找它,接着单击“添加引用”。当应先把web引用的默认内容从localhost改为你自己定义的名称,如myWebService(这里就是后面要用到的引用命名空间名称)。在解决方案资源管理器中显示这个文件夹时可以看到webService.disco、webService.discomap和webService1.wsdl文件。
5、在test.aspx页面后台中添加引用
using myWebService;/也可以不添加,使用web服务时使用空间路径全名
6、用下面的代码把事件处理程序添加个窗体上的按钮:
- protected void triggerButton_Click(object sender, EventArgs e)
- {
- WebService myService = new WebService();
- resultLable.Text = myService.Test();
- }
到此,一个简单的web服务例子已完成。运行应用程序,单击按钮,将在浏览器中显示Test()的执行结果。