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 }
可以运行该网站了。