私はIServerインターフェイスのカスタム実装とサンプルasp.netコアアプリをしたでは動作しません:カスタムIServerの実装には、次のようIISIntegration
namespace AspNetCoreAppWithOwinHttpListenerServer
{
public class Program
{
public static void Main(string[] args)
{
IWebHost host = new WebHostBuilder()
.UseHttpListener()
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
public class OwinHttpListenerServer : IServer
{
private IDisposable _HttpListenerServer;
public IFeatureCollection Features { get; } = new FeatureCollection();
public OwinHttpListenerServer()
{
Features.Set<IServerAddressesFeature>(new ServerAddressesFeature());
}
public void Start<TContext>(IHttpApplication<TContext> application)
{
Func<IDictionary<string, object>, Task> appFunc = async env =>
{
FeatureCollection features = new FeatureCollection(new OwinFeatureCollection(env));
TContext context = application.CreateContext(features);
try
{
await application.ProcessRequestAsync(context);
}
catch (Exception ex)
{
application.DisposeContext(context, ex);
throw;
}
application.DisposeContext(context, null);
};
appFunc = OwinWebSocketAcceptAdapter.AdaptWebSockets(appFunc);
Dictionary<string, object> props = new Dictionary<string, object>();
props["host.Addresses"] = Features
.Get<IServerAddressesFeature>()
.Addresses
.Select(add => new Uri(add))
.Select(add => new Address(add.Scheme, add.Host, add.Port.ToString(), add.LocalPath).Dictionary)
.ToList();
OwinServerFactory.Initialize(props);
_HttpListenerServer = OwinServerFactory.Create(appFunc, props);
}
public void Dispose()
{
_HttpListenerServer?.Dispose();
}
}
public static class OwinHttpListenerWebHostBuilderExtensions
{
public static IWebHostBuilder UseHttpListener(this IWebHostBuilder builder)
{
return builder.ConfigureServices(services =>
{
services.AddSingleton<IServer, OwinHttpListenerServer>();
});
}
}
}
それは、IISなしで正常に動作しますが、IISまたはIISExpress結果で実行されていますVSIISExeLauncher.exeによって「指定されたポートでリッスンしませんでした」。
カスタムサーバーをIISと互換性を持たせるにはどうすればよいですか? ありがとうございます。
GitHubのリポジトリ:https://github.com/ymoradi/AspNetCoreAppWithOwinHttpListenerServer
ええ、私はそれを知っています。しかし、自分の実装にも何か問題があると思います。私は、「やれ」も使うことができません。そのサーバーは.NETで完全に実装されており、.NET/WindowsのHTTP Listenerやhttp.sysに依存しません。 –
私の質問を削除できませんでした。私はNowinの実装で新しいものを開きます。私の最後のコメント、Nowinはhttp.sysに依存しません.HttpListener自体はhttp.sysに基づいています。これは私がそれを知らなかったことです。 (:ありがとう –