标签: katana

是否可以使用Katana在WinForms应用程序中托管现有的WebForms应用程序?

最近我读了很多关于OWIN和Katana的内容,并尝试过" 使用OWIN自我托管ASP.NET Web API " 等示例.

我目前对于是否可以使用这些技术来托管现有的WebForms ASP.NET应用程序而不使用任何IIS,完全在桌面应用程序(WinForms或控制台)中是无能为力的.

也就是我拥有的东西:

在此输入图像描述

(用户通过Internet上的Web浏览器访问的现有Web应用程序)

这就是我想要实现的目标:

在此输入图像描述

(相同的现有Web应用程序文件,在Katana进程中本地托管,并通过localhost URL通过Web浏览器访问)

这对我们的应用程序的两个版本(Web和Windows)很有帮助.

我的问题:

今天或不久的将来有可能创造这样的场景吗?

.net webforms winforms owin katana

5
推荐指数
1
解决办法
2154
查看次数

System.Web.Http.WebHost中的GlobalConfiguration与Owin兼容吗?

我目前正在使用OWIN将WebApi 1移动到WebApi 2项目.

在这段代码中,GlobalConfiguration位于System.Web.Http.WebHost中.

public class HandlerErrorFilterAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        var logFactory = GlobalConfiguration.Configuration.DependencyResolver
                            .GetService(typeof(ILoggerFactory)) as ILoggerFactory;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这不是Owin兼容,但我找不到如何重写这个,所以我可以访问依赖解析器.

asp.net-web-api owin katana

5
推荐指数
1
解决办法
2634
查看次数

与nuget捆绑在一起时,OWIN Webapi应用程序收到“ System.ArgumentException无可用转换...”

我正在尝试设置一个自托管的OWin应用程序(使用VS2012)-我认为它已经关闭,因为我可以从包含.csproj的目录中运行OwinHost.exe,并且应用程序可以从localhost:5000正确进行服务。我创建了一个默认的nuspec文件,并添加了以下内容

<files>
  <file src="bin\*.dll" target="bin" />
  <file src="views\home\home.html" target="content" />
  <file src="web.config" target="content" />
</files>
Run Code Online (Sandbox Code Playgroud)

在AssemblyInfo.cs中

[assembly: OwinStartup(typeof(TestA.Startup))]
Run Code Online (Sandbox Code Playgroud)

当我安装软件包(nuget install mypackage)时,出现以下错误...

从默认端口开始:5000 ...

Error:  System.ArgumentException
No conversion available between 
System.Func`2[System.Collections.Generic.IDictionary`2[System.String,System.Object],
System.Threading.Tasks.Task] and Microsoft.Owin.OwinMiddleware. 
Parameter name: signature
Run Code Online (Sandbox Code Playgroud)

让我知道您是否需要更多信息

干杯!

c# owin katana

5
推荐指数
1
解决办法
1641
查看次数

为什么ASP.NET SPA模板会为所有请求实例化UserManager一次?

我正在使用VS2013 ASP.NET SPA模板作为我的Web应用程序的起点,它使用新的ASP.NET身份框架.这是来自模板:

public partial class Startup
 {
     static Startup()
     {
     UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
....
}
Run Code Online (Sandbox Code Playgroud)

因此,由于没有将DbContext传递到上面的UserStore构造函数,这表明正在创建一个新的DbContext.由于我也想利用数据上下文(对于请求期间的其他数据操作),我稍微更改了模板代码:

public partial class Startup
 {
public static DerivedDbContext=null;

    static Startup()
    {
   context = new DerivedDbContext();
           UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(context));
...
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以通过以下方式从我的任何控制器使用相同的DbContext:

Startup.context
Run Code Online (Sandbox Code Playgroud)

但是,当多个请求同时进入时我遇到了麻烦,因为无关的操作发生在同一个DbContext中.从这里开始,我向我指出,我不应该在应用程序的整个生命周期中实例化单个DbContext,而只是为了特定请求的生命周期,所以我将实例化移动到控制器的构造函数,但现在,我在控制器中有自己的DbContext,而UserManager仍然有自己的(并且在Startup类中创建).

为什么模板为所有用户(在Startup类中)实例化了一次UserManager?值得关注的是,通过在控制器构造函数中创建自己的DbContext,有两个DbContexts(我在控制器的构造函数中创建的那个,以及在UserManager中创建的那个,在Startup类中创建的)同时播放?在所有请求中共享一个UserManager是否可以接受,但在一般情况下在所有请求中共享一个DbContext是不可接受的?

有两个单独的上下文似乎是愚蠢的,我注意到我有时会得到一个不同步的数据视图.我想了解是否有其他人在使用此模板时遇到此问题.

**编辑:我理解像nInject这样的IOC框架可能有助于在这种情况下管理对象生命周期,但我想首先了解如何在没有这种框架的帮助下实现这一目标.

谢谢... - 贝恩

entity-framework asp.net-web-api katana visual-studio-2013 asp.net-identity

5
推荐指数
1
解决办法
2663
查看次数

OwinMiddleware而不是webapi中的消息处理程序

我正在开发一个webapi项目,现在我们正在迁移到owin-katana自托管.OwinMiddleware的行为与MessageHandlers相同.所以我的问题是,如果我们使用Owin-katana托管,那么我们是否需要在webapi中使用OwinMiddleware而不是消息处理程序?

请澄清 ?

c# asp.net-web-api owin katana

5
推荐指数
1
解决办法
1466
查看次数

使用ClientId和ClientSecret进行Web API授权

我在我的web api授权中使用OWIN/Katana中间件.

流动.

我发布acess_tokenrefresh_token请求的客户端.

access_token有短暂的寿命,而refresh_token早已到期.

像往常一样,如果access_token到期,它将使用refresh_token请求另一个access_token.

现在,我的问题.由于我的refresh_token有很长的生命周期,看起来它失败了短命的access_token的目的.让我们说如果refresh_token被泄露,黑客仍然可以得到access_token,对吧?

我查看了谷歌和微软的OAuth实现,看起来他们还有这个额外的参数,你需要提供除了refresh_token.这就是client_idclient_secret.看起来它们是在API的开发者页面上登录时生成的.

现在,我如何在我的项目中实现它?我想要覆盖令牌创建并使令牌哈希基于ClientIdClientSecret.

我正在使用最新的web api的基本OWIN/Katana身份验证,我不打算使用像Thinktecture这样的其他授权服务器.我只想使用ASP.NET Web API 2默认提供的基本功能

Startup.OAuth.cs

public partial class Startup
{
   static Startup()
   {
      PublicClientId = "self";
      UserManagerFactory = () => new UserManager<IdentityUser>(new AppUserStore());
      var tokenExpiry = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["ApiTokenExpiry"]);

      OAuthOptions = new OAuthAuthorizationServerOptions
      {
          TokenEndpointPath = new PathString("/Token"),
          Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
          AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
          AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(tokenExpiry),
          AllowInsecureHttp = true,
          RefreshTokenProvider …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-web-api owin katana asp.net-mvc-5

5
推荐指数
1
解决办法
8396
查看次数

停止自托管owin服务器时完成当前请求

我有OWIN服务器作为控制台应用程序的一部分.你可以在这里看到主要方法:

class Program
{
    public static ManualResetEventSlim StopSwitch = new ManualResetEventSlim();

    static void Main(string[] args)
    {
        Console.CancelKeyPress += (s, a) =>
        {
            a.Cancel = true;
            StopSwitch.Set();
        };

        using (WebApp.Start<Startup>("http://+:8080/"))
        {
            Console.WriteLine("Server is running...");
            Console.WriteLine("Press CTRL+C to stop it.");
            StopSwitch.Wait();
            Console.WriteLine("Server is stopping...");
        }

        Console.ReadKey();
        Console.WriteLine("Server stopped. Press any key to close app...");
    }
}
Run Code Online (Sandbox Code Playgroud)

当请求的处理稍微长一点并且同时用户按下CTRL + C以停止应用程序时,立即停止请求处理并且不发送响应.是否有可能改变这种行为?我想拒绝所有新请求,但要等到当前正在处理的请求完成并在此之后停止服务器.

我最初的想法是创建OWIN中间件,它将跟踪当前正在处理的请求并推迟停止操作直到一切都完成.中间件还会在停止阶段将所有请求短路.但这个解决方案对我来说听起来不太好.

.net c# self-hosting owin katana

5
推荐指数
1
解决办法
2399
查看次数

自定义OWIN/Katana UserManager工厂行为

有很多样本在线使用OWIN/Katana根据用户名/密码组合在数据库中查找用户并生成索赔主体,例如...

var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
// generate claims here...
Run Code Online (Sandbox Code Playgroud)

如果您正在创建一个新的应用程序并希望实体框架执行脏工作,那就没问题.但是,我有一个八年历史的单片网站刚刚更新,使用基于声明的身份验证.我们的数据库命中是通过DAL/SQL手动完成的,然后从那里生成ClaimsIdentity.

有些人建议OWIN比我们的手动方法更容易使用,但我想从那些使用它的人那里得到一些输入.

是否可以根据凭据更改UserManager工厂查找用户的方式?或者,我错过了另一种方法吗?我在网上找到的所有样本似乎都使用样板方法让Entity Framework创建数据库并管理搜索.

asp.net entity-framework owin katana asp.net-identity

5
推荐指数
1
解决办法
5095
查看次数

使用OnValidateIdentity对cookie数据执行其他验证

Brock Allen的博客中,他表示

CookieAuthenticationOptions类具有Provider属性...并且它具有您可以订阅的委托的属性.这允许您在进入应用程序时验证cookie(OnValidateIdentity).在此回调中,您可以拒绝或替换身份.

我是OWIN和C#的新手,所以我正在努力调整OnValidateIdentity我在网上发现的许多例子以满足我的需求.在每个"私人"网页上接受cookie有效后,我想检查以下内容:

  1. 该cookie包含至少一个声明
  2. CustomerId声明值大于零

我可以用普通方法实现这两个检查,但我无法弄清楚如何挂钩登录OnValidateIdentity.这是我到目前为止所拥有的:

我写了一些代码,但无法弄清楚需要从使用的方法返回什么.

public void Configuration(IAppBuilder app)
{
    dynamic cookieExpirationPeriod = TimeSpan.FromMinutes(60);

    CookieAuthenticationProvider prov = new CookieAuthenticationProvider();
    prov.OnValidateIdentity = ctx =>
    {
        MyClaimsIdentityObject si = MyApp.Identity.Current();
        if (si == null || si.UserId == 0 || si.CustomerId == 0) {
            ctx.RejectIdentity();
            // what needs to happen here for a return value?
        }
    };


    CookieAuthenticationOptions coa = new CookieAuthenticationOptions {
        AuthenticationMode = AuthenticationMode.Active,
        CookieName = "MyApp",
        ExpireTimeSpan = cookieExpirationPeriod,
        SlidingExpiration = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net owin katana

5
推荐指数
1
解决办法
4198
查看次数

自托管Owin/Katana应用程序中的多个Web应用程序

我正在开发一个使用Katana来公开自托管WebAPI服务的应用程序.我想管理内容的方式与IIS在单个网站下允许多个应用程序的方式类似.

例如,我可能有三个包含web api内容的文件夹:

  • C:\ SelfHost \应用1
  • C:\ SelfHost \应用2
  • C:\ SelfHost \程序App3

这些文件夹中的每一个都是独立的应用程序,包括web.config,控制器,路由等.

我可以为每个实例生成一个新的Owin实例,但这需要单独的端口.使用IIS,我可以配置单独的应用程序,以便http:// localhost:8080/App1将路由到第一个应用程序,http:// localhost:8080/App2将路由到第二个应用程序,依此类推.与Owin/Katana有什么相似之处吗?

owin katana

5
推荐指数
1
解决办法
1314
查看次数