前两天,工作中遇到需要开发一个简单的webservice

网上搜索了不少文章,可是讲的很全面的还真是不多。特别是远程调用的例子,好难找。

所以自己搞定了之后,决定写一篇博客,从开发,配置到远程调用,一步步写个例子,供参考。

 

1,开发。

 

打开Visual studio.net 2008, 新建项目,选择ASP.NET WebService,给它起名WebServiceSample

系统自动生成一个helloworld

        [WebMethod]
        
public string HelloWorld()
        {
            
return "Hello World";
        }

前面的标示“[WebMethod]”即表示这个方法可以远程调用。

只有public 的函数可以标示为“[WebMethod]”.

下面我们自己写一个简单的加法函数:


        [WebMethod]
        
public int MyAdd(int i, int j)
        {
            
return i + j;
        }

现在按“调试”按钮,出现一个对话框,直接按enter,出现一张网页,上方有两个链接,分别是HelloWorld和MyAdd

点选MyAdd进入,可以看到一个调试器,在其中输入i和j的参数,就可以调试MyAdd这个函数啦。

要留意的是,这边调试成功的话,在IIS中调试还是有可能会因为各种原因失败,因为本机调试和远程调试,许多方面是不同的,比如对本地文件的访问权限等。

远程调试的时候,WebService和一般的ASP.Net网站一样,用户只能访问wwwroot下面的文件哦。

这张页面下方,有远程调用本WebService的三种方法和各自的返回语句。

这三种方法调用的时候只是将发送和接受的内容加以改变而已。微软推荐的方法是上面两种。 

至此,一个最简单的WebService开发完成

 

2,配置

最最简单的配置方法:

把开发目录下的Web.Config,Service1.asmx,bin目录(只需要copy下面的WebServiceSample.dll)copy到C:\INetPub\WWWRoot\文件夹下。

如果本机的IIS服务没有安装或者启用的话,在控制面板里安装或者启用IIS服务。

如果在浏览器中输入http://localhost/service1.asmx会出现刚才调试的时候出现的页面的话,就说明配置成功啦。

 

3,远程调用

本机调用当然不算远程啦。但是我这边远程调用是为了区别直接调用dll说的,使用http方式的调用。其实使用http方式调用,不管是在本机上访问localhost还是在别的机器上访问本机的ip地址,都是一样的。

在调试页面,有三种调用方法的示例,下面我门以第三种方法为例子展示一下调用代码。

 

发送:
POST 
/Service1.asmx/MyAdd HTTP/1.1
Host: localhost
Content
-Type: application/x-www-form-urlencoded
Content
-Length: length

i
=string&j=string
接收:
HTTP
/1.1 200 OK
Content
-Type: text/xml; charset=utf-8
Content
-Length: length

<?xml version="1.0" encoding="utf-8"?>
<int xmlns="http://tempuri.org/">int</int>

 

代码如下:

 


        public static int CallMyAdd(int i, int j)
        {
            
try
            {
                String uri 
= "http://localhost/Service1.asmx/MyAdd";
                String content 
= "i=" + i.ToString() + "&j=" + j.ToString(); 
                HttpWebRequest request 
= (HttpWebRequest)WebRequest.Create(uri);
                request.ContentType 
= "application/x-www-form-urlencoded";
                
byte[] contentbyte = Encoding.UTF8.GetBytes(content);
                request.ContentLength 
= contentbyte.Length;
                request.Method 
= "POST";
                Stream contentStream 
= request.GetRequestStream();
                contentStream.Write(contentbyte, 
0, contentbyte.Length);
                request.ProtocolVersion 
= HttpVersion.Version11;
                HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
                
string retString = response.StatusDescription;
                
if(retString != "OK")
                {
                    
throw new Exception(retString);
                }
                Stream responseStream 
= response.GetResponseStream();
                StreamReader sr 
= new StreamReader(responseStream);
                retString 
= sr.ReadToEnd();
                XmlDataDocument xdd 
= new XmlDataDocument();
                xdd.LoadXml(retString);                
                
int result = int.Parse(xdd.ChildNodes[2].InnerText);
                
return result;
            }
            
catch(Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            
        }
 
 

要用另外两种方法调用的话,要自己生成XML文本,还有要修改Content-Type的值。

  wsdl 文件的生成 http://localhost:3310/WebSite1/Service.asmx?wsdl 

 

 

为了将WSDL file转化为源代码文件,我们将利用一个称为wsdl.exe控制台应用程序来产生代码。此工具将解析WSDL文件和其他一些附加文件来产生单一的源代码文件,源代码文件中包含执行Web service所需的所有类、方法、类型。Wsdl.exe将随着Visual Studio .NET 2003 (和.NET SDK)一起被安装。运用此工具,你首先需要打开Visual Studio .NET 2003命令提示控制台,默认情况下,此项位于开始菜单>>程序>> Microsoft Visual Studio .NET 2003的Visual Studio .NET工具。一旦打开,你便可以在以前保存的WSDL文件中操纵命令提示。

执行下列命令可以使得wsdl.exe产生客户端代理类。

wsdl /out:temp.cs http://localhost/VvopAmp/VvopAmpSrv.php?wsdl

客户端代理类保存在 temp.cs 文件中。

 

 

posted on 2010-03-06 23:42  醉意人间  阅读(672)  评论(0编辑  收藏  举报