Если вы используете JavaScript для вызова веб-сервиса в .net, вам необходимо использовать поведение веб-сервиса. Ниже приведен пример для объяснения. Он относительно прост
. 1. Сначала создайте веб-сервис, например
<%@ WebService Language="C#" class=MyMath %>
использование системы;
использование System.Web.Services;
публичный класс MyMath {
[Веб-метод]
public int add(int a, int b)
{
вернуть а + б;
}
[Веб-метод]
public int вычитание (int a, int b)
{
вернуть а-б;
}
}
Затем опубликуйте его и сначала получите его wsdl.
2. Для начала нам необходимо скачать файл webbehavior.htc (можете перейти по адресу http://msdn.microsoft.com/downloads/samples/internet/behaviors/library/webservice/default.asp .)
Загрузите его и поместите в текущий каталог вашего веб-сайта. Затем на странице, на которой вы хотите вызвать веб-сервис, измените его следующим образом.
<тело>
<div id="addservice" style="behavior:url(webservice.htc)"></div>
</тело>
Здесь мы называем идентификатор div чем-то осмысленным и указываем стиль как поведение веб-сервиса. Далее нам нужно написать JavaScript для вызова веб-сервиса:
Сначала мы вызываем его wsdladdservice.useService(" http://localhost/services/math.asmx?WSDL", "MyMath ");
Используйте id.useService(путь WSDLL, простой метод именования);
Ранее мы установили идентификатор addservice, и чтобы клиенту было проще его вызывать, мы назвали его MyMath. Чтобы гарантировать корректный вызов веб-сервиса, Javascript, который обрабатывает вызовы веб-сервиса, должен быть немедленно загружен в событии onload в теле, как показано ниже.
<script Language="JavaScript">
функция инициализации()
{
addservice.useService(" http://localhost/services/math.asmx?WSDL", "MyMath " });
</скрипт>
<body onload="init()">
<div id="service" style="behavior:url(webservice.htc)">
</div>
</тело>
В приведенном выше поведении веб-сервиса мы сначала получаем wsdl, который возвращает веб-сервис. Далее нам нужно выполнить вызов. Формат вызова следующий: iCallID = id.FriendlyName.callService([CallbackHandler,] "MethodName" , Парам1, Парам2, ..);
Здесь id — это идентификатор, который мы установили в элементе div, а FridndbyName — это имя, которое мы только что назвали для аспекта, здесь — MyMath, а CallbackHandler — это имя процесса функции обратного вызова. Если настройка отсутствует, по умолчанию используется onresult. для его вызова используется метод, о котором речь пойдет ниже, а param1, param2 и т.д. относятся к входным параметрам, например:
<SCRIPT Language="JavaScript">
// Все эти переменные должны быть глобальными,
// потому что они используются как в init(), так и в onresult().
вар iCallID = 0;
варинтА = 5;
вар intB = 6;
функция инициализации()
{
// Устанавливаем понятное имя «MyMath» для WebServiceURL
service.useService("/services/math.asmx?WSDL","MyMath");
// В следующем методе не указан обработчик обратного вызова, поэтому используется onWSresult()
iCallID = service.MyMath.callService("добавить", intA, intB);
}
функция onWSresult()
{
// если произошла ошибка и вызов поступил из call() в init()
if((event.result.error)&&(iCallID==event.result.id))
{
// Извлекаем информацию об ошибке из свойств event.result.errorDetail
вар xfaultcode = event.result.errorDetail.code;
вар xfaultstring = event.result.errorDetail.string;
вар xfaultsoap = event.result.errorDetail.raw;
// Добавьте сюда код для обработки определенных кодов ошибок
}
// если ошибки не было и вызов поступил из call() в init()
иначе if((!event.result.error) && (iCallID == event.result.id))
{
// Показываем арифметику!
alert(intA + ' + ' + intB + ' = ' + event.result.value);
}
еще
{
alert("Событие было вызвано чем-то другим!");
}
}
</СКРИПТ>
<body onload="init()">
<div id="service" style="behavior:url(webservice.htc)" onresult="onWSresult()">
</div>
</тело>
Обратите внимание: если вы используете метод onresult для возврата, вы должны указать метод обработки в onresult части div. Здесь используется метод onWsresult(), в котором возвращаемая информация используется для определения наличия ошибки. Если возникает ошибка, она отображается.
Если используются обратные вызовы, действуйте следующим образом
<SCRIPT Language="JavaScript">
// Все эти переменные должны быть глобальными,
// потому что они используются как в init(), так и в onResult().
вар iCallID = 0;
варинтА = 5;
вар intB = 6;
функция инициализации()
{
// Устанавливаем понятное имя «MyMath» для WebServiceURL
service.useService("/services/math.asmx?WSDL","MyMath");
// Ниже используется обработчик обратного вызова с именем "mathResults"
iCallID = service.MyMath.callService(mathResults, «добавить», intA, intB);
}
функция mathResults(результат)
{
// если произошла ошибка и вызов поступил из call() в init()
если (результат.ошибка)
{
// Извлекаем информацию об ошибке из свойств event.result.errorDetail
вар xfaultcode = result.errorDetail.code;
вар xfaultstring = result.errorDetail.string;
вар xfaultsoap = result.errorDetail.raw;
// Добавьте сюда код для обработки определенных кодов ошибок
}
// если не было ошибки
еще
{
// Показ арифметики
alert(intA + ' + ' + intB + " = " + result.value);
}
}
</СКРИПТ>
<body onload="init()">
<div id="service" style="behavior:url(webservice.htc)">
</div>
</тело>