我正在使用ASP.NET 5 RC中的属性路由,包含在Visual Studio 2013 RC版本中.
我想通过根路径,/导致规范/Home/Index路径,但我找不到一种方法只使用属性路由来做到这一点.是否有可能,如果不是,如果我也使用OWIN SelfHost,我将如何做?换句话说,我HttpConfiguration在WebApp.Start<T>方法中手动设置我自己的类(其中T有一个Configure(IAppBuilder)在启动时调用的方法)而不是通过该RouteTable.Routes对象.或者我应该通过RouteTable.Routes对象?当我尝试时,我没有太多运气...
编辑:这是我到目前为止所尝试的:
// normal Web API attribute routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultWeb",
routeTemplate: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)
下面的第二次尝试看起来有点可疑,因为我的HttpConfiguration对象与静态RouteTable.Routes对象的关系并不清楚:
// normal Web API attribute routes
config.MapHttpAttributeRoutes();
RouteTable.Routes.MapRoute(
name: "DefaultWeb",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud) asp.net-mvc self-hosting asp.net-mvc-routing owin visual-studio-2013
我有这个WCF自托管的WebSocket服务代码:
主要:
//Create a URI to serve as the base address
Uri httpUrl = new Uri("http://192.168.1.95:8080/service");
//Create ServiceHost
ServiceHost host = new ServiceHost(typeof(WebSocketService), httpUrl);
//Add a service endpoint
host.AddServiceEndpoint(typeof(IWebSocket), new NetHttpBinding(), "");
//Enable metadata exchange
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
//Start the Service
host.Open();
Console.WriteLine("Service is host at " + DateTime.Now.ToString());
Console.WriteLine("Host is running... Press <Enter> key to stop");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
接口:
namespace IWebSocketHostTest
{
[ServiceContract]
interface IWebSocketCallBack
{
[OperationContract(IsOneWay = true)]
void Send(int num);
}
[ServiceContract(CallbackContract …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Ninject创建一个带有OWIN自托管WebAPI的Windows服务.我得到了它的工作,但我不得不添加对system.web的引用,这似乎是错误的.没有对system.web的引用我得到了这些编译错误:
"System.Web.Routing.RouteCollection"类型在未引用的程序集中定义.您必须添加对程序集'System.Web,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.
类型'System.Web.Routing.Route'在未引用的程序集中定义.您必须添加对程序集'System.Web,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.
根据本文设置OWIN WebApi应用程序添加Ninject之后出现错误
我还必须将Microsoft.Owin限制为版本2.1.0,以便Ninject工作.在服务启动期间,Ninject正在寻找Owin 2.1.0.如果你得到最新的Microsoft.Owin它将滚动到3.0.
我正在使用的三个主要NuGet包是:
Microsoft.AspNet.WebApi.OwinSelfHost
Ninject.Web.Common.OwinHost
Ninject.Web.WebApi.OwinHost
这是我的所有包(请注意Microsoft.Owin上的约束)
<package id="Microsoft.AspNet.WebApi" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.2" targetFramework="net45" />
<package id="Microsoft.Owin" version="2.1.0" targetFramework="net45" allowedVersions="(,2.1]" />
<package id="Microsoft.Owin.Host.HttpListener" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="2.0.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" />
<package id="Ninject" version="3.2.2.0" …Run Code Online (Sandbox Code Playgroud) 我需要运行我的应用程序,它在IIS和.NET CLR自主机模式下提供一些ASP.NET Web API服务.我开发了基于OWIN的ASP.NET Web API服务,它在两台主机上运行良好.现在我需要这样的东西:
public class OwinContextInfrastructure
{
public static IOwinContext Current
{
get
{
if (HttpContext.Current != null)
{
return HttpContext.Current.GetOwinContext();
}
else
{
// What should I do here ?
return null;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中需要时获取当前的owin上下文.
我的代码在IIS上工作正常,但在.NET Self Host模式下我该怎么办?
关于自托管我有很多问题
自我托管Nuget
有2个nuget提供自托管:Microsoft.AspNet.WebApi.OwinSelfHost而且Microsoft.AspNet.WebApi.SelfHost,微软有2个实现自托管?或者他们是一样的?
Owin或Kitana
nuget的名字Microsoft.AspNet.WebApi.OwinSelfHost有OWIN,但据我所知,Owin是一个接口而Kitana是一个实现,实现的nuget是什么名字?
在生产中托管
我已经设法通过创建一个控制台来运行该示例.但是在部署到prod时,如何部署?运行exe并继续运行控制台,不能这样做.如果有人关闭那个控制台怎么办?那么应该作为Windows服务的一部分托管?或者还有其他方法吗?
我的印象是,我们实际上可以在实时服务器上运行一个控制台应用程序,该应用程序可以监听和提供数据(如果是为了这个目的,则是网页).这样,我们就不必在IIS上托管我们的Web应用程序了.我一直认为这就是"在你自己的过程中托管网络应用程序"的意思.
这是我认为相关的project.json的一部分:
"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5010"
},
Run Code Online (Sandbox Code Playgroud)
如果我转到命令提示符,dir到项目的根目录,然后运行dnx web,是的,确实,控制台应用程序正在运行,我可以转到我的浏览器并键入http:// localhost:5010并查看网站.
但是,当我将该URL更改为实际URL时(是的,我已经将DNS指向我的服务器以获取该URL),我将收到错误消息EACCES permission denied.
如果我们可以"自我托管"但只能使用localhost,这似乎只对本地开发有利.如果它不能用于实时/制作,为什么能够"在我自己的过程中自我托管"?
我需要做什么?我是否需要为特定文件夹设置一些权限?哪个用户/组,哪个权限,以及哪个文件夹?我在项目的根目录上尝试了IIS_IUSRS,当然,这不起作用,因为我还想绕过IIS.
任何帮助将不胜感激.
我试图使用下面的代码在Windows窗体应用程序中自我托管Web Api服务
namespace MascoteAquarium.Desktop
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute(
"DefaultApi", "api/{controller}/id", new { id = RouteParameter.Optional });
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMainMenu());
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试
http://localhost:8080/api/*(some-controller)*
Run Code Online (Sandbox Code Playgroud)
我在System.Web.Http.SelfHost.HttpSelfHostServer.ProcessRequestContext(ChannelContext channelContext,RequestContext requestContext)收到NullReferenceException.
有人知道发生了什么事吗?是否有可能在Win Forms应用程序内自托管?
我正在尝试为Web API项目进行一些单元测试.我要模拟web API托管环境.好像我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer).
只是想知道有什么区别,哪种技术对什么有好处,对这些选项有任何限制.
我有一个自我托管的Owin Web Api,我正在尝试使用每个Owin请求的EF Context的单个实例.这是我的启动类的配置代码.
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(A3Context.Create);
}
Run Code Online (Sandbox Code Playgroud)
这不会构建,因为我收到以下错误.
错误
5'Enterin.IAppBuilder'不包含'CreatePerOwinContext'的定义,并且没有扩展方法'CreatePerOwinContext'接受类型'Owin.IAppBuilder'的第一个参数'(你是否缺少using指令或汇编引用?)
我错过了一个我不知道的参考文献?
在我的网络应用程序中,我对长时间运行的任务执行操作,并且我想在后台调用此任务。因此,根据文档 .NET Core 3.1排队后台任务,我使用这样的代码:
public interface IBackgroundTaskQueue
{
ValueTask QueueBackgroundWorkItemAsync(Func<CancellationToken, ValueTask> workItem);
ValueTask<Func<CancellationToken, ValueTask>> DequeueAsync(CancellationToken cancellationToken);
}
public class BackgroundTaskQueue : IBackgroundTaskQueue
{
private readonly Channel<Func<CancellationToken, ValueTask>> _queue;
public BackgroundTaskQueue(int capacity)
{
var options = new BoundedChannelOptions(capacity){FullMode = BoundedChannelFullMode.Wait};
_queue = Channel.CreateBounded<Func<CancellationToken, ValueTask>>(options);
}
public async ValueTask QueueBackgroundWorkItemAsync(Func<CancellationToken, ValueTask> workItem)
{
if (workItem == null)throw new ArgumentNullException(nameof(workItem));
await _queue.Writer.WriteAsync(workItem);
}
public async ValueTask<Func<CancellationToken, ValueTask>> DequeueAsync(CancellationToken cancellationToken)
{
var workItem = await _queue.Reader.ReadAsync(cancellationToken);
return workItem;
}
}
Run Code Online (Sandbox Code Playgroud)
和托管服务
public …Run Code Online (Sandbox Code Playgroud) self-hosting ×10
c# ×5
owin ×5
asp.net ×3
.net ×2
iis ×2
.net-core ×1
asp.net-core ×1
asp.net-mvc ×1
iis-8 ×1
javascript ×1
katana ×1
ninject ×1
unit-testing ×1
wcf ×1
webserver ×1
websocket ×1
winforms ×1