Javascript+xmlhttp调用Webservice。

1.  创建webservice,为了免于落俗我稍稍修改了创建webserice的默认webmethod。^_^
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service () {

        //Uncomment the following line if using designed components
        //InitializeComponent();
    }

    [WebMethod]
    public string SayHelloTo(string Name) {
        return "Hello "+Name;
    }
   
}
还是俗了点。:)

2. js调用webservice+xmlhttp的实现部分。

<html>
<title>
Call webservice with javascript and xmlhttp.
</title>
<body>
<script language="javascript">

//Test function with get method.
function RequestByGet(data){

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
//Webservice location.
var URL="http://localhost:1323/WebSite6/Service.asmx/SayHelloTo?Name=Zach";
xmlhttp.Open("GET",URL, false);
xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=utf-8");
xmlhttp.SetRequestHeader ("SOAPAction","http://tempuri.org/SayHelloTo");
xmlhttp.Send(data);
var result = xmlhttp.status;
//OK
if(result==200) {
document.write(xmlhttp.responseText);
}
xmlhttp = null;
}

//Test function with post method
function RequestByPost(value)
{
var data;
data = '<?xml version="1.0" encoding="utf-8"?>';
data = data + '<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/">';
data = data + '<soap:Body>';
data = data + '<SayHelloTo xmlns="http://tempuri.org/">';
data = data + '<Name>'+value+'</Name>';
data = data + '</SayHelloTo>';
data = data + '</soap:Body>';
data = data + '</soap:Envelope>';

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
var URL="http://localhost:1323/WebSite6/Service.asmx";
xmlhttp.Open("POST",URL, false);
xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=gb2312");
xmlhttp.SetRequestHeader ("SOAPAction","http://tempuri.org/SayHelloTo");
xmlhttp.Send(data);
document.write( xmlhttp.responseText);

}

</Script>

<input type="button" value="CallWebserviceByGet" onClick="RequestByGet(null)">
<input type="button" value="CallWebserviceByPost" onClick="RequestByPost('Zach')">

</body>
</html>
对于使用post方法需要发送的那堆东东可以在webservice的测试页面中找到,自己拼凑加上对应的参数就可以。

我发现用post方法的时候响应很慢,是因为用Post方法时发送的数据多的原因吗?





posted on 2006-02-18 21:34 zhanqiangz(闲云野鹤) 阅读(6131) 评论(4)  编辑 收藏

评论

#1楼  2007-02-02 17:03 没穿衣服叫禽兽,穿上衣服叫衣冠禽兽 [未注册用户]

用vs2005调用第一种方法失败
调用第二种方法 返回xmlhttp.responseText的内容巨多,还要重新定位   回复  引用    

#2楼  2007-04-29 17:44 Jeffrey Zhao      

JavaScript使用SOAP来调用WEb Service实在是件不讨好的事情啊……   回复  引用  查看    

#3楼  2007-06-09 19:40 colin [未注册用户]

我用了post方法,但是在参数传递中我用了XML
意思是说我把data = data + '<Name>'+value+'</Name>';
中value换成了一个XML内容
var xmlPara = "<strmessage><Touser>colin</Touser><message>hello</message><Fromuser>dolphin</Fromuser></strmessage>"
却不成功,在调试页面,无法调用WebService的函数?怎么解决?   回复  引用    

#4楼  2007-06-10 08:39 zhanqiangz(闲云野鹤) [未注册用户]

@colin
我感觉你的xml文本做为value传的时候需要HtmlEncode,但是我自己没有做尝试,你可以自己亲自尝试一下。   回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-02-18 21:52 编辑过
 
另存  打印
 


<2006年2月>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

导航

统计

公告

如转载本博客的相关资料敬请注明出处.谢谢合作!

与我联系

常用链接

留言簿(6)

我参与的团队

我的标签

随笔分类(51)

随笔档案(49)

文章分类(7)

文章档案(5)

收藏夹(3)

.NET

BizTalk

Design

JavaScript

My Blogs

Power Tools

Process Control

Search Engine

SQL Server

XML

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜