У вас есть ScriptManager на Мастер этой страницы?
В основном, есть два ключа для включения хорошего синтаксиса Namespace.Service.Method
: MicrosoftAjax.js и прокси-сервер JavaScript для конкретной службы.
Вы получаете MicrosoftAjax.js автоматически, когда у вас есть ScriptManager где-нибудь на странице (или его Master (s)).
Чтобы получить прокси JavaScript, вам потребуется либо ServiceReference в ScriptManager, либо JavaScript, который указывает, откуда он генерируется. E.g.:
<asp:ScriptManagerProxy>
<Services>
<asp:ServiceReference Path="/CalendarHandler.asmx" />
</Services>
</asp:ScriptManagerProxy>
<script>
// Speak.CalendarHandler.GetEvents() will be available here.
</script>
Все, что на самом деле делает, это внедряет скрипт, который доступен в /CalendarHandler.asmx/js
(или / jsdebug при запуске в режиме отладки). Это часть того, что разрешает атрибут ScriptService
в службе.
Итак, пока MicrosoftAjax.js уже внедряется откуда-то на странице, вы также можете просто добавить ссылку на скрипт для этого прокси-сервера JavaScript самостоятельно:
<script src="/CalendarHandler.asmx/js"></script>
<script>
// Speak.CalendarHandler.GetEvents() will be available here.
</script>
Обновление:
Если код генерации прокси-сервера службы не соответствует параметру Namespace
в атрибуте [WebService]
, можете ли вы вместо этого указать пространство службы с помощью ключевого слова namespace?
namespace Speak
{
[ScriptService]
public class CalendarHandler : WebService
{
[WebMethod]
public IDictionary<DateTime, string> GetEvents()
{
// Etc.
}
}
}
Я могу подтвердить, что этот подход влияет на сгенерированный прокси службы.