2

ASP.Net with C# Project 由VS2005 开发,在Windows Server2003 和IIS6 下运行。由于我们正在计划硬件升级,我们尝试将项目移动到带有 .Net4.0 和 IIS7 的 VS2012。解决方案从 VS2005 到 VS2012 与 .Net4.0 并部署到 IIS7 的转换是顺利的。该网站在 IE9 下运行良好,除了来自 javascript 的 WebMethod 调用抛出错误消息:500-服务器方法“LookupTest”失败。

这就是 WebMethod 部分:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class LookupMethods : System.Web.Services.WebService
{
    [WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public UNLookupResult LookupTest(int objectID)
    {
        return new UNLookupResult();
    }
}

对 WebMethod 的 JavaScript 调用:

this._WebRequest = Sys.Net.WebServiceProxy.invoke(this._SearchPath, "LookupContractTest", false, { "objectID":20 }, Function.createDelegate(this, this.LookupComplete), Function.createDelegate(this, this.LookupError));
  1. 我在IIS7下调试程序时无法调用LookupTest函数。
  2. 如果我修改 LookupTest 函数不带参数,它运行良好,没有任何错误。像这样: public UNLookupResult LookupTest()
  3. 该项目使用 AjaxControlToolkit.dll v1.1。如果项目使用.Net4.0会不会有问题?

任何提示或建议?提前致谢。

4

1 回答 1

0

从 IIS6 迁移到 IIS7 时,需要在 web.config中进行一些更改。这是您的问题的最可能原因。

在 IIS7 中不会读取您的<httpHandlers><httpModules>. 您需要为 IIS7 配置它们,如下所示:

参考:配置 Asp.net AJAX

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules>
    <add name="ScriptModule" 
      preCondition="integratedMode" 
      type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </modules>
  <handlers>
    <remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" 
      preCondition="integratedMode"
      type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <add name="ScriptHandlerFactoryAppServices" verb="*" 
      path="*_AppService.axd" preCondition="integratedMode"
      type="System.Web.Script.Services.ScriptHandlerFactory, 
      System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, 
      PublicKeyToken=31bf3856ad364e35"/>
    <add name="ScriptResource" preCondition="integratedMode" 
      verb="GET,HEAD" path="ScriptResource.axd" 
      type="System.Web.Handlers.ScriptResourceHandler, 
      System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, 
      PublicKeyToken=31bf3856ad364e35" />
  </handlers>
</system.webServer>

如果没有这些,您的 Web 服务代理将无法正常工作。
您可以使用fiddler检查请求并验证它是否有效。

于 2013-02-07T05:29:23.773 回答