直接ではありません。
.NET-Coreアプリケーションを使用している場合、アプリケーションはIISではなくKestrellで実行されることがわかります。
IISで.NETコアアプリケーションをホストするために、AspNetCoreModuleは、ポートXで127.0.0.1のKestrellで.NETコアアプリケーションを起動し、iis-domain + virtualからトラフィックを逆プロキシしますディレクトリを127.0.0.1のポートXにコピーします(TCP以外のものを使用する可能性があります)。
問題1は、Kestrellはかなり限定された機能しか持たないため、仮想ディレクトリはありません。
問題2は、IISは、nginxとは異なり、実際にリバースプロキシを適切に実行しないか、「完全に」と言うべきですか?
IISはdomainxy:80〜127.0.0.1:random okrightを転送できます。 しかし、正しく動作しないのは、domainxy:80/fooから127.0.0.1:random(画像、ヘッダー、json-ajax-results、urls、return-urls、cookiesなど)を書き換えることです。 代わりに、domain:80/fooを127.0.0.1:random/fooに書き換えます。これは、127.0.0.1:random(Kestrell)のサーバーが仮想ディレクトリをサポートしていない場合に問題になります。
アプリケーションを仮想ディレクトリで実行したい場合は、2つの方法があります(それを行うことができる場合は、両方のアプリケーションを変更する必要があります):
1)すべてのものをディレクトリ "foo "(MVCコントローラのルートを含む)、あなたのアプリケーションが一度だけデプロイされる場合。 https://github.com/aspnet/Hosting/issues/416#issuecomment-149046552で示唆したように
2)あなたは、アプリケーション・フレームワークはkindofがRoRの中のように、あなたのためにそのフォルダをシミュレートすることができます:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
string virtual_directory = "/Virt_DIR";
// virtual_directory = "/";
if (virtual_directory.EndsWith("/"))
virtual_directory = virtual_directory.Substring(0, virtual_directory.Length - 1);
if (string.IsNullOrWhiteSpace(virtual_directory))
Configure1(app, env, loggerFactory); // Don't map if you don't have to
// (wonder what the framework does or does not do for that case)
else
app.Map(virtual_directory, delegate(IApplicationBuilder mappedApp)
{
Configure1(mappedApp, env, loggerFactory);
}
);
}
// Configure is called after ConfigureServices is called.
public void Configure1(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
[...] (here comes what used to be in your old Configure method)
あなたはどこかの仮想ディレクトリの名前を設定する必要があります。 JavaScript/ajax-requestsでURLを取得/返しても、自動的にマッピングされることはありません。あなたはこれを自分で行う必要がありますが、それは以前のASP.NETでもこの方法でした。 RoRのような本当に
、:
マップRails.application.config。relative_url_root || "/" アプリケーション内の仮想ディレクトリについては
実行RedmineApp ::アプリケーション
エンド
の操作を行います。 いいえ、これはそれほど単純ではありません。
IISは完全なWebサーバーであり、そこにあったように(コンテンツを読むことができる場合)そのマップされたディレクトリのコンテンツを提供します。
あなたはKestrellに全体の親ディレクトリを転送する場合は、IISはサブディレクトリを提供することはできません、あなたがしているアプリケーションは、それを行う必要があります。つまり、特定のディレクトリの静的ファイルサーバーをセットアップして、ファイルの場所を指定する必要があります。
あなたができることは、特定の仮想サブディレクトリをプロキシしないようにすることです(IISがおそらくその機能をサポートしていないことを除けば、nginxで静的ファイルの場所を定義できるのと同じです)。
しかし、Windowsがその(mklink)を使用できる場合は、ネットワークディレクトリに移動するアプリケーションディレクトリ内にシンボリックリンクを作成することができます。その後、.NET Coreは静的にサービスを提供できるはずです。しかし、実際には、それはハックのように聞こえる。
IISを設定できない場合は、実際にはapp.UseFileServer()を使用して、データベース内のドキュメントの場所を定義する必要があります。あなたはちょうど&を削除して後でアプリケーションを再挿入することができます。
wwwrootフォルダ内でネットワーク共有を指し示すシンボリックリンクを作成しようとしましたか? – Tseng
@Matthias - 道を見つけましたか?私はまったく同じ状況にあります... – Felix
はい: 'app.UseFileServer()'でFileServerMiddlewareを使用してください。 AspNetCoreModuleのおかげで、IIS仮想ディレクトリと仮想アプリケーションが動作しないので、ASP.NET Coreでこれを行う方法です。 – Matthias