Как вызвать службу WCF из JavaScript в .NET 3.5? - PullRequest
1 голос
/ 16 мая 2011

Я добавляю в свой проект WCF-сервис (ProductService.svc в Forder Services):

using System; 
using System.Linq;  
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Activation; 
using System.ServiceModel.Web; 
using System.Web.Services; 
using System.Collections.Generic; 

namespace Application.Services {
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]
    public class ProductService
    {
        [WebMethod]
        [OperationContract]
        public static string GetMainGridProductHtml()
        {
            return "Helo World :)";
        }
    } 
 }

И попробуйте вызвать сервис из файла javascript:

<script type="text/javascript">
Application.Services.ProductService.GetMainGridProductHtml(ResultLoadTableMainGridHtml, ErrorLoadTableMainGridHtml);

function ResultLoadTableMainGridHtml(html) {
    debugger;
    alert("Ok");
}

function ErrorLoadTableMainGridHtml() {
    debugger;
    alert("Error");
}

function NewAddBtn() {
    debugger;
    alert("Yuppi");
}
</script>

Не будет работать: ошибка времени выполнения Microsoft JScript: «Приложение» не определено Как я могу справиться с этим?

Ответы [ 2 ]

1 голос
/ 16 мая 2011

вы можете использовать JSON для достижения этого в Javascript. Вот пример http://dotnetbyexample.blogspot.com/2008/02/calling-wcf-service-from-javascript.html

0 голосов
/ 16 мая 2011

я попробовал код, похожий на ваш, и я думаю, что, поскольку вы используете пустое пространство имен в

 [ServiceContract(Namespace = "")]

, сгенерированный для прокси javascript доступен с использованием

ProductService.GetMainGridProductHtml

напрямуюи без пространства имен Application.Services

РЕДАКТИРОВАТЬ: пример кода:

в файле svc:

<%@ ServiceHost Language="C#" Debug="true" 
Service="Application.Services.ProductService" 
Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
CodeBehind="ProductService.svc.cs" %> // your cs file name may be different 

на странице aspx вы должны иметь скриптменеджер и ссылка (измените ссылку на вашу службу):

 <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/Service1.svc" />
            </Services>
        </asp:ScriptManager>

в вашем файле web.config, когда вы добавили службу WCF с поддержкой WCF, VS2010 добавляет настройки модели servcie для WCF и AJAX: ваши имена классови пространства имен, вероятно, разные, это было создано на моей машине:

<system.serviceModel>
        <behaviors>
          <endpointBehaviors>
            <behavior name="WebApplication1.Service1AspNetAjaxBehavior">
              <enableWebScript />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
          multipleSiteBindingsEnabled="true" />
        <services>
          <service name="WebApplication1.Service1">
            <endpoint address="" 
              behaviorConfiguration="WebApplication1.Service1AspNetAjaxBehavior"
              binding="webHttpBinding" contract="WebApplication1.Service1" />
          </service>
        </services>
      </system.serviceModel>

со всем этим на месте, вы должны иметь возможность вызывать службу на стороне клиента, используя ProductService.GetMainGridProductHtml().
(вы можететакже, как вы и ожидали, посмотрите в окне просмотра отладчика

, чтобы убедиться, что вы правильно генерируете javascript, перейдите по URL-адресу службы + / jsdebug, то есть http://localhost:3953/Service1.svc/jsdebug

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