.net 下用javascript调用webservice

javascript|web

  .net 下用javascript调用webservice的话,要用到webservice behavior。下面以一个例子讲解之,比较简单

1 、首先,要创建一个webservice,比如

<%@ WebService Language="C#" class=MyMath %>
using System;
using System.Web.Services;
public class MyMath {
[WebMethod]
public int add(int a, int b)
{
return a + b;
}
[WebMethod]
public int subtract(int a, int b)
{
return a - b;
}
}

  然后发布,先得到其wsdl。

  2、首先,我们要下载webbehavior.htc这个文件(可以到http://msdn.microsoft.com/downloads/samples/internet/behaviors/library/webservice/default.asp.)
去下载,然后放到你的web当前目录下然后在要调用webserice的页面中,修改如下

<body>
<div id="addservice" style="behavior:url(webservice.htc)"></div>
</body>

  这里我们将div id命名为有意义的名称,并且指定style为 webservice行为。接着,我们要书写javascript来调用webserice了:

  首先,我们在javascript中,调用其wsdladdservice.useService("http://localhost/services/math.asmx?WSDL","MyMath");使用id.useService(WSDLL路径,简单的命名方式);

  我们之前设定的id是addservice,而为了给客户端调用方便,我们这里起了名称,叫MyMath。而为了保证能正确调用webserice,必须在body里的onload事件里,马上加载处理webservice调用的javascript,如下

<script language="JavaScript">
function init()
{
addservice.useService("http://localhost/services/math.asmx?WSDL","MyMath"); }
</script>
<body >
<div id="service" style="behavior:url(webservice.htc)">
</div>
</body>

  在上面,我们通过webservice行为,首先得到了返回webservice的wsdl,接下来我们要进行调用了,调用的格式如下:   iCallID = id.FriendlyName.callService([CallbackHandler,] "MethodName",  Param1, Param2, ...);

  这里id是我们在div里设置的id,而FridndbyName是我们刚才为方面而起的命,这里就是MyMath了,而CallbackHandler是使用回调函数的过程名,如果无设置的话,则默认是使用onresult所调用的方法来进行处理,下文会讲到,而param1,,param2等则是说传入的参数了,如:

<SCRIPT language="JavaScript">
// All these variables must be global,
// because they are used in both init() and onresult().
var iCallID = 0;
var intA = 5;
var intB = 6;
function init()
{
// Establish the friendly name "MyMath" for the WebServiceURL
service.useService("/services/math.asmx?WSDL","MyMath");
// The following method doesn't specify a callback handler, so onWSresult() is used
iCallID = service.MyMath.callService("add", intA, intB);
}
function onWSresult()
{
// if there is an error, and the call came from the call() in init()
if((event.result.error)&&(iCallID==event.result.id))
{
// Pull the error information from the event.result.errorDetail properties
var xfaultcode   = event.result.errorDetail.code;
var xfaultstring = event.result.errorDetail.string;
var xfaultsoap   = event.result.errorDetail.raw;
// Add code to handle specific error codes here
}
// if there was no error, and the call came from the call() in init()
else if((!event.result.error) && (iCallID == event.result.id))
{
// Show the arithmetic!
alert(intA + ' + ' + intB + ' = ' + event.result.value);
}
else
{
alert("Something else fired the event!");
}
}
</SCRIPT>
<body >
<div id="service" style="behavior:url(webservice.htc)" onresult="onWSresult()">
</div>
</body>

  注意,用onresult方式返回的话,要在div部分的onresult中指定处理的方法,这里是用onWsresult()方法,其中根据返回的信息来判断是否出错,出错的话则显示。

  如果用回调的话,则如下处理

<SCRIPT language="JavaScript">
// All these variables must be global,
// because they are used in both init() and onResult().
var iCallID = 0;
var intA = 5;
var intB = 6;
function init()
{
// Establish the friendly name "MyMath" for the WebServiceURL
service.useService("/services/math.asmx?WSDL","MyMath");
// The following uses a callback handler named "mathResults"
iCallID = service.MyMath.callService(mathResults, "add", intA, intB);
}
function mathResults(result)
{
// if there is an error, and the call came from the call() in init()
if(result.error)
{
// Pull the error information from the event.result.errorDetail properties
var xfaultcode   = result.errorDetail.code;
var xfaultstring = result.errorDetail.string;
var xfaultsoap   = result.errorDetail.raw;
// Add code to handle specific error codes here
}
// if there was no error
else
{
// Show the arithmetic
alert(intA + ' + ' + intB + " = " + result.value);
}
}
</SCRIPT>
<body >
<div id="service" style="behavior:url(webservice.htc)">
</div>
</body>

时间: 2024-12-03 13:35:17

.net 下用javascript调用webservice的相关文章

web service-jboss5环境下,cxf调用webservice不返回内容,也不报错

问题描述 jboss5环境下,cxf调用webservice不返回内容,也不报错 有谁碰到过这种情况,cxf调用webservice在jar包运行下没问题, 换到jboss5下面就会有问题,但是不报错,也不返回任何东西 解决方案 http://www.iteye.com/problems/47007 解决方案二: 我是直接调用的客户端,不用任何配置的

javascript调用WebService - Hello World

WebService既可以大用,也可以小用.大用可以应用到整个系统,将整个系统设计成SOA(面向服务),小用可以应用到JS.今天我们就来看一下如何在网页中用JS来调用WebService. 我们举的例子很简单,用 JS调用默认VS2008生成的Hello World服务.Service的代码如下: using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Lin

javascript调用webservice中的变量

问题描述 求高手指教javascript中调用了webservice,webservice的回调函数反应似乎有点慢,在下面的语句中想要用回调函数中的变量,但总是不能成功调用.感觉应该是回调函数还没有执行完就已经执行了下面的语句,不知道该如何解决 解决方案 解决方案二:该回复于2012-04-24 14:08:48被版主删除解决方案三:webservice的回调函数是什么东西?应该是ajax方法的吧,把你的ajax方法是否异步设为false或者ajax执行完后才能执行的方法写道ajax的回调函数里

用javascript调用webservice(webservice behavior)

<script language="javascript"> function getfemale() { //第一个参数是webservice的url,后面是名称 female.useService("news.asmx?WSDL","news"); //设置一个回调函数,service返回结果的时候回调:第一个参数是回调函数的名称,后面的是webservice的参数 intCallID=female.news.callServic

websphere6.1下使用xfire调用webservice接口报错

问题描述 Operationtimedout:connect:couldbeduetoinvalidaddress程序在TOMCAT下运行时一切正常. 解决方案 解决方案二:亲,你问题解决了吗?我们也遇到这问题了.

如何在ASP.Net Ajax中调用WebService

ajax|asp.net|web 今天我想实现利用javascript调用WebService我首先就想到了ASP.Net Ajax 因为微软的东西用着方便,我从网上看了看,这东西好多人都写了,我就从官方找了个Demo下了看看源代码,感觉没什么特殊的,于是动手开始写.先添加一个webservice.asmx然后在default.aspx中加入ScriptManager 并设置serviecs属性<asp:ScriptManager runat="server" ID="

用JavaScript与WebService实现网页部分数据XML传送

javascript|web|xml|数据|网页 B/S结构的程序每执行一个操作往往都需要刷新页面,在刷新过程中,服务器不但要将数据发送到客户端,还需要将一些格式信息,比如说表格.图片.标题等重新发送,占用了大量带宽.尽管IE提供了页面缓存的功能,但对于时刻发生变化的动态网页,本地缓存基本上不起什么作用.如果能够让Web服务器只传送关键数据,不传送格式就可以减少带宽占用.当然,在我的系统开发过程中,使用了智能卡进行关键数据加.解密,出于速度考虑,尽可能减少被加密的数据就可以提高信息的显示速度.

.net 2008 调用webservice服务出错

问题描述 DimobjInsuAsNewServiceReference3.outwebserviceClient在这个地方报错!在ServiceModel客户端配置部分中,找不到引用协定"ServiceReference3.outwebservice"的默认终结点元素.这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素.请大家帮我看看这是什么原因,我在服务引用的时候是可以找到服务的! 解决方案 解决方案二:删除这个Web引用,重新生成一下.解决

web service-jboss5环境下,cxf和axis调用webservice客户端都是不报错,不返回结果

问题描述 jboss5环境下,cxf和axis调用webservice客户端都是不报错,不返回结果 有谁碰到过这种问题,cxf和axis调用webservice没问题,部署到jboss5里面就有问题, 不报错,不返回结果 解决方案 http://blog.csdn.net/shiqi472807092/article/details/8254494