100分求助!JS调用Web Service时出现"Service unavailable"错误。大家帮我找找原因,谢谢!
aqqzy 2006-01-17 09:29:43 在做项目时遇到这样一个问题,我说一说,大家帮我找找原因!内容比较长,大家伙慢慢看,希望帮我找出原国,先谢谢了!!!
在机器A上(IP为192.168.0.1)建立一个Web项目(名为WebApp1),在该项目下建立一个Web Service(名为Service1.asmx)。其中有一个Web方法,
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
在该项目下还有一个静态页(名为HTMLPage1.htm),该页面使用JavaScript调用Service1.asmx中的HelloWorld方法。源码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="ProgId" content="VisualStudio.HTML">
<meta name="Originator" content="Microsoft Visual Studio .NET 7.1">
<script>
function init(){
service.useService("http://192.168.0.1/Service1.asmx?wsdl","Service1");
service.Service1.callService(callback,"HelloWorld");
}
function callback(res){
if (!res.error)
{
HW.innerText=res.value
}
else
{
var xfaultcode = res.errorDetail.code;
var xfaultstring = res.errorDetail.string;
var xfaultsoap = res.errorDetail.raw;
document.writeln("ERROR. Method call failed!"); document.writeln("Fault Code:" + xfaultcode);
document.writeln("Fault String:" + xfaultstring);
document.writeln("SOAP Data:" + xfaultsoap);
}
}
</script>
</head>
<body onload="init();">
<div id="service" style="BEHAVIOR:url(webservice.htc)"></div>
<FONT face="宋体" id=HW></FONT>
</body>
</html>
当然,webservice.htc文件也在该项目下。web.config文件中写入了下面的属性。
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
</protocols>
</webServices>
现在在机器A上通过“http://localhost/HTMLPage1.htm”和“Http://192.168.0.1/HTMLPage1.htm”访问,都可以正常显示出来“Hello World”。
在机器A上建立一个虚拟目录“TestService1”,将HTMLPage1.htm和webservice.htc拷贝到该虚拟目录中。
在机器A上通过“http://localhost/TestService1/HTMLPage1.htm”和“Http://192.168.0.1/TestService1/HTMLPage1.htm”访问,也都可以正常显示出来“Hello World”。
在另外一台机器B(IP地址是192.168.0.2)上通过“Http://192.168.0.1/HTMLPage1.htm”和“Http://192.168.0.1/TestService1/HTMLPage1.htm”访问也都可以显示出来“Hello World”。
这说明WebApp1在机器A上运行是正常的。Web Service Service1.asmx也运行正常。
现在在机器B上建立一个站点和一个虚拟目录“TestService2”将HTMLPage1.htm和webservice.htc文件分别拷贝到该站点和虚拟目录下。
在机器B上通过“Http://localhost/HTMLPage1.htm”和“Http://localhost/TestService2/HTMLPage1.htm”访问,也都可以正常显示出来“Hello World”。
下面问题就出现了,我在机器B上通过IP访问本机的站点及虚拟目录下的HTMLPage1.htm都出现了“Service unavailable”错误。
就是通过“http://192.168.0.2/HTMLPage1.htm”和“Http://192.168.0.2/TestService2/HTMLPage1.htm”来访问,都出现了那个错误。
我在机器A上通过“http://192.168.0.2/HTMLPage1.htm”和“Http://192.168.0.2/TestService2/HTMLPage1.htm”来访问,也出现了那个错误。
以上就是整个错误出现的状况,现在总结一下。
就是在Web Service所在的服务器上通过JS调用Web Service没有任何问题,但是在其它站点通过JS调用Web Service就出现了问题,不知道大家遇到过这种情况吗?
为了证明Web Service没有问题,我在机器B上新建了一个项目,在该项目下,添加了一个Web引用(引用名是WS1),在该项目下的WebForm1.aspx的PageLoad中写入下面的代码。
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
WS1.Service1 tWS = new WebApp1.WS1.Service1();
Response.Write(tWS.HelloWorld());
}
在机器B上及机器A上分别用“Http://192.168.0.2/WebForm1.aspx”浏览都没问题。
也就是说在其它站点中用C#调用WebService是可用的,只有用JavaScript调用不可以。
大家帮帮忙,看看是哪个地方出错了。本人十分感激。分不够可以再加!先谢谢了!弄了好几天了也没查出原因!