在 IIS 7.5 上安装 .NET 应用程序的问题

在 IIS 7.5 上安装 .NET 应用程序的问题

我正在尝试安装其他人用 .NET 编写的 Web 服务。我对 IIS 有一些基本的了解。该 Web 服务在我的开发计算机上运行良好,但当我尝试将该 Web 服务移至生产服务器时,发生了一些不好的事情。

在开发服务器上,Web 服务位于C:\inetpub\wwwroot\。但在生产服务器上,它位于D:\services\

我已经成功在生产服务器上安装了一个应用程序,一切看起来都很好。但是当我Test Settings进行初始设置时,我收到一个Invalid application path错误。我可以关闭它并继续安装它,但是当我尝试访问 web 服务(at http://myserver.com/webservice/GetData)时什么也没有发生。只是一个空白页,当我检查响应标头时,出现了错误500

我不知道这里发生了什么,也不知道问题出在哪里。这是配置文件,所以有人可能会注意到一些奇怪的事情。

编辑:配置文件来自我的开发服务器。我刚刚将其复制到我的生产服务器...但这显然不起作用 :-)

更新:我注意到我的开发服务器在具有 Net 4 的应用程序池中运行,并且处于“经典”模式。在生产服务器上,它处于 NET 4,但处于“集成”模式。所以我将其更改为“经典”。我仍然得到一个空白页。但检查日志将输出以下内容:

2012-10-03 14:57:00ip 被移除获取 /boo/GetData - 80 -ip 被移除Mozilla/5.0+(Windows+NT+6.1;+WOW64;+rv:15.0)+Gecko/20100101+Firefox/15.0.1 404 2 1260 203

更新2: 谢谢你们的帮助。你们的评论帮助我找到了需要查找的内容。经过大量的日志查找和权限管理我找到了这个 Microsoft KB

在检查服务器级别的 ISAPI 和 CGI​​ 限制后,我发现不允许使用 .NET 4 和 .NET 4 64。在允许两者后,我的 Web 服务终于开始通信了。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <identity impersonate="true" />
    <!-- Impersonate NT AUTHORITY/IUSR -->
    <compilation targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7735c561131e089" />
      </assemblies>
    </compilation>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <httpErrors existingResponse="PassThrough" />
    <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
        <directoryBrowse enabled="false" />
  </system.webServer>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>
  <connectionStrings>
    <add name="Entities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=someip;initial catalog=db_90;User ID=user1;Password=access2;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

答案1

对于 stackoverflow.com 来说,这可能是一个更好的问题,但我现在会尝试一下。

从 IIS 角度来看,如果您能找出具体的 500 错误,那么它可能会提供重要线索。检查 c:\inetpub\logs\Logfiles\w3svc{siteid} 中的 IIS 日志。找到失败测试的记录,在记录末尾,您应该会看到 500{space}{something}{space}{something}。{something} 提供了进一步的线索。

另一个测试是在站点的根文件夹中创建一个简单的 test.aspx,并确保 IIS 站点也能正常运行。

相关内容