public static ITestHost CreateHost(HostType hostType, TransportType transportType, string testName, string url = null) { ITestHost host = null; string logBasePath = Path.Combine(Directory.GetCurrentDirectory(), ".."); switch (hostType) { case HostType.IISExpress: host = new IISExpressTestHost(testName); host.TransportFactory = () => CreateTransport(transportType); host.Transport = host.TransportFactory(); break; case HostType.External: host = new ExternalTestHost(url); host.TransportFactory = () => CreateTransport(transportType); host.Transport = host.TransportFactory(); break; case HostType.Memory: default: var mh = new MemoryHost(); host = new MemoryTestHost(mh, Path.Combine(logBasePath, testName)); host.TransportFactory = () => CreateTransport(transportType, mh); host.Transport = host.TransportFactory(); break; case HostType.HttpListener: host = new OwinTestHost(Path.Combine(logBasePath, testName)); host.TransportFactory = () => CreateTransport(transportType); host.Transport = host.TransportFactory(); break; } var writer = CreateClientTraceWriter(testName); host.ClientTraceOutput = writer; if (hostType != HostType.Memory && hostType != HostType.External) { string clientNetworkPath = Path.Combine(logBasePath, testName + ".client.network.log"); host.Disposables.Add(SystemNetLogging.Enable(clientNetworkPath)); string httpSysTracePath = Path.Combine(logBasePath, testName + ".httpSys"); IDisposable httpSysTracing = StartHttpSysTracing(httpSysTracePath); // If tracing is enabled then turn it off on host dispose if (httpSysTracing != null) { host.Disposables.Add(httpSysTracing); } } TraceListener traceListener = EnableTracing(testName, logBasePath); host.Disposables.Add(new DisposableAction(() => { traceListener.Close(); Trace.Listeners.Remove(traceListener); })); EventHandler <UnobservedTaskExceptionEventArgs> handler = (sender, args) => { Trace.TraceError("Unobserved task exception: " + args.Exception.GetBaseException()); args.SetObserved(); }; TaskScheduler.UnobservedTaskException += handler; host.Disposables.Add(new DisposableAction(() => { TaskScheduler.UnobservedTaskException -= handler; })); return(host); }
/// <summary> /// 使用しているリソースを解放 /// </summary> public void Dispose() { listener.Close(); listener.Dispose(); }