本文从创建Web服务、在Windows Forms 中调用Web服务、异步调用服务等方面介绍了建立ASP.NET Web 服务的步骤。
树立ASP.NET Web服务过程(1):创立Web服务
新建-项目-Web-Asp.net服务应用程序,把HelloWorld给删去,ReverseString办法,如下:
代码:
- usingSystem;
- usingSystem.Collections;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Linq;
- usingSystem.Web;
- usingSystem.Web.Services;
- usingSystem.Web.Services.Protocols;
- usingSystem.Xml.Linq;
- namespaceWebService2
- {
- ///<summary>
- ///Service1的摘要阐明
- ///</summary>
- [WebService(Namespace="http://tempuri.org/")]
- [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
- [ToolboxItem(false)]
- //若要答应运用ASP.NETAJAX从脚本中调用此Web服务,请撤销对下行的注释。
- //[System.Web.Script.Services.ScriptService]
- publicclassService1:System.Web.Services.WebService
- {
- [WebMethod]
- publicstringReverseString(stringmessage)//新建这个办法
- {
- char[]arr=message.ToCharArray();
- Array.Reverse(arr);
- message=newstring(arr);
- returnmessage;
- }
- }
- }
测验服务:
点击办法,输入abcde,点调用
测验成果:
回来xml,edcba 测验正确。
树立ASP.NET Web服务过程(2):在Windows Forms 中调用Web服务
新建Windows Forms 工程,留意上面服务不要关,爽性双开VS吧,以免出问题。项目-增加服务引证,地址中输入Web服务的地址,上例:http://localhost:1241/Service1.asmx,假如Web服务现已发布,请填写发布的地址。
找到服务后确认:
在Form上参加两个TextBox,一个Button,双击Button,编写事情。
代码:
- usingSystem;
- usingSystem.Collections.Generic;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Drawing;
- usingSystem.Linq;
- usingSystem.Text;
- usingSystem.Windows.Forms;
- namespaceWindowsFormsApplication9
- {
- publicpartialclassForm1:Form
- {
- publicForm1()
- {
- InitializeComponent();
- }
- privatevoidbutton1_Click(objectsender,EventArgse)
- {
- ServiceReference1.Service1SoapClientws=newServiceReference1.Service1SoapClient();
- textBox2.Text=ws.ReverseString(textBox1.Text);
- }
- }
- }
运转成果:
树立ASP.NET Web服务过程(3):异步调用服务
因为Web服务在网络上运用,所以假如网速欠好,或服务器端忙很长时刻没有相应的话,那么履行调用的程序将堵塞,以致界面卡死,不能相应。如安在调用服务的时分不堵塞呢?便是选用异步调用服务的办法。服务端不必修正,只修正客户端就能够了。
首要,在解决方案管理器的Service Reference中,右键该引证,点装备服务引证。如下画面:
选中【生成异步操作】,确认。
代码:
- usingSystem;
- usingSystem.Collections.Generic;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Drawing;
- usingSystem.Linq;
- usingSystem.Text;
- usingSystem.Windows.Forms;
- namespaceWindowsFormsApplication9
- {
- publicpartialclassForm1:Form
- {
- publicForm1()
- {
- InitializeComponent();
- }
- privatevoidbutton1_Click(objectsender,EventArgse)
- {
- //ServiceReference1.Service1SoapClientws=newServiceReference1.Service1SoapClient();
- //textBox2.Text=ws.ReverseString(textBox1.Text);
- ServiceReference1.Service1SoapClientclient=newServiceReference1.Service1SoapClient();
- //client.ReverseStringCompleted+=newEventHandler<ServiceReference1.ReverseStringCompletedEventArgs>(client_ReverseStringCompleted);
- client.ReverseStringCompleted+=client_ReverseStringCompleted;//简易写法
- client.ReverseStringAsync(textBox1.Text);
- }
- privatevoidclient_ReverseStringCompleted(objectsender,ServiceReference1.ReverseStringCompletedEventArgse)
- {
- textBox2.Text=e.Result;
- }
- }
- }
为了让测验愈加传神,能够在服务器端,参加演示,模仿服务器或网络的延时。
服务端代码:
- usingSystem;
- usingSystem.Collections;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Linq;
- usingSystem.Web;
- usingSystem.Web.Services;
- usingSystem.Web.Services.Protocols;
- usingSystem.Xml.Linq;
- namespaceWebService2
- {
- ///<summary>
- ///Service1的摘要阐明
- ///</summary>
- [WebService(Namespace="http://tempuri.org/")]
- [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
- [ToolboxItem(false)]
- //若要答应运用ASP.NETAJAX从脚本中调用此Web服务,请撤销对下行的注释。
- //[System.Web.Script.Services.ScriptService]
- publicclassService1:System.Web.Services.WebService
- {
- [WebMethod]
- publicstringReverseString(stringmessage)//新建这个办法
- {
- char[]arr=message.ToCharArray();
- Array.Reverse(arr);
- message=newstring(arr);
- System.Threading.Thread.Sleep(5000);//为了证明异步的作用特增加延时
- returnmessage;
- }
- }
- }
运转成果:在等候服务器回来的时刻内,界面没有卡死,证明异步调用成功。
树立ASP.NET Web服务过程(4):ASP.NET客户程序
上面是在Windows Forms 里完结的Web服务调用,现在用ASP.NET来调用相同的服务。
根本与Windows Forms相似,首要增加Web服务引证,然后增加代码如下:
- usingSystem;
- usingSystem.Configuration;
- usingSystem.Data;
- usingSystem.Linq;
- usingSystem.Web;
- usingSystem.Web.Security;
- usingSystem.Web.UI;
- usingSystem.Web.UI.HtmlControls;
- usingSystem.Web.UI.WebControls;
- usingSystem.Web.UI.WebControls.WebParts;
- usingSystem.Xml.Linq;
- publicpartialclass_Default:System.Web.UI.Page
- {
- protectedvoidPage_Load(objectsender,EventArgse)
- {
- }
- protectedvoidButton1_Click(objectsender,EventArgse)
- {
- ServiceReference1.Service1SoapClientclient=newServiceReference1.Service1SoapClient();
- TextBox2.Text=client.ReverseString(TextBox1.Text);
- }
- }
运转成果:
树立ASP.NET Web服务过程(5):类的传递
上面的比如是简单是数据类型,现在试一下传递一个自定义类。
服务器端代码:
- usingSystem;
- usingSystem.Collections;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Linq;
- usingSystem.Web;
- usingSystem.Web.Services;
- usingSystem.Web.Services.Protocols;
- usingSystem.Xml.Linq;
- namespaceWebService2
- {
- publicenumTemperatureType
- {
- Fahrenheit,
- Celsius
- }
- publicenumTemparatureCondition
- {
- Rainy,
- Sunny,
- Cloudy,
- Thunderstorm
- }
- publicclassGetWeatherRequest
- {
- publicstringCity;
- publicTemperatureTypeTemperatureType;
- }
- publicclassGetWeatherResponse
- {
- publicTemparatureConditionCondition;
- publicintTemperature;
- }
- ///<summary>
- ///Service1的摘要阐明
- ///</summary>
- [WebService(Namespace="http://tempuri.org/")]
- [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
- [ToolboxItem(false)]
- //若要答应运用ASP.NETAJAX从脚本中调用此Web服务,请撤销对下行的注释。
- //[System.Web.Script.Services.ScriptService]
- publicclassService1:System.Web.Services.WebService
- {
- [WebMethod]
- publicstringReverseString(stringmessage)//新建这个办法
- {
- char[]arr=message.ToCharArray();
- Array.Reverse(arr);
- message=newstring(arr);
- System.Threading.Thread.Sleep(5000);//为了证明异步的作用特增加延时
- returnmessage;
- }
- [WebMethod]
- publicGetWeatherResponseGetWeather(GetWeatherRequestreq)
- {
- GetWeatherResponseresp=newGetWeatherResponse();
- Randomr=newRandom();
- intcelsius=r.Next(-20,50);