Я делаю наш большой набор веб-сервисов доступным для вызовов AJAX. Я добавил [System.Web.Script.Services.ScriptService]
к каждой услуге. У нас есть зарегистрированный HttpModule, который инициализирует некоторые объекты, которые мы регулярно используем для регистрации и интернационализации в переопределении IHttpModule.Init. Похоже, что IHttpModule.Init вызывается, когда я делаю SOAP-запрос к любому веб-методу, но не когда я делаю JSON-запрос к любому веб-методу. Я подтвердил это, записав файл при его вызове.
Используются ли модули HttpModules, когда веб-служба .Net вызывается через прокси-сервер javascript (AJAX)? Если так, то мне не хватает какой-то конфигурации? Соответствующие кодовые биты включены ниже.
-colin-
Web.config:
<httpModules><add name="GlobalApplicationModule" type="Common.GlobalApplicationModule, Common"/></httpModules>
HTTPModules.cs:
class GlobalApplicationModule : IHttpModule
{
public void Dispose()
{
Internationalization.LanguageProvider.ReleaseAllResources();
}
public void Init(HttpApplication application)
{
// DEBUG: Confirm that this method is called
StreamWriter writer = new StreamWriter("c:\\deleteme-HTTP_module_test.txt");
writer.WriteLine("Init called.");
writer.Close();
// Initialize logger
Common.Logger.Initialize("LogAssemblyPath", "LogClassName");
Common.CentralConfiguration.CreateConfiguration(new Common.CentralizedStrategy());
// Initialize language provider
if (!Internationalization.LanguageProvider.Initialized)
{
try
{
string debug = System.Configuration.ConfigurationManager.AppSettings["debugInternationalization"];
string languageAssemblyLocation = System.Configuration.ConfigurationManager.AppSettings["LanguageAssemblyLocation"];
string languageAssemblyBaseName = System.Configuration.ConfigurationManager.AppSettings["LanguageAssemblyBaseName"];
languageAssemblyLocation = System.Web.HttpContext.Current.Server.MapPath(languageAssemblyLocation);
Internationalization.LanguageProvider.Init(languageAssemblyLocation, languageAssemblyBaseName, false);
if (debug != null && bool.Parse(debug))
{
Internationalization.LanguageProvider.PrefixText = "*";
}
}
catch (Exception x)
{
Common.Logger.Instance.LogError("Could not intialize assembly language provider. Error: " + x.Message);
}
}
}
}