На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Все глубже и глубже.. , Web Service и JavaScript
    Ну вот подошел к сервису :(
    много много всего на гуглил и чет не снюхать мне javascript с webservice

    начинаю с простого, экспериментирую
    создаю сервис: Services/Transition.svc

    ExpandedWrap disabled
      Imports System.ServiceModel
      Imports System.ServiceModel.Activation
      Imports System.ServiceModel.Web
       
      <ServiceContract(Namespace:="")>
      <AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
      Public Class Transition
       
          <OperationContract()>
          Public Function RetTest(ByVal d1 As String, ByVal d2 As String) As String
              Dim dd1 As Double = Double.Parse(d1)
              Dim dd2 As Double = Double.Parse(d2)
              Return (dd1 + dd2).ToString
          End Function
       
          ' Добавьте здесь дополнительные операции и отметьте их атрибутом <OperationContract()>
       
      End Class


    код на форме:
    ExpandedWrap disabled
      <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/NMP.master" CodeBehind="Test.aspx.vb" Inherits="WebS.Test" %>
      <asp:Content ID="Content1" ContentPlaceHolderID="Head" runat="server">
      <script type="text/javascript">
          // This function calls the Web Service method.
          function RetTest() {
              dd1 = document.getElementById("TextBox1").value;
              dd2 = document.getElementById('TextBox2').value;
              WebS.transition.RetTest(dd1, dd2, OnSucceeded);
          }
       
          // This is the callback function that
          // processes the Web Service return value.
          function OnSucceeded(result) {
              var RsltElem = document.getElementById("Label1");
              RsltElem.text = result;
          }
       
       
      </script>
      </asp:Content>
      <asp:Content ID="Content2" ContentPlaceHolderID="HolderMain" runat="server">
              <asp:ScriptManager ID="ScriptManager1" runat="server">
                  <Services>
                      <asp:ServiceReference Path="Services/Transition.svc" />
                  </Services>
              </asp:ScriptManager>
          <asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static"></asp:TextBox><br/>
          <asp:TextBox ID="TextBox2" runat="server" ClientIDMode="Static"></asp:TextBox><br/>
          <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="RetTest();" />
          <asp:Label ID="Label1" runat="server" Text="Label" ClientIDMode="Static"></asp:Label>
       
      </asp:Content>
      <asp:Content ID="Content3" ContentPlaceHolderID="HolderLeft" runat="server">
      </asp:Content>


    dd1 = document.getElementById("TextBox1").value;
    dd2 = document.getElementById('TextBox2').value; - тут работает
    WebS.transition.RetTest(dd1, dd2, OnSucceeded); - не чего не происходит
    не останавливается на контрольной точке в Transition.svc, классический вопрос, чю делаю не так?
      Я для этих целей использую класс, наследованный от WebServicе. Как создавать - написано здесь.

      После чего ссылка на asmx-файл помещается в ScriptManager на странице, и тогда из джаваскрипта доступны скриптметоды сервиса
        спс, по читаю
          мда. Чет у меня не черта не работает. Скачиваю 2012 студией демо проект WebChat - все работает прекрасно, там используется WCF сервис, все вроде тоже самое делаю не хочет работать. Дергаю другие демо - проекты Step by Step:How to use Web Services in ASP.NET AJAX Клиентский вызов веб-служб средствами AJAX Extensions и т.п. не получается запустить, в последнем даже код для скачивания есть, пустой (без файла проекта), создаю проект подкидываю файлы, в оригинале. Такого рода :
          ExpandedWrap disabled
            xr.open("GET", "services/StockQuote.ashx?symbol=" + stb.value, true);

          вызовы проходят нормально,

          такие:
          ExpandedWrap disabled
            MsdnMagazine.StockQuoteService.set_defaultSucceededCallback(OnLookupComplete);
            MsdnMagazine.StockQuoteService.set_defaultFailedCallback(OnError);
          не проходят. Такое ощущение что нужно либо в web.config прописать что-то, то ли не корректно студия или винда настроена.
          Но я больше склоняюсь к тому что службу нуно переписывать (толи привязывать к имени проекта или localhost)


          Сгенерировано автоматически, при создании файла WebService.asmx
          ExpandedWrap disabled
            Namespace WebService ' тут понятно что это пространство имен, имя унаследовано от имени файла при создании
                '<System.Web.Script.Services.ScriptService()> _ '
                <WebService(Namespace:="")> _ ' Namespace:="" что означает данная запись? и что должно быть прописано? везде по разному и я не нашел закономерности
                <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
                <Script.Services.ScriptService()> _
                Public Class ServerTime
                    Inherits System.Web.Services.WebService
             
                    <WebMethod()> _
                    Public Function GetServerTime() As String
                        Return String.Format("The current time is {0}.", DateTime.Now)
                    End Function
                End Class
            End Namespace


          по сути такой код должен вызываться из javascript:
          ExpandedWrap disabled
            <script type="text/javascript">
                function GetServerTime() {
                    //  __________________________ Namespace WebService
                    // |
                    // |            ______________ Public Class ServerTime
                    // |           |        
                    // |           |             _ Public Function GetServerTime() As String
                    // |           |            |
                    WebService.ServerTime.GetServerTime(OnSucceeded); // я все верно понимаю?
                }
                function OnSucceeded(result) {
                    var RsltElem = document.getElementById("Results");
                    RsltElem.innerHTML = result;
                }
            </script>

          прикол в том что демо проекты с запускаемым файлом (то есть проект целиком) работают нормально
          демо проекты без запускаемого файла Клиентский вызов веб-служб средствами AJAX Extensions Файлы проекта мне собрать не удается. Логично предположить служба должна быть четко привязана к проекту.
          от сюда вопрос как их правильно создавать?

          Добавлено
          Да кстати) с:
          Цитата UncleBob @
          Я для этих целей использую класс, наследованный от WebServicе. Как создавать - написано здесь.

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

          ExpandedWrap disabled
            Imports System.Web.Services
            Imports System.Web.Services.Protocols
            Imports System.ComponentModel
             
            ' Чтобы разрешить вызывать веб-службу из скрипта с помощью ASP.NET AJAX, раскомментируйте следующую строку.
            ' <System.Web.Script.Services.ScriptService()> _
            <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
            <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
            <ToolboxItem(False)> _
            Public Class srv
                Inherits System.Web.Services.WebService
             
                <WebMethod()> _
                Public Function HelloWorld() As String
                   Return "Здравствуй, мир!"
                End Function
                <WebMethod()> _
                Public Function FahrenheitToCelsius(ByVal Fahrenheit As Double) As Double
                    Return Fahrenheit + 10
                End Function
             
                <WebMethod()> _
                Public Function CelsiusToFahrenheit(ByVal Celsius As Double) As Double
                    Return Celsius * 2
                End Function
            End Class

          код работает так как описано, из браузера я ее вижу, и функции выполняет. В статье описано как использовать службу из другого проекта, мне это не нужно, мне необходимо из javascript того же проекта достучатся.
          Сообщение отредактировано: -=VIRUS=- -
            Цитата -=VIRUS=- @
            что означает данная запись? и что должно быть прописано?

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


            Цитата -=VIRUS=- @
            но я не нашел как использовать данную службу из javascript


            Цитата UncleBob @
            После чего ссылка на asmx-файл помещается в ScriptManager на странице, и тогда из джаваскрипта доступны скриптметоды сервиса

            :-?

            Добавлено
            и еще вот это конечно
            Цитата -=VIRUS=- @
            Чтобы разрешить вызывать веб-службу из скрипта с помощью ASP.NET AJAX, раскомментируйте следующую строку.
              Лан довай по другому, вот тестовый проект. подключено в ScriptManager раскомментирована строка разрешающая работу с javascript и не черта не работает.
              Проект HelloWorld :D :wall: >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( >:(
              ExpandedWrap disabled
                <script type="text/javascript">
                    function HelloWorld() {
                        WebService.HelloWorld(OnSucceeded);
                    }
                    function OnSucceeded(result) {
                        var RsltElem = document.getElementById("Results");
                        RsltElem.innerHTML = result;
                    }
                </script>

              Прикреплённый файлПрикреплённый файлWebService2.rar (49,75 Кбайт, скачиваний: 148)
              Сообщение отредактировано: -=VIRUS=- -
                WebService.asmx
                Цитата
                Class="WebService2.WebService"


                Добавлено
                Цитата -=VIRUS=- @
                WebService.HelloWorld


                почувствуйте разницу
                  ну я же во тут спрашивал:
                  ExpandedWrap disabled
                    //  __________________________ Namespace WebService
                    // |
                    // |            ______________ Public Class ServerTime
                    // |           |        
                    // |           |             _ Public Function GetServerTime() As String
                    // |           |            |
                    WebService.ServerTime.GetServerTime(OnSucceeded); // я все верно понимаю?


                  получается что должно быть

                  ExpandedWrap disabled
                         //  __________________________ Namespace WebService
                         // |
                         // |            ______________ Public Class ServerTime
                         // |           |        
                         // |           |             _ Public Function GetServerTime() As String
                         // |           |            |
                    проект.WebService.ServerTime.GetServerTime(OnSucceeded);


                  Добавлено
                  вот так заработало:
                  ExpandedWrap disabled
                    WebService2.WebService.HelloWorld(OnSucceeded);
                    Цитата -=VIRUS=- @
                    получается что должно быть

                    причем тут проект... WebService2 - это namespace, там хоть xep напиши, главное из скрипта вызвать правильно
                    Сообщение отредактировано: UncleBob -
                      Цитата UncleBob @
                      там хоть xep напиши

                      побывал, хер не подходит)

                      Цитата UncleBob @
                      причем тут проект... WebService2 - это namespace,

                      я не понимаю, почему WebService2 это namespace? в моем понимании проект это скорее класс нежили пространство имен

                      вот смотри так: добавил Namespace ASD
                      ExpandedWrap disabled
                        Imports System.Web.Services
                        Imports System.Web.Services.Protocols
                        Imports System.ComponentModel
                         
                        ' Чтобы разрешить вызывать веб-службу из скрипта с помощью ASP.NET AJAX, раскомментируйте следующую строку.
                        ' строка раскомментирована
                        Namespace ASD
                         
                            <System.Web.Script.Services.ScriptService()> _
                            <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
                            <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
                            <ToolboxItem(False)> _
                            Public Class WebService
                                Inherits System.Web.Services.WebService
                         
                                <WebMethod()> _
                                Public Function HelloWorld() As String
                                    Return "Здравствуй, мир!"
                                End Function
                         
                            End Class
                        End Namespace


                      функция перестала вызываться
                      пробую по разному
                      WebService2.WebService.HelloWorld(OnSucceeded);
                      WebService2.ASD.WebService.HelloWorld(OnSucceeded);
                      ASD.WebService.HelloWorld(OnSucceeded);

                      не как не хочет, почему? я во многих проектах видел как класс вкладывают в пространство имен, мне при таком раскладе не достучаться.
                        Цитата -=VIRUS=- @
                        я не понимаю, почему WebService2 это namespace?

                        потому что то, что написано перед именем класса - это неймспейс :-?

                        Цитата -=VIRUS=- @
                        в моем понимании проект это скорее класс нежили пространство имен

                        а в моем - набор файлов :lol:

                        Цитата -=VIRUS=- @
                        не как не хочет, почему?

                        потому что не надо смешивать все в кучу, сделай так, чтобы неймспейсы в asmx и vb совпадали, и все
                          :( :( :(
                          Цитата UncleBob @
                          потому что то, что написано перед именем класса - это неймспейс

                          Цитата UncleBob @
                          а в моем - набор файлов


                          аааа.... Во я нашел.
                          <%@ WebService Language="vb" CodeBehind="WebService.asmx.vb" Class="WebService2.WebService" %>

                          пло я эту строку нешел внешней прогай, Notepad++ >:( :wall: :wall:
                          не а в студии я ее типо угадать должен был? :wacko: :wacko: :wacko: писец какойто
                          как он это плять создал? я WebService2 писал 1 раз при создании проекта >:( >:( >:( >:( и почему я об этом узнаю открывая файл текстовым редактором :oops:

                          Добавлено
                          Лан главное я суть понял, след вопрос.
                          реально сюда
                          ExpandedWrap disabled
                            Public Class WebService
                                Inherits System.Web.Services.WebService
                          подключить сесии? без потери функционала.

                          ExpandedWrap disabled
                            Imports System.Web.SessionState
                            Public Class WebService
                                Inherits System.Web.Services.WebService, IRequiresSessionState ' так ругается мол Inherits принимает только 1 параметр
                                Implements System.Web.Services.WebService, IRequiresSessionState ' так ему System.Web.Services.WebService не нравится, тип должен представлять интерфейс


                          Добавлено
                          насколько я понял, доступа к сесии из javascript нету, то есть я немогу дернуть параметр из сесии и передать его в функцию веб сервиса.
                            Там атрибут какой-то используется, на память не помню, а щас не посмотреть.

                            Добавлено
                            Ну ты ленивый, гуглится же первым запросом. http://msdn.microsoft.com/ru-ru/library/sy...ce.session.aspx
                              :D сорь, спс я уже нашел) просто забыл тему зайти закрыть. Тысячу извинений. И я не ленивый :'(
                              Сообщение отредактировано: -=VIRUS=- -
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0636 ]   [ 18 queries used ]   [ Generated: 2.05.24, 06:14 GMT ]