2014-01-23 2 views
1

У меня возникла проблема с вызовом простого метода в службе WCF. Я застрял, и я не знаю, как решить эту проблему. Буду признателен за любую помощь.Запрос jQuery для службы WCF завершается с помощью parsererror (Ошибка: jQuery1101030437586596235633_1390485791492 не был вызван)

Моя служба WCF:

[ServiceContract] 
interface IMyService 
{ 
    [OperationContract] 
    string GetSomething(); 
} 

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
class MyService : IMyService 
{ 
    [WebInvoke(Method = "GET", 
       RequestFormat = WebMessageFormat.Json, 
       ResponseFormat = WebMessageFormat.Json, 
       UriTemplate = "GetSomething", 
       BodyStyle = WebMessageBodyStyle.Bare)] 
    public string GetSomething() 
    { 
     return "Hello"; 
    } 

} 

Запуск службы:

  using (ServiceHost host = new ServiceHost(typeof(MyService))) 
     { 
      host.Open(); // end point specified in app config 

      Console.WriteLine("Hit Enter to quit."); 
      Console.ReadLine(); 
     } 

App.Config файл

<configuration> 
    <system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="webHttp"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <bindings> 
     <webHttpBinding> 
     <binding name="webHttpBinding" crossDomainScriptAccessEnabled="true"/> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="testWCF.MyService"> 
     <endpoint address="http://localhost:8003/myservice" 
      binding="webHttpBinding" 
      contract="testWCF.IMyService" 
      behaviorConfiguration="webHttp"/> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration> 

Это все о WCF службы. Мой веб-приложение работает на http://127.0.0.1:8085 и вот как я посылаю запрос JQuery из веб-приложения:

$.ajax({ 
    url: "http://127.0.0.1:8003/myservice/GetSomething?callback=?", 
    dataType: 'jsonp', 
    cache: false, 
    beforeSend: function() { 
     console.log("Loading"); 
    }, 

    error: function (jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR); 
     console.log(textStatus); 
     console.log(errorThrown); 
    }, 

    success: function (data) { 
     console.log('Success'); 
     console.log(data); 
    }, 

    complete: function() { 
     console.log('Finished all tasks'); 
    } 
}); 

Мой ответ заключается в следующем: я могу увидеть в моем JavaScript concole моего хромом, что ответ был отправляемое из службы WCF (содержание метода GetSomething является «Hello»), но я получаю следующий вывод на консоль:

Loading 
GetSomething:-1Resource interpreted as Script but transferred with MIME type application/json. 
Object 
parsererror 
Error: jQuery1101030437586596235633_1390485791492 was not called 

Моя функция Сукчес никогда не была выполнена. Поскольку я следил за некоторыми сообщениями, подобными этому, я обнаружил, что он имеет какое-то отношение к Content-Type, но я не мог найти способ, как получить эту работу. Кто-нибудь может мне помочь?

ответ

1

Я решил это самостоятельно. Проблема была в файле App.config. я добавил bindingConfiguration="webHttpBinding"

Теперь мой файл App.config является:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="webHttp"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <bindings> 
     <webHttpBinding> 
     <binding name="webHttpBinding" crossDomainScriptAccessEnabled="true"/> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="testWCF.MyService"> 
     <endpoint address="http://localhost:8003/myservice" 
      binding="webHttpBinding" 
      bindingConfiguration="webHttpBinding" 
      contract="testWCF.IMyService" 
      behaviorConfiguration="webHttp"/> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration>