当前位置:编程学习 > C#/ASP.NET >>

在Javascript中调用webservice,为啥没有返回?

在Js中我使用xmlHTTP的GET方法,去调用我用.NET写的webservice,但奇怪的是在JS中调用send方法之后一直没有返回。(我在onreadystatechange的回调函数中设置了断点)。
另外还有一点就是:我的webservice是关于Microsoft的TTS(Text-To-Speech)的,其中如果我调用如下两行代码,在JS中就无法得到返回值。但如果把它们注释掉,JS中就可以正常返回。有没有哪位能给点思路?多谢!

_speechSynthesizer.SetOutputToWaveFile(sOutPath);
_speechSynthesizer.Speak(sText);

--------------------编程问答-------------------- 这个问题困扰我很长时间了,如果能解决,我会再加分给你。 --------------------编程问答-------------------- 楼主,贴代码吧!! --------------------编程问答-------------------- 我现在在上班,代码在家里电脑。
客户端的JS是非常简单的,首先新建一个xmlHTTP对象,然后调用我那个webservice方法(send),并且我指定了onreadystatechange这个回调函数,所以正常情况下如果那个webservice返回的话,会进入这个回调函数继续执行。
webservice就更简单了,就是用.NET创建的,就一个函数,返回值是一个string。我在这个webservice
里调试过,无论是否调用那两个TTS的API,这个函数都会正常返回没抛异常,但奇怪的是:在调用那两个API的情况下,为啥这个返回值不会回到JavaScript那里?难道中途出了异常?或者是那两个API启动了新线程啥的?
有哪位遇到过这种不返回的情况,说说你们的发现,给我点启发。我想我的代码应该是没问题,不会有低级错误的。 --------------------编程问答-------------------- 检查一下你的webservice引用有没有问题 --------------------编程问答--------------------
引用 4 楼 zlkingdom 的回复:
检查一下你的webservice引用有没有问题

我在在JavaScript中调用webservice,所以应该不存在引用的问题。基本的调用方式就是xmlHTTP的open方法,URL类似为"http://localhost/webservicesample/service.aspx/GetString?123abc",其中GetString是webservice方法的名字,123abc是这个方法所需要的传入参数。
还有一点,我为什么说引用没问题,因为我在这个GetString的方法中注释掉那两行之后,在JS中就可以成功调用并返回值。

看来这个问题有点复杂了,我也对这个问题能否被解决没信心了。 --------------------编程问答-------------------- 跨域有关系吗 --------------------编程问答-------------------- //_speechSynthesizer.SetOutputToWaveFile(sOutPath); 
_speechSynthesizer.Speak("你好"); 
把_speechSynthesizer.Speak("你好"); 上面的注释掉..看看直接给值能不能调..

这是朗读文本的方法..不知道JAVASCRIPT调用是否涉及的安全方面或是权限的问题.. --------------------编程问答--------------------
引用 6 楼 isline 的回复:
跨域有关系吗

跨域?其实我现在调试都在同一台电脑上。 --------------------编程问答--------------------
引用 7 楼 xzq686 的回复:
//_speechSynthesizer.SetOutputToWaveFile(sOutPath);
_speechSynthesizer.Speak("你好");
把_speechSynthesizer.Speak("你好"); 上面的注释掉..看看直接给值能不能调..

这是朗读文本的方法..不知道JAVASCRIPT调用是否涉及的安全方面或是权限的问题..

这倒是有可能,是否因为JavaScript的调用,产生服务器端磁盘文件读写,有权限问题?还真不太清楚。。 --------------------编程问答-------------------- 使用xmlHTTP的GET方法
webservice是否支持GET?
--------------------编程问答--------------------
引用 10 楼 flyerwing 的回复:
使用xmlHTTP的GET方法
webservice是否支持GET?

用GET或POST,同步或异步都可以,已经测试过了。 --------------------编程问答--------------------
引用 7 楼 xzq686 的回复:
//_speechSynthesizer.SetOutputToWaveFile(sOutPath);
_speechSynthesizer.Speak("你好");
把_speechSynthesizer.Speak("你好"); 上面的注释掉..看看直接给值能不能调..

这是朗读文本的方法..不知道JAVASCRIPT调用是否涉及的安全方面或是权限的问题..

试过了,直接朗读“你好”,也不能返回,汗!看来真是无解了~~~ --------------------编程问答-------------------- 抓包看看数据时怎样的,有可能问题一下就解决了 --------------------编程问答-------------------- XMLHttp的使用是可以从远程得到返回值的,楼主可以仔细查一下。 --------------------编程问答--------------------
引用 8 楼 frankzch 的回复:
引用 6 楼 isline 的回复:
 跨域有关系吗

 跨域?其实我现在调试都在同一台电脑上。

跨步跨域和在不在一台电脑上没关系,在一台电脑上,两个Web应用使用不同的域名发布,也同样是跨域的。跨域访问js会报没有权限。不过我感觉你的问题和这个没关系。打断点调试一下WebService,看有没有返回结果。 --------------------编程问答-------------------- 还是把我的code发上来大家给分析分析,主要是两部分:.Net写的Webservice和JavaScript里的调用

Webservice部分:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Speech.Synthesis;

[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) {
        SpeechSynthesizer _ss= new SpeechSynthesizer();
        _ss.SelectVoice("Microsoft Lily"); //这里可能需要安装语音库,不然没法调试
        _ss.Speak("Hello, "+ Name); 
        return "Hello "+Name;
    }
    
}

JavaScript部分:

<script language="javascript"> 

function RequestByGet(data){ 

var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
//Webservice location.
var URL="http://localhost/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; 


</Script>
--------------------编程问答-------------------- webservice 标记 [System.Web.Script.Services.ScriptService]  // 在.NET 中

这样 webservice 就有支持 JavaScript 访问的能能力了.如果没有这个 JavaScript 是不能访问的.
其他 平台开发的 webservice 我就不知道了
.
补充:.NET技术 ,  Web Services
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,