我按照官方指南将我的aspnet核心应用程序发布到IIS服务器,当我将IIS的主机名和IP放在我自己机器的hosts文件中时,一切正常。
然而,现在它已经准备就绪,我需要网络上的其他人也可以访问它,所以我将主机名放在网络DNS中,就像我通常对我的所有网站一样。
但是现在我根本无法访问应用程序 - 我认为这是因为IIS-Kestrel反向代理,因为IIS服务器现在正在尝试使用DNS A记录查找请求,只是指出自己。
如何使这项工作,以便我可以使用网络DNS记录?
更新
问题似乎是主机名中的特殊字符(特别是ø)。
将绑定和网络DNS更改为不包含此特殊字符的主机名似乎有效。
设置:
http://mysite.domain.dk上的IIS绑定(80)
我们的网络DNS中没有DNS记录,我可以通过将ip / hostname放入我的hosts文件并浏览http://mysite.domain.dk
来访问我的自己的计算机上的应用程序只要我将A记录放入网络DNS,我就无法联系到它。
我(当然)无法从IIS服务器访问应用程序而服务器主机名中没有任何条目,因为服务器不知道在哪里指向http://mysite.domain.dk - 但是,当我放入绑定时到本地服务器网络IP(192.168.17.73)我可以从服务器和客户端到达它。
放入网络DNS中的A记录我仍然可以从IP到达应用程序 - 服务器和客户端,但无法通过主机名访问它。
修改:代码和设置
Program.cs的
var host = new WebHostBuilder()
.UseUrls("http://localhost:4561")
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
project.json
{
"dependencies": {
"Microsoft.AspNetCore.Diagnostics": "1.1.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
"Microsoft.Extensions.Logging.Console": "1.1.0",
"Microsoft.AspNetCore.Mvc": "1.1.0",
"Microsoft.AspNetCore.Mvc.Formatters.Xml": "1.1.0",
"Microsoft.AspNetCore.StaticFiles": "1.1.0",
"Microsoft.EntityFrameworkCore": "1.1.0",
"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.1.0-preview4-final",
"type": "build"
},
"SimpleImpersonation": "2.0.1"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final"
},
"frameworks": {
"net452": {
"frameworkAssemblies": {
"System.Configuration": "4.0.0.0"
}
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"publishOptions": {
"include": [
"wwwroot",
"web.config",
"Views",
"logs",
"app.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
-->
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
<httpErrors existingResponse="PassThrough"></httpErrors>
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=---;Initial Catalog=---;User ID=---;Password=---" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>