【问题标题】:Are HttpModules utilized when a .Net web service is called through the javascript proxy (AJAX)?通过 javascript 代理 (AJAX) 调用 .Net Web 服务时是否使用 HttpModules?
【发布时间】:2010-03-16 17:21:19
【问题描述】:

我正在使我们的大量 Web 服务可用于 AJAX 调用。我已将[System.Web.Script.Services.ScriptService] 添加到每个服务中。我们有一个已注册的 HttpModule,它初始化了一些我们经常在 IHttpModule.Init 覆盖中用于日志记录和国际化的对象。似乎在我向任何 Web 方法发出 SOAP 请求时调用了 IHttpModule.Init,但在我向任何 Web 方法发出 JSON 请求时却没有。我已经通过在调用文件时写入文件来确认这一点。

通过 javascript 代理 (AJAX) 调用 .Net Web 服务时是否使用 HttpModules?如果是这样,我是否缺少某种配置?相关代码位如下。

-科林-


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);
      }
    }
  }
}

【问题讨论】:

  • 您的部分代码似乎没有标记为代码,您可以重新格式化一下吗?
  • "通过 javascript 代理调用 .Net Web 服务时是否使用了 HttpModules?" -> 是的。问题出在其他地方。

标签: asp.net ajax web-services ihttpmodule


【解决方案1】:

这是一种非常奇怪的调试日志记录方法...您的问题很可能是由于您的 IIS 配置造成的。听起来 IIS 根本没有将请求交给 ASP.NET。检查您的映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多