1.创建工程
文件-> 新建->网站 如下图。
工程建好后,会自动添加如下代码:
1 using System; 2 using System.Linq; 3 using System.Web; 4 using System.Web.Services; 5 using System.Web.Services.Protocols; 6 using System.Xml.Linq; 7 8 [WebService(Namespace = "http://tempuri.org/")] 9 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 10 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 11 // [System.Web.Script.Services.ScriptService] 12 public class Service : System.Web.Services.WebService 13 { 14 public Service () { 15 16 //如果使用设计的组件,请取消注释以下行 17 //InitializeComponent(); 18 } 19 20 [WebMethod] 21 public string HelloWorld() { 22 return "Hello World"; 23 } 24 25 }
可以运行一遍看看效果。
2.添加代码增强webservice的功能
增加加减乘除的功能。
代码如下:
1 using System; 2 using System.Linq; 3 using System.Web; 4 using System.Web.Services; 5 using System.Web.Services.Protocols; 6 using System.Xml.Linq; 7 8 [WebService(Namespace = "http://tempuri.org/")] 9 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 10 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 11 // [System.Web.Script.Services.ScriptService] 12 public class Service : System.Web.Services.WebService 13 { 14 public Service () { 15 16 //如果使用设计的组件,请取消注释以下行 17 //InitializeComponent(); 18 } 19 20 21 //[WebMethod] 22 //public string HelloWorld() 23 //{ 24 // return "Hello World"; 25 //} 26 27 [WebMethod(Description = "求和的方法")] 28 public double addition(double i, double j) 29 { 30 return i + j; 31 } 32 33 [WebMethod(Description = "求差的方法")] 34 public double subtract(double i, double j) 35 { 36 return i - j; 37 } 38 39 [WebMethod(Description = "求积的方法")] 40 public double mutiplication(double i, double j) 41 { 42 return i * j; 43 } 44 45 [WebMethod(Description = "求商的方法")] 46 public double division(double i, double j) 47 { 48 if(j!=0) 49 return i/j; 50 else 51 return 0; 52 } 53 }
运行效果如下:
在这个URL后面添加?wsdl就可以获取该webservice的wsdl。
3.使用生成的webservice
VS2008-> 文件->新建->网站->ASP.NET网站->website2
接下来添加刚才生成的webservice应用:
website2邮右键->添加web引用
URL是运行website1之后的网址(在使用刚才的webservice时,需要先把那个服务运行起来才行)
URL写好后,点击前往->添加应用->ok。
引入的web引用中有一个wsdl文件(此处对wsdl的提示与本文无关系)。wsdl文件如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 3 <wsdl:types> 4 <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> 5 <s:element name="addition"> 6 <s:complexType> 7 <s:sequence> 8 <s:element minOccurs="1" maxOccurs="1" name="i" type="s:double" /> 9 <s:element minOccurs="1" maxOccurs="1" name="j" type="s:double" /> 10 </s:sequence> 11 </s:complexType> 12 </s:element> 13 <s:element name="additionResponse"> 14 <s:complexType> 15 <s:sequence> 16 <s:element minOccurs="1" maxOccurs="1" name="additionResult" type="s:double" /> 17 </s:sequence> 18 </s:complexType> 19 </s:element> 20 <s:element name="subtract"> 21 <s:complexType> 22 <s:sequence> 23 <s:element minOccurs="1" maxOccurs="1" name="i" type="s:double" /> 24 <s:element minOccurs="1" maxOccurs="1" name="j" type="s:double" /> 25 </s:sequence> 26 </s:complexType> 27 </s:element> 28 <s:element name="subtractResponse"> 29 <s:complexType> 30 <s:sequence> 31 <s:element minOccurs="1" maxOccurs="1" name="subtractResult" type="s:double" /> 32 </s:sequence> 33 </s:complexType> 34 </s:element> 35 <s:element name="mutiplication"> 36 <s:complexType> 37 <s:sequence> 38 <s:element minOccurs="1" maxOccurs="1" name="i" type="s:double" /> 39 <s:element minOccurs="1" maxOccurs="1" name="j" type="s:double" /> 40 </s:sequence> 41 </s:complexType> 42 </s:element> 43 <s:element name="mutiplicationResponse"> 44 <s:complexType> 45 <s:sequence> 46 <s:element minOccurs="1" maxOccurs="1" name="mutiplicationResult" type="s:double" /> 47 </s:sequence> 48 </s:complexType> 49 </s:element> 50 <s:element name="division"> 51 <s:complexType> 52 <s:sequence> 53 <s:element minOccurs="1" maxOccurs="1" name="i" type="s:double" /> 54 <s:element minOccurs="1" maxOccurs="1" name="j" type="s:double" /> 55 </s:sequence> 56 </s:complexType> 57 </s:element> 58 <s:element name="divisionResponse"> 59 <s:complexType> 60 <s:sequence> 61 <s:element minOccurs="1" maxOccurs="1" name="divisionResult" type="s:double" /> 62 </s:sequence> 63 </s:complexType> 64 </s:element> 65 </s:schema> 66 </wsdl:types> 67 <wsdl:message name="additionSoapIn"> 68 <wsdl:part name="parameters" element="tns:addition" /> 69 </wsdl:message> 70 <wsdl:message name="additionSoapOut"> 71 <wsdl:part name="parameters" element="tns:additionResponse" /> 72 </wsdl:message> 73 <wsdl:message name="subtractSoapIn"> 74 <wsdl:part name="parameters" element="tns:subtract" /> 75 </wsdl:message> 76 <wsdl:message name="subtractSoapOut"> 77 <wsdl:part name="parameters" element="tns:subtractResponse" /> 78 </wsdl:message> 79 <wsdl:message name="mutiplicationSoapIn"> 80 <wsdl:part name="parameters" element="tns:mutiplication" /> 81 </wsdl:message> 82 <wsdl:message name="mutiplicationSoapOut"> 83 <wsdl:part name="parameters" element="tns:mutiplicationResponse" /> 84 </wsdl:message> 85 <wsdl:message name="divisionSoapIn"> 86 <wsdl:part name="parameters" element="tns:division" /> 87 </wsdl:message> 88 <wsdl:message name="divisionSoapOut"> 89 <wsdl:part name="parameters" element="tns:divisionResponse" /> 90 </wsdl:message> 91 <wsdl:portType name="ServiceSoap"> 92 <wsdl:operation name="addition"> 93 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">求和的方法</wsdl:documentation> 94 <wsdl:input message="tns:additionSoapIn" /> 95 <wsdl:output message="tns:additionSoapOut" /> 96 </wsdl:operation> 97 <wsdl:operation name="subtract"> 98 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">求插的方法</wsdl:documentation> 99 <wsdl:input message="tns:subtractSoapIn" /> 100 <wsdl:output message="tns:subtractSoapOut" /> 101 </wsdl:operation> 102 <wsdl:operation name="mutiplication"> 103 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">求积的方法</wsdl:documentation> 104 <wsdl:input message="tns:mutiplicationSoapIn" /> 105 <wsdl:output message="tns:mutiplicationSoapOut" /> 106 </wsdl:operation> 107 <wsdl:operation name="division"> 108 <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">求商的方法</wsdl:documentation> 109 <wsdl:input message="tns:divisionSoapIn" /> 110 <wsdl:output message="tns:divisionSoapOut" /> 111 </wsdl:operation> 112 </wsdl:portType> 113 <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap"> 114 <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 115 <wsdl:operation name="addition"> 116 <soap:operation soapAction="http://tempuri.org/addition" style="document" /> 117 <wsdl:input> 118 <soap:body use="literal" /> 119 </wsdl:input> 120 <wsdl:output> 121 <soap:body use="literal" /> 122 </wsdl:output> 123 </wsdl:operation> 124 <wsdl:operation name="subtract"> 125 <soap:operation soapAction="http://tempuri.org/subtract" style="document" /> 126 <wsdl:input> 127 <soap:body use="literal" /> 128 </wsdl:input> 129 <wsdl:output> 130 <soap:body use="literal" /> 131 </wsdl:output> 132 </wsdl:operation> 133 <wsdl:operation name="mutiplication"> 134 <soap:operation soapAction="http://tempuri.org/mutiplication" style="document" /> 135 <wsdl:input> 136 <soap:body use="literal" /> 137 </wsdl:input> 138 <wsdl:output> 139 <soap:body use="literal" /> 140 </wsdl:output> 141 </wsdl:operation> 142 <wsdl:operation name="division"> 143 <soap:operation soapAction="http://tempuri.org/division" style="document" /> 144 <wsdl:input> 145 <soap:body use="literal" /> 146 </wsdl:input> 147 <wsdl:output> 148 <soap:body use="literal" /> 149 </wsdl:output> 150 </wsdl:operation> 151 </wsdl:binding> 152 <wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap"> 153 <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 154 <wsdl:operation name="addition"> 155 <soap12:operation soapAction="http://tempuri.org/addition" style="document" /> 156 <wsdl:input> 157 <soap12:body use="literal" /> 158 </wsdl:input> 159 <wsdl:output> 160 <soap12:body use="literal" /> 161 </wsdl:output> 162 </wsdl:operation> 163 <wsdl:operation name="subtract"> 164 <soap12:operation soapAction="http://tempuri.org/subtract" style="document" /> 165 <wsdl:input> 166 <soap12:body use="literal" /> 167 </wsdl:input> 168 <wsdl:output> 169 <soap12:body use="literal" /> 170 </wsdl:output> 171 </wsdl:operation> 172 <wsdl:operation name="mutiplication"> 173 <soap12:operation soapAction="http://tempuri.org/mutiplication" style="document" /> 174 <wsdl:input> 175 <soap12:body use="literal" /> 176 </wsdl:input> 177 <wsdl:output> 178 <soap12:body use="literal" /> 179 </wsdl:output> 180 </wsdl:operation> 181 <wsdl:operation name="division"> 182 <soap12:operation soapAction="http://tempuri.org/division" style="document" /> 183 <wsdl:input> 184 <soap12:body use="literal" /> 185 </wsdl:input> 186 <wsdl:output> 187 <soap12:body use="literal" /> 188 </wsdl:output> 189 </wsdl:operation> 190 </wsdl:binding> 191 <wsdl:service name="Service"> 192 <wsdl:port name="ServiceSoap" binding="tns:ServiceSoap"> 193 <soap:address location="http://localhost:12989/WebSite1/Service.asmx" /> 194 </wsdl:port> 195 <wsdl:port name="ServiceSoap12" binding="tns:ServiceSoap12"> 196 <soap12:address location="http://localhost:12989/WebSite1/Service.asmx" /> 197 </wsdl:port> 198 </wsdl:service> 199 </wsdl:definitions>
我们在这就练习调用webservice的四个方法,做一个简单的调用的例子,先在网站的前台添加几个控件(Default.aspx),代码如下:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 5 <html xmlns="http://www.w3.org/1999/xhtml" > 6 <head id="Head1" runat="server"> 7 <title>Webservice调用实例</title> 8 </head> 9 <body> 10 <form id="form1" runat="server"> 11 <div> 12 <asp:TextBox ID="Num1" runat="server"></asp:TextBox> 13 <select id="selectOper" runat = "server"> 14 <option>+</option> 15 <option>-</option> 16 <option>*</option> 17 <option>/</option> 18 </select> 19 <asp:TextBox ID="Num2" runat="server"></asp:TextBox> 20 <span id = E runat = "server"></span> 21 <asp:TextBox ID="Result" runat="server"></asp:TextBox> 22 </div> 23 </form> 24 </body> 25 </html>
到此一个一个简单的WebService的开发和调用就已经完成了,在实际应用中可以根据自己的需要,写一些功能强大的,复杂的WebService,不管多么复杂,整个流程都是这样的。
修改Default.cs
1 using System; 2 using System.Configuration; 3 using System.Data; 4 using System.Linq; 5 using System.Web; 6 using System.Web.Security; 7 using System.Web.UI; 8 using System.Web.UI.HtmlControls; 9 using System.Web.UI.WebControls; 10 using System.Web.UI.WebControls.WebParts; 11 using System.Xml.Linq; 12 13 public partial class _Default : System.Web.UI.Page 14 { 15 protected void Page_Load(object sender, EventArgs e) 16 { 17 //在页面加载的时候动态创建一个按钮,在它的事件里调用Webservice 18 Button btn = new Button(); 19 btn.Width = 20; 20 btn.Text = " = "; 21 btn.Click += new EventHandler(btn_Click); 22 E.Controls.Add(btn); 23 } 24 /// <summary> 25 /// 定义动态创建Button的Click事件,在这个事件中调用Webservice 26 /// </summary> 27 /// <param name="sender"></param> 28 /// <param name="e"></param> 29 void btn_Click(object sender, EventArgs e) 30 { 31 if (Num1.Text != "" && Num2.Text != "") 32 { 33 //实例化引用的webservice对象 34 localhost.Service WebserviceInstance = new localhost.Service(); 35 int Oper = selectOper.SelectedIndex; 36 switch (Oper) 37 { 38 //通过实例化的webservice对象来调用Webservice暴露的方法 39 case 0: 40 Result.Text = WebserviceInstance.addition(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString(); 41 break; 42 case 1: 43 Result.Text = WebserviceInstance.subtract(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString(); 44 break; 45 case 2: 46 Result.Text = WebserviceInstance.mutiplication(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString(); 47 break; 48 case 3: 49 Result.Text = WebserviceInstance.division(double.Parse(Num1.Text), double.Parse(Num2.Text)).ToString(); 50 break; 51 } 52 } 53 } 54 }
可以运行该网站了。