通过跨域JSONP AJAX调用通过WCF服务检索HTML字符串

时间:2012-02-14 13:55:03

标签: ajax wcf json cross-domain jsonp

我有一个返回字符串的WCF服务。我试图使用跨域JsonP请求来调用它。这在IE中工作,但没有其他浏览器。我在Firefox和Chrome中遇到了解析器错误。

从阅读各种文章,我似乎认为服务可能需要以不同的格式返回结果。任何想法都会有所帮助,这是我的代码。

WCF服务代码

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public string SponsorLayout2(string projectScope, int projectYear, int imageHeight)
{
   // Mock data
   projectScope = "uk";
   projectYear = 2012;
   imageHeight = 42;

   // Get projectId
   var project = Projects.GetProjectByProjectScopeAndYear(projectScope, projectYear);

   // Get project sponsor layouts
   var projectSponsorLayout = ProjectSponsorLayouts.GetProjectSponsorLayout(project.Id, imageHeight);

   // Return the sponsors
   if (projectSponsorLayout != null)
      return projectSponsorLayout.Body;

      return null;

}

Jquery Ajax Call

$.ajax({
cache: false,
type: "GET",
async: false,
data: {},
url: "http://127.0.0.1:8082/HtmlService.svc/SponsorLayout2",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
crossDomain: true,          
success: function (data) {  
    alert("success");       
},
error: function (xhr) {
          alert("error");
    alert(xhr.statusText);
},
complete: function(jqXHR, textStatus) {     
          alert(textStatus); 
      } 
});

1 个答案:

答案 0 :(得分:1)

我发现了为什么我遇到上述问题并认为我会与你分享这个问题。 由于某种原因,此属性之间存在冲突

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

位于我班级之上

public class MyClass

和我的web.config文件中的此规则

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />

我最终在我的web.config中评论了规则,一切都变得生动起来。因为我的服务是一个AJAX就绪服务,所以该属性被添加到开箱即用的类之上。无论如何,这对我有用,并希望它在同样的情况下帮助其他任何人。