我正在尝试安装其他人用 .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="data source=someip;initial catalog=db_90;User ID=user1;Password=access2;multipleactiveresultsets=True;App=EntityFramework"" 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 站点也能正常运行。