ASP.NET中的WebService
WebService:一个完成客户端与服务器端通信的技术?一个完成将SOAP映射为.NET类的技术?或者更简单的认为是XML文档信息传递的技术?也许在刚接触到这个的时候我们并不知道WebService究竟意味着什么,反正只知道他是通过建立一个ASP.NET Web 服务而产生了一个*.asmx文件,伴随着这个文件的还有一个是与其同名的*.cs文件(VS2005是在AppCode文件夹下面)。
竟然我们不知道WebService有啥作用,就不用管他了,我们现在想用ASP建立一个页面,两个文本框TextBox(一个用来Input,一个用来Output),一个Button,在Input中我们输入一个名字,然后在Output中我们打印出相应的信息,这个很容易,需要一个Web页面,后台的处理代码(简单的功能用JS,复杂的功能放在后台实现),这样很容易就实现了当点击按钮的时候就打印出了信息。这个功能太容易了,但是我们就像将它共享出来,让别人也能使用,现在有个其他的开发商,他习惯开发桌面应用程序,他也想使用别人的共享的函数接口,他希望之前开发WEB的供应商把这个打印信息的功能也让他们使用一下。为了满足这个要求我们有了以下的认识:①省掉Web页面,桌面应用程序可不需要什么结果页面。②应用程序之间的集成,不同系统不同语言下的应用程序使用同一个接口。好了,这个时候我们可能在考虑怎么实现这样的功能,去网上搜索半天感觉WebService可以实现类似的功能,可是我们不知道什么是WebService,于是就看看CSDN或是MSDN上提供的一些案例,看来感觉也没什么太深奥的东西,直接就开始建个项目,开始自己的第一个WebService项目。
VS2005—>创建网站—>ASP.NET Web 服务,在位置处写上http://localhost/webserver,完成创建,看到AppCode下有个Service.cs文件,看到的是一个标注了属性[WebMethod]的一个HelloWorld函数,这个我们先屏蔽掉,然后自己写一个打印信息的方法:
public string PrintName(string name)
{
return "我输入的名字是:" + name;
}
先运行看看,可以看到一个主页面有个PrintName的链接,点击一下,可以看到一个输入框,输入名字,点击Invoke,可以看到XML文档:
现在函数是写好了,那如何让其他引用程序调用呢?记得应用程序中一些封装的方法都是编译成DLL文件然后共享使用,这里也可以试试,可是发现VS05中WebService不能自动生成DLL文件,只好自己编译了。
①打开VS05的命令行,首先需要把.asmx文件映射为.cs文件:
WSDL http://ip/地址//项目名称/*.asmx /n: 命名空间 /out 输入文件名.cs(这里我们用PrintName.cs)
②编译成DLL
csc /t:library /r:system.web.dll /r:system.xml.dll PrintName.cs
经过上面两步,就可以在VS05的VC目录下生成一个PrintName.cs文件和一个PrintName.dll文件,那这样我们就可以在应用程序中调用这个DLL了。
(1)应用程序调用:新建一个应用程序,将PrintName.dll添加到引用中去。运行效果:
private void btnInvoke_Click(object sender, EventArgs e)
{
client = new Service();
string output;
output = client.PrintName(this.textBox2.Text.ToString());
this.textBox1.Text = output;
}
(2)Web程序调用:新建一个网站,也同样添加PrintName.dll,接着新建一个页面,代码和在上面的代码完全一样,效果也是一样的。
对照着程序再去理解WebService就会容易多了。记得在上面提到了SOAP,那SOAP又是什么呢?在运行一开始建立的Web 服务是有没有注意网页中列出的下面一段XML文档
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://localhost/webserver/PrintName"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<PrintName xmlns="http://localhost/webserver/">
<name>string</name> //参数
</PrintName>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<PrintNameResponse xmlns="http://localhost/webserver/">
<PrintNameResult>string</PrintNameResult>
</PrintNameResponse>
</soap:Body>
</soap:Envelope>
上面作为请求,下面作为回答,在请求中可以看到PrintName真是函数的方法名,在回答中对应着PrintNameResult.感觉SOAP应该就是XML文档,他将.cs文件中的标有[WebMethod]属性的方法转变为了XML文档,而在调用中又转换为类操作对象。WebService就是完成SOAP到.NET类之间的映射。
只是简单的根据自己理解的记录了下来,继续学习不断完善!