Web Services c#.net Restful API适用于调试/发布,但不适用于IIS

wh6knrhe  于 8个月前  发布在  C#
关注(0)|答案(2)|浏览(88)

我在C#. net中创建了一个restful API应用程序。当我通过iisexpress在调试或发布模式下编译我的应用程序时。它按预期工作。我可以使用fiddler并在“GET”中传递相应的参数,如用户凭据,它将连接并获得200的响应(http://localhost:49917/v2/Carriers).当我发布应用程序并将其部署到IIS中时,(http://api.test1.net/v2/Carriers). IIS是安装在我编译应用程序的同一台计算机上。然后,我使用fiddler并传递必要的参数,我得到了503的响应。我不知道为什么不工作。我的应用程序池是以下设置:. NET版本:v4.0托管管道模式:集成身份:LocalService(我也尝试过ApplicationPoolIdentity)
当我发布我的应用程序时,我使用以下发布方法:“文件系统”。
我已经在主机文件中添加了IP地址和主机名(windows/system32/drivers/etc/)。我不知道为什么不工作。
是什么让visual studio在调试/发布模式下与发布版本不同?

wnrlj8wa

wnrlj8wa1#

我想让你们知道我做了你们推荐的事情,我找到了答案。我需要在SQL Server数据库中添加一个新用户。
“在IIS APPPOOL\ASP.NET v4.0下删除数据库由于我们正在使用ASP.NET v4.0应用程序池,请确保IIS APPPOOL\ASP.NET v4.0已添加到数据库服务器->安全->登录。”
在我添加了这个新用户“IIS APPPOOL\api.test1.net“之后,API get请求与fiddler一样工作,并得到200响应。“api.test1.net”是我在IIS中的应用程序池的名称。
感谢您发送编修。

vof42yt1

vof42yt12#

我遇到了同样的问题,并找到了一篇关于IIS 7.5或更高版本引起的确切问题的Microsoft文章,并且SQL Server的用户示例已打开。
要将此日志修复到IIS服务器中,并转到无法工作的API的应用程序池设置,例如DefaultAppPool V4.0 -在高级设置下,找到“进程模型-设置加载用户配置文件= true”部分。
Microsoft帮助页面:Application Pool Identities and SQL Server Express
还需要更新web.config以添加,如下所示

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0" 
         path="*."
         verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
         type="System.Web.Handlers.TransferRequestHandler"
         preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\Project.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

相关问题