Извлечение HTML-строки с помощью службы WCF с помощью кросс-доменного вызова JSONP AJAX - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть служба 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 Ответ

1 голос
/ 29 февраля 2012

Я узнал, почему у меня возникла проблема, описанная выше, и подумал, что поделюсь этим с вами. По какой-то причине возник конфликт между этим атрибутом

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

который сидит на вершине моего класса

public class MyClass

и это правило в моем файле web.config

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

Я закончил комментировать правило в моем web.config, и все ожило. Поскольку мой сервис является AJAX-готовым сервисом, атрибут добавляется над классом из коробки. В любом случае, это сработало для меня, и надеюсь, что это поможет кому-то еще в такой же ситуации.

...