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调用不可以。

大家帮帮忙,看看是哪个地方出错了。本人十分感激。分不够可以再加!先谢谢了!弄了好几天了也没查出原因!
...全文
304 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
aqqzy 2006-01-19
  • 打赏
  • 举报
回复
原因找到了,由于通过IP地址访问站点B时,在IE的安全中认为是Internet级别的。所以不跨域访问。只要将安全中,Internet中将“通过域访问数据资源”改为启用就可以了。

但还有一个问题,那就是如果网站做成,我不可能要求每个浏览者都更改IE的设置。所有大家有没有好的解决办法。
zqsntws 2006-01-18
  • 打赏
  • 举报
回复
帮顶+学习
aqqzy 2006-01-18
  • 打赏
  • 举报
回复
谢谢帮顶。
cnjack 2006-01-18
  • 打赏
  • 举报
回复
顶。。。
aqqzy 2006-01-18
  • 打赏
  • 举报
回复
呵呵,先谢谢pontus,那机器B又有什么问题。
pontus 2006-01-18
  • 打赏
  • 举报
回复
跟htc没关系,是机器B的问题
aqqzy 2006-01-18
  • 打赏
  • 举报
回复
谢谢 kaixin110,HTC文件还需要改动吗。
kaixin110 2006-01-18
  • 打赏
  • 举报
回复
你好,很高兴看到你的回复,

应该是htc里面的问题

我的msn:
kaixin110@msn.com

aqqzy 2006-01-17
  • 打赏
  • 举报
回复
说到HTC文件,倒是提醒了我。刚刚看了一眼,发现Service unavailable正是在HTC文件中定义的。

大家谁能给介绍一下导致这个错误的原因是什么。
aqqzy 2006-01-17
  • 打赏
  • 举报
回复
htc文件是在MS网站上下载的,没有改动。
kaixin110 2006-01-17
  • 打赏
  • 举报
回复
你这个htc中的service怎么写的
aqqzy 2006-01-17
  • 打赏
  • 举报
回复
没有人愿意帮忙吗,还在大家都不会呀。

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧