将项目从.Net2.0转换为.Net4.0后,WebMethod调用失败

时间:2013-02-07 03:35:50

标签: javascript asp.net web-services

ASP.Net与C#项目由VS2005开发,在Windows Server2003下运行,带有IIS6。 在我们计划进行硬件升级时,我们尝试使用.Net4.0和IIS7将项目移至VS2012。 使用.Net4.0将解决方案从VS2005转换到VS2012并且转发到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();
    }
}

JavaScript调用WebMethod:

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 个答案:

答案 0 :(得分:0)

从IIS6迁移到IIS7时,web.config中需要few changes。 这是导致问题的最可能原因。

在IIS7中,您无法读取<httpHandlers><httpModules>。 您需要按如下方式为IIS7配置它们:

参考:Configuring 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检查请求并验证它是否有效。