.getJSON 调用服务:服务中的异常

Posted

技术标签:

【中文标题】.getJSON 调用服务:服务中的异常【英文标题】:.getJSON call a service: exception in service 【发布时间】:2013-07-30 18:23:32 【问题描述】:

我创建了一个 WCF 服务并在客户端调用它。

<script lang="javascript" type="text/javascript">
    var x;
    function ttsFunction() 
                   var data = new Object();
        data.text = $('#ddl').val();
        var jsonString = JSON.stringify(data);
        x = $.getJSON("http://localhost:8080/wscccService.svc/RunTts?jsoncallback=?",  text: jsonString );
    
    $('#speak').val = x;
</script>

还有服务

namespace wsccc1

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
 [JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")]//"jsoncallback is custom"

 public class wscccService : Iwservice
 
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public string RunTts(string length)
    
        return Membership.GeneratePassword(Int32.Parse(length), 1);
    
 

接口代码:

namespace wsccc1

  [ServiceContract]
  public interface Iwservice
  
     [OperationContract]
    //[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
    //    BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "RunTts")]
    string RunTts(string text);
  
 

例外情况如下:

我猜参数“length”有问题,它是json格式。感谢您的帮助。

【问题讨论】:

这显然不是您要解析为整数的数字。这是一个 json 属性“文本:8”。可能你应该先解析 json 然后使用值,即 8 【参考方案1】:

您需要使用JSON deserializer 来读取长度变量。现在你正在尝试 Int32.Parse("\"text\":\"8\""),这是没有意义的。

示例(这是针对 Newtonsoft JSON):

public string RunTts(string lengthObject) 
    JToken token = JObject.Parse(lengthObject);
    int length = (int)token.SelectToken("text");
    return Membership.GeneratePassword(length, 1);

【讨论】:

以上是关于.getJSON 调用服务:服务中的异常的主要内容,如果未能解决你的问题,请参考以下文章

没有 JSONP 的 getJSON 远程请求 - 服务器

必须在客户端或服务器端更改哪些内容才能使 getJSON() 工作?

jQuery基础(Ajax,load(),getJSON(),getScript(),post(),ajax(),同步/异步请求数据)

HighCharts - getJson 到 HighCharts 双轴

jQuery 中与Ajax相关的API

抛出异常:尝试调用 WCF 服务时 mscorlib.dll 中的“System.IO.FileNotFoundException”