WCF 返回 JSONP 或自定义结果格式

Posted

技术标签:

【中文标题】WCF 返回 JSONP 或自定义结果格式【英文标题】:WCF returning a JSONP or custom result format 【发布时间】:2014-12-19 09:31:14 【问题描述】:

嗯,我有一个 WCF 服务,它返回一个包含一些我需要使用的属性的自定义对象。

[DataContract]
public class CommonJsonResponse 

    [DataMember]
    public object Data  get; set; 
    [DataMember]
    public bool Success  get; set; 
    [DataMember]
    public int StatusCode  get; set; 

    private string errorMessage;
    [DataMember]
    public string ErrorMessage 
        get 
            return errorMessage;
        
        set 
            errorMessage = value;
            if (!string.IsNullOrEmpty(value)) 
                Success = false;
            
        
    

    public CommonJsonResponse() 
        Success = true;
    

我的所有服务方法都将返回此对象以及 Data 属性内的其他所需数据。我有这样的方法:

[WebGet(ResponseFormat=WebMessageFormat.Json)]
public CommonJsonResponse DoSomething(int value, string callback) 

    var response = new CommonJsonResponse();        
    response.Data = JsonConvert.SerializeObject(
        GetItemIntoDatabaseByGivenValue(value));

    return response;



$.ajax(
    url: serviceUrl + '/DoSomething',
    type: 'GET',
    dataType: 'jsonp',
    contentType: 'application/json; charset=utf-8',
    data:  value: 1 ,
    success: function(response) 
        console.log(response);
    ,
    error: function(xhr, response, error) 
        console.log(xhr);
        console.log(xhr.responseText);
        if (xhr.responseText) 
            var err = xhr.responseText;
            if (err) 
                error(err);
             else 
                error( Message: "Unknown server error." )
            
        
    );

好的,一旦我想使用跨域,我的想法是返回一个JSONP 对象。我知道 AJAX 在请求字符串中添加了一些参数——比如上面的 callback 参数。我也知道,为了正确返回 JSONP 对象,我需要执行以下操作:

var properlyResult = callback + "(" + response + ");";

好的,既然我的方法返回一个CommonJsonResponse,有没有办法覆盖将响应添加到HttpContext?我的意思是,这个想法是获取CommonJsonResponse 对象将被发送并将其包装到上面的字符串中以生成正确的结果,然后将这个正确的结果放入HttpContext 将被发送回浏览器。

感谢您的帮助! :)

【问题讨论】:

【参考方案1】:

问题解决了。

我用过这个link:

感谢rich.okelly(第一个答案)提示.NET framework 4.0+ 对JSONP 进行原生解析。

也感谢Rachit Patel(第二个答案)对webHttpBindingcrossDomainScriptAccessEnabled 属性提示。

【讨论】:

以上是关于WCF 返回 JSONP 或自定义结果格式的主要内容,如果未能解决你的问题,请参考以下文章

在 wcf 中添加用于安全身份验证的自定义标头

WCF 返回空的自定义集合类型

Unity NGUI UIPanel下对粒子或自定义Mesh的剪裁

服务层应该接受来自控制器的 DTO 或自定义请求对象吗?

环境问题-Pycharm终端terminal找不到(安装或自定义)模块

创建自己的 BibTeX 风格或自定义现有的风格?