Служба WCF не возвращает значение в jQuery - PullRequest
3 голосов
/ 10 марта 2010

У меня проблема с получением jquery для получения результатов из службы WCF. Я размещаю службу WCF в IIS, и когда я присоединяю отладчик к этому процессу, я вижу, что код успешно обрабатывается. Тем не менее, когда он попадает в обратный вызов в JQuery нет данных ??

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

Вот код jquery, который вызывает сервис:

$.get("http://ecopssvc:6970/ecopsService.svc/Echo", {echoThis: "please work"}, function(data) {
            alert("Data Loaded: " + data);
        });

Вот конфиг wcf:

    <system.serviceModel>
    <services>
      <service name="EcopsWebServices.EcopsService" behaviorConfiguration="EcopsServiceBehaviours">
        <endpoint address="" behaviorConfiguration="WebBehaviour"
          binding="webHttpBinding" bindingConfiguration="" contract="EcopsWebServices.IEcopsServiceContract" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="WebBehaviour">
          <webHttp />
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="EcopsServiceBehaviours">
          <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Вот договор на обслуживание:

    [ServiceContract]
public interface IEcopsServiceContract
{    
    [WebGet]
    [OperationContract]
    string Echo(string echoThis);

}

Вот реализация Службы:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class EcopsService : IEcopsServiceContract
    {

        #region IEcopsServiceContract Members

        public string Echo(string echoThis)
        {
            return string.Format("You sent this '{0}'.", echoThis);
        }

        #endregion
    }

Пожалуйста, помогите кому-нибудь !!!

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Убедитесь, что для фабрики установлено значение WebScriptServiceHostFactory в вашей .svc разметке. Также убедитесь, что служба WCF и веб-страница соблюдают одинаковую политику . Вот полный рабочий пример:

WCF Сервис:

[ServiceContract]
public interface IService1
{
    [WebGet]
    [OperationContract]
    string Echo(string echoThis);
}

public class Service1 : IService1
{
    public string Echo(string echoThis)
    {
        return string.Format("You sent this '{0}'.", echoThis);
    }
}

web.config:

<system.serviceModel>
  <services>
    <service name="ToDD.Service1" 
             behaviorConfiguration="ToDD.Service1Behavior">
      <endpoint address="" 
                binding="webHttpBinding" 
                contract="ToDD.IService1" />
      <endpoint address="mex" 
                binding="mexHttpBinding" 
                contract="IMetadataExchange"/>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ToDD.Service1Behavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

service1.svc:

<%@ ServiceHost 
    Language="C#" 
    Debug="true" 
    Service="ToDD.Service1" 
    CodeBehind="Service1.svc.cs" 
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
%>

index.htm:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Test</title>
    <script type="text/javascript" src="jquery-1.4.1.js"></script>
    <script type="text/javascript">
    $(function() {
        $.getJSON('http://localhost:4660/service1.svc/Echo', { 
            echoThis: 'please work' }, 
            function(data) {
                alert(data.d);
            }
        );
    });
    </script>
</head>
<body>
</body>
</html>
0 голосов
/ 10 марта 2010

Ты был прав, Дарин! Оказывается, он не работал из-за той же политики происхождения. Все эти вещи являются новыми для меня, и я не думал, что возникнут какие-либо проблемы, поскольку они работали на одном и том же компьютере, но из-за того, что номер порта был другим, они не прошли проверку политики.

0 голосов
/ 10 марта 2010

Я бы сделал 2 вещи:

  • используйте средства отладки на стороне браузера - либо встроенный отладчик IE8, либо Firebug для Firefox. Используйте это, чтобы проверить, что вы отправляете в WCF, и что вы получаете обратно.

  • Используйте Fiddler для проверки HTTP-запросов и ответов при их передаче по сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...