OWIN(Windowsサービス内)を使用してWeb APIを自己ホストしました。私が理解していることから、これはHTTPリクエストをWindowsサービスに送るのに十分です。 WebAPI URL(http://localhost/users
)ローカル(同じマシンから)。ただし、他のマシンからは。ポート80を使用していますIISは停止しています。 IISが実行されている場合、IISのポート80でホストされている)他のWebサイトは正常に動作します。
// Windowsサービスで:
public partial class Service1 : ServiceBase
{
...
...
protected override void OnStart(string[] args)
{
Console.WriteLine("Starting service...");
string baseAddress = "http://localhost:80/";
WebApp.Start<Startup>(baseAddress); //This is OWIN stuff.
}
...
...
}
public class Startup
{
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-Host.
var config = new HttpConfiguration();
WebApiConfig.Register(config);
appBuilder.UseWebApi(config);
}
}
これを他のマシンから機能させるには、さらに何かする必要がありますか? (着信HTTPリクエストはWindowsサービスに転送されるのではなく、IISにのみ転送されるように感じます。ローカルでヒットした場合、おそらくHTTPリクエストをリッスンするOSモジュールを通過しません。
マシンのファイアウォールが着信要求をブロックしている可能性があります。できること:
wf.msc
コマンドを実行して、セキュリティが強化されたWindowsファイアウォールを開き、TCPポート80の新しい受信ルールを追加できます。
(World Wide Web Services...
で始まるインバウンドルールがいくつかあります。これらはIIS用です。これらのルールを有効にしても、Windowsサービスがリクエストを受信できるようになるかどうかはわかりません...これが以前に提案されたとおりに機能する場合は、新しいインバウンドルールを作成できます。
更新:
コメントに基づいて、URLの登録が原因でサービスにアクセスできない可能性があります。以下は、HttpListenerで複数のURLを登録するいくつかの例です。
StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:9095");
options.Urls.Add("http://127.0.0.1:9095");
options.Urls.Add(string.Format("http://{0}:9095", Environment.MachineName));
using (WebApp.Start<Program>(options))
{
URL登録の詳細については、次のリンクを参照してください。
http://technet.Microsoft.com/en-us/library/bb630429.aspx
http://technet.Microsoft.com/en-us/library/bb677364.aspx
Owinサービスで「localhost」とは異なるものを使用できないようにする2つのことがあります。
netsh http add urlacl url=http://*:9000/ user=<your user>
http://localhost:9000
または http://127.0.0.1:9000
または http://192.168.1.193:9000
-これは同じコンピューターのローカルIPアドレスでしたが、ファイアウォールにポート例外を追加して、別のコンピューターからこのサービスにアクセスできるようにする必要がありました)私は同様の問題に直面していました。以下のソリューションは私のために働いた。
StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:9095");
options.Urls.Add("http://127.0.0.1:9095");
options.Urls.Add(string.Format("http://{0}:9095", Environment.MachineName));
using (WebApp.Start<Program>(options))
{
...
}
これは、実際には単純な見落としでもあります。localhost、127.0.0.1などでリクエストをリッスンする場合、あなた(あなた)だけがあなたをそのターゲットとして理解するため、誰もそれを見ることができません。私のマシンではlocalhostであり、ポートでIPが必要な場合、そのサービスはlocalhostではなくget http:// your_ip:8 と表示されます。あなたがしなければならないのは、「http:// *:{0}」で提供することです。そうすれば、onStart()でポートを渡すことができます。
同様の問題。 ServiceStackサービスを作成し、AppSelfHostBase実装を使用してWindowsサービス内でホストしていました。注:これは、コンソールアプリケーションとしてコンパイルされるNet Coreアプリケーションとして作成されましたが、PeterKottas.DotNetCore.WindowsService(NuGetから入手可能)の魔法により、Windowsサービスとしてインストールできます。
BaseAddressをhttp://*.8088/に設定し、AppSelfHostBase実装に渡しましたが、メタデータページを開こうとすると確認されたように、インストール先と同じマシンからのみサービスにアクセスでき、他にはアクセスできませんでした( http:// [machine]:8088/api/metadata )ブラウザーで。解決策は、コンソールアプリケーションの.exeファイルを、インストールされたサーバー上のWindowsファイアウォールで許可されているアプリのリストに追加することでした。サーバーのコントロールパネルにあるファイアウォールの「許可されたアプリ」ダイアログに移動し、「別のアプリを許可...」ボタンをクリックして、Windowsサービスの実行可能ファイルに移動します。
最終的に私のために働いたのはこの値でした:
StartOptions options = new StartOptions();
options.Urls.Add("http://*:9095");
using (WebApp.Start<Program>(options))
{
...
}
これを追加した後は、管理モードを使用してのみVisual Studioでアプリケーションを実行でき、アプリのリリースバージョンも管理モードで実行する必要があることに注意してください。