Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.229.253] |
|
Сообщ.
#1
,
|
|
|
Ну вот подошел к сервису
много много всего на гуглил и чет не снюхать мне javascript с webservice начинаю с простого, экспериментирую создаю сервис: Services/Transition.svc 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 код на форме: <%@ 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, классический вопрос, чю делаю не так? |
Сообщ.
#2
,
|
|
|
Я для этих целей использую класс, наследованный от WebServicе. Как создавать - написано здесь.
После чего ссылка на asmx-файл помещается в ScriptManager на странице, и тогда из джаваскрипта доступны скриптметоды сервиса |
Сообщ.
#3
,
|
|
|
спс, по читаю
|
Сообщ.
#4
,
|
|
|
мда. Чет у меня не черта не работает. Скачиваю 2012 студией демо проект WebChat - все работает прекрасно, там используется WCF сервис, все вроде тоже самое делаю не хочет работать. Дергаю другие демо - проекты Step by Step:How to use Web Services in ASP.NET AJAX Клиентский вызов веб-служб средствами AJAX Extensions и т.п. не получается запустить, в последнем даже код для скачивания есть, пустой (без файла проекта), создаю проект подкидываю файлы, в оригинале. Такого рода :
xr.open("GET", "services/StockQuote.ashx?symbol=" + stb.value, true); вызовы проходят нормально, такие: MsdnMagazine.StockQuoteService.set_defaultSucceededCallback(OnLookupComplete); MsdnMagazine.StockQuoteService.set_defaultFailedCallback(OnError); Но я больше склоняюсь к тому что службу нуно переписывать (толи привязывать к имени проекта или localhost) Сгенерировано автоматически, при создании файла WebService.asmx 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: <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 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 того же проекта достучатся. |
Сообщ.
#5
,
|
|
|
Цитата -=VIRUS=- @ что означает данная запись? и что должно быть прописано? разобрался бы ты уже с атрибутами классов, на каждом шагу про них спрашиваешь Цитата -=VIRUS=- @ но я не нашел как использовать данную службу из javascript Цитата UncleBob @ После чего ссылка на asmx-файл помещается в ScriptManager на странице, и тогда из джаваскрипта доступны скриптметоды сервиса Добавлено и еще вот это конечно Цитата -=VIRUS=- @ Чтобы разрешить вызывать веб-службу из скрипта с помощью ASP.NET AJAX, раскомментируйте следующую строку. |
Сообщ.
#6
,
|
|
|
Лан довай по другому, вот тестовый проект. подключено в ScriptManager раскомментирована строка разрешающая работу с javascript и не черта не работает.
Проект HelloWorld <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) |
Сообщ.
#7
,
|
|
|
WebService.asmx
Цитата Class="WebService2.WebService" Добавлено Цитата -=VIRUS=- @ WebService.HelloWorld почувствуйте разницу |
Сообщ.
#8
,
|
|
|
ну я же во тут спрашивал:
// __________________________ Namespace WebService // | // | ______________ Public Class ServerTime // | | // | | _ Public Function GetServerTime() As String // | | | WebService.ServerTime.GetServerTime(OnSucceeded); // я все верно понимаю? получается что должно быть // __________________________ Namespace WebService // | // | ______________ Public Class ServerTime // | | // | | _ Public Function GetServerTime() As String // | | | проект.WebService.ServerTime.GetServerTime(OnSucceeded); Добавлено вот так заработало: WebService2.WebService.HelloWorld(OnSucceeded); |
Сообщ.
#9
,
|
|
|
Цитата -=VIRUS=- @ получается что должно быть причем тут проект... WebService2 - это namespace, там хоть xep напиши, главное из скрипта вызвать правильно |
Сообщ.
#10
,
|
|
|
Цитата UncleBob @ там хоть xep напиши побывал, хер не подходит) Цитата UncleBob @ причем тут проект... WebService2 - это namespace, я не понимаю, почему WebService2 это namespace? в моем понимании проект это скорее класс нежили пространство имен вот смотри так: добавил Namespace ASD 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); не как не хочет, почему? я во многих проектах видел как класс вкладывают в пространство имен, мне при таком раскладе не достучаться. |
Сообщ.
#11
,
|
|
|
Цитата -=VIRUS=- @ я не понимаю, почему WebService2 это namespace? потому что то, что написано перед именем класса - это неймспейс Цитата -=VIRUS=- @ в моем понимании проект это скорее класс нежили пространство имен а в моем - набор файлов Цитата -=VIRUS=- @ не как не хочет, почему? потому что не надо смешивать все в кучу, сделай так, чтобы неймспейсы в asmx и vb совпадали, и все |
Сообщ.
#12
,
|
|
|
Цитата UncleBob @ потому что то, что написано перед именем класса - это неймспейс Цитата UncleBob @ а в моем - набор файлов аааа.... Во я нашел. <%@ WebService Language="vb" CodeBehind="WebService.asmx.vb" Class="WebService2.WebService" %> пло я эту строку нешел внешней прогай, Notepad++ не а в студии я ее типо угадать должен был? писец какойто как он это плять создал? я WebService2 писал 1 раз при создании проекта и почему я об этом узнаю открывая файл текстовым редактором Добавлено Лан главное я суть понял, след вопрос. реально сюда Public Class WebService Inherits System.Web.Services.WebService 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 нету, то есть я немогу дернуть параметр из сесии и передать его в функцию веб сервиса. |
Сообщ.
#13
,
|
|
|
Там атрибут какой-то используется, на память не помню, а щас не посмотреть.
Добавлено Ну ты ленивый, гуглится же первым запросом. http://msdn.microsoft.com/ru-ru/library/sy...ce.session.aspx |
Сообщ.
#14
,
|
|
|
сорь, спс я уже нашел) просто забыл тему зайти закрыть. Тысячу извинений. И я не ленивый
|