Позвоните в веб-сервис из JavaScript - PullRequest
4 голосов
/ 02 июля 2011

Я написал веб-сервис в ASP.NET, он имеет этот адрес:

http://localhost/RouteGen/Service.asmx

В веб-службе есть веб-метод GetMessage, он не принимает никаких параметров и возвращает строку.

Все нормально с веб-сервисом, я вызываю его методы из других приложений ASP.NET или даже из приложения Android.

Код сервера:

* * 1010

Теперь мне нужно вызвать веб-метод GetMessage из JavaScript.

HTML-страница: (эта веб-страница не связана с кодом веб-службы, это совершенно другой проект! Вы можете считать, что он написан в блокноте win)

...
<body id="body1" onload="initialize()" style="behavior:url(webservice.htc)">
</body>
...

в методе initialize (), который я вызываю:

...
service_init();
processResult();

И вот эти функции:

function service_init()
{   
    body1.useService("http://localhost/RouteGen/Service.asmx?WSDL","TheService");   
    body1.TheService.callService("GetMessage");
}

function processResult(result)
{
    alert(result);
}

Итак, у меня есть результаты:

1) В IE processResult() возвращает "undefined"

2) В Chrome и FireFox он вообще не работает (простое предупреждение после использования не отображается)

В чем проблема? Как заставить javascript вызывать веб-метод нормально и из разных браузеров?

Ответы [ 2 ]

5 голосов
/ 02 июля 2011

В секции Aspx,

Добавьте тег ScriptManager следующим образом,

        <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                   <asp:ServiceReference  path="~/sample.asmx"/>
                </Services>
         </asp:ScriptManager>

В JavaScript вызовите веб-сервис (sample.asmx) следующим образом:

<script language="javascript" type="text/javascript">

  function CalledOnAnyClientClickEvent()
  {
     var parameter1="dsfsfs"; 

     NameSpace1.WebService1.HelloWorld(parameter1,OnSucess,OnFail);
  }
   function OnSuccess(asd)
   {
      alert(asd);//result will contain the return parameter from web service
   }

   function OnFail(asd)
   {
      alert(asd);
   }
</script>

См. Раздел Asmx (sample.asmx) ниже,

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Web;
          using System.Web.Services;

          using System.Web.Script.Serialization;
          using System.Web.Script.Services;

          namespace NameSpace1
          {
            /// <summary>
            /// Summary description for WebService1
            /// </summary>
           [WebService(Namespace = "http://tempuri.org/")]
           [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]     
            [System.ComponentModel.ToolboxItem(false)]

           // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
           [ScriptService]

           public class WebService1 : System.Web.Services.WebService
           {

                  [WebMethod]
                   public string HelloWorld(string par1)
                   {
                        //do your logic here

                       return "Hello World";
                   }
            }
         }

Надеюсь, это поможет ...

2 голосов
/ 02 июля 2011

ASMX - это веб-сервис SOAP. SOAP относительно сложен.

Лучший способ вернуть данные в браузер - использовать REST. REST Services можно использовать с помощью JQUERY.

Вы можете создать Службы WCF, которые используют REST и возвращают результат JSON.

Если ваша служба находится не на том же сервере, что и ваша веб-страница, вам придется использовать что-то вроде JSONP для выполнения междоменного вызова.

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