我已经在可怕的"错误19"上尝试了所有其他帖子,并发现少数答案不适用或没有帮助,因此这篇新帖子.对于所有Azure + EF用户来说,这是一个非常严重的潜在问题.
我正在使用VS2013 EF6.1 Razor项目中的所有内容的最新版本(最后列出的软件包).该数据库托管在SQL Azure上.
运行我的webapp几次后(在开发环境中)我收到此错误: A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable)
它死的线总是如此:

我收集错误与连接池(和连接用完)有关,但我无法在任何地方发现泄漏.
当我访问整个应用程序中的OWIN成员资格和其他数据库功能时,我有一个DatabaseContoller所有其他控制器继承的.这将创建所有相关组件并处理它们.
[Authorize]
public class DatabaseController : Controller
{
#region properties
/// <summary>
/// User manager - attached to application DB context
/// </summary>
protected UserManager<ApplicationUser> UserManager { get; set; }
/// <summary>
/// Role manager - attached to application DB context
/// </summary>
protected …Run Code Online (Sandbox Code Playgroud) 我正在开发AngularJS,Web API,SignalR应用程序的原型,作为VS 2013中新项目的潜在起点.
在这个阶段,我几乎使用visual studio为个人用户帐户生成的预制代码.
StartUp.Auth.cs代码中有一行看起来像这样.
app.UseOAuthBearerTokens(OAuthOptions);
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以将[Authorize]属性添加到控制器,它工作正常.
顺便说一句,使用angular我可以在JavaScript中添加包含令牌的标准头,如下所示.
$http.defaults.headers.common.Authorization = 'bearer ' + access_token;
Run Code Online (Sandbox Code Playgroud)
然后我将SignalR添加到项目中.
它支持自己的[Authorize]属性版本,但在使用SignalR时无法传递自定义标头.
这是浏览器方面的限制.
文档说您可以将令牌作为查询字符串的一部分传递.
我在JavaScript方面添加了该代码.我的SignalR代码现在包含了这个.
我将令牌传递为'bearer_token'.
this.connection = $.hubConnection("/TestHub", { useDefaultPath: false, qs: "bearer_token=" + token });
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何使OWIN识别令牌现在它不再在标题中.
经过多次搜索后,我最终添加了将令牌从查询字符串移动到标题中的代码.
对于我的原型,我刚刚在StartUp.Auth.cs的原始行上面添加了一些代码.
所以,现在它看起来像这样:
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
Provider = new OAuthBearerAuthenticationProvider()
{
OnRequestToken = context =>
{
if (context.Request.Path.Value.StartsWith("/TestHub"))
{
string bearerToken = context.Request.Query.Get("bearer_token");
if (bearerToken != null)
{
string[] authorization = new string[] { "bearer " + bearerToken };
context.Request.Headers.Add("Authorization", authorization);
}
}
return Task.FromResult(context);
}
} …Run Code Online (Sandbox Code Playgroud) 先发帖所以要温柔!:)
我正在为Office 365开发一个MVC .NET 5 Web应用程序,并且正在使用OpenIDConnect框架.我已经设置了OWIN(3)和ADAL(2)以及我的Azure AD应用程序.没有用户操作登录,家庭控制器附加了[Authorize]属性,强制立即登录重定向到Azure AD.我没有在任何Authorize属性中使用角色.
问题:我可以成功登录我的应用程序 - 一次!首次登录后,我关闭浏览器(或在另一台机器上打开一个新浏览器),然后再次点击该应用程序.它将我重定向到我登录的Azure AD登录屏幕,然后它不断在应用程序和Azure之间重定向,直到我得到臭名昭着的400个标题为长期问题.看着饼干商店,我发现它充满了疙瘩.我检查了缓存(Vittorio的EFADALCache配方,虽然我在发现此问题时使用的是TokenCache.DefaultShared)并且它有数百行缓存数据(只有一行成功登录时生成).
我可以看到,当重定向通过输出窗口发生时,每次往返都会生成一个新的访问和刷新令牌:
Microsoft.IdentityModel.Clients.ActiveDirectory Verbose: 1 : 31/07/2015 12:31:52: 15ad306e-e26d-4827-98dc-dea75853788a - AcquireTokenByAuthorizationCodeHandler: Resource value in the token response was used for storing tokens in the cache
iisexpress.exe Information: 0 : 31/07/2015 12:31:52: 15ad306e-e26d-4827-98dc-dea75853788a - AcquireTokenByAuthorizationCodeHandler: Resource value in the token response was used for storing tokens in the cache
Microsoft.IdentityModel.Clients.ActiveDirectory Information: 2 : 31/07/2015 12:31:52: - TokenCache: Deserialized 1 items to token cache.
iisexpress.exe Information: 0 : 31/07/2015 12:31:52: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Visual Studio 2013中的新MVC 5项目中设置集成的OWIN Facebook身份验证.我已根据本教程配置了应用程序和密钥:
但是,我在AccountController中从此调用中抛出了NullReferenceException:
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
Run Code Online (Sandbox Code Playgroud)
我已经检查了Fiddler的回复,并且得到了Facebook的成功回复,但仍然得到了这个错误.响应如下:
{"id":"xxx","name":"xxx","first_name":"xxx","last_name":"xxx","link":
"https:\/\/www.facebook.com\/profile.php?id=xxx","location":{"id":"xxx","name":"xxx"},
"gender":"xxx","timezone":1,"locale":"en_GB","verified":true,"updated_time":"2013-10-23T10:42:23+0000"}
Run Code Online (Sandbox Code Playgroud)
我在http和https中进行调试时得到了这个.我猜这是一个框架错误,但迄今为止通过反射器诊断出这一点.
如何实现自动注销计时器.
所以基本上如果用户在x分钟内处于非活动状态,他们的会话结束了
我试过了:
<system.web>
<sessionState timeout="1"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.
这是我的启动中的代码:
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
}
Run Code Online (Sandbox Code Playgroud)
这说我正在使用cookie身份验证.所以,如果我能做到,我不会做什么.
asp.net-mvc asp.net-authentication owin asp.net-mvc-5 asp.net-identity
从OWIN迁移到ASP.NET Core时,我发现了一些有关迁移依赖性的信息,但是我没有找到有关这些其他主题的信息:
简而言之,为了从OWIN迁移到ASP.NET Core,很高兴知道需要我注意的主要热点是什么.
作为第一个例子 - ASP.NET Core似乎没有HttpConfiguration.有无数的示例插件和服务假设它存在.我想推断如何将指令转换为HttpConfigurationASP.NET Core期望的任何方法.
另一个例子是,Swashbuckle文档提供了使用OWIN进行设置的说明,但这些说明不适用于ASP.NET Core.如果我理解与OWIN的主要区别,那么"猜测"如何将Swashbuckle安装到ASP.NET Core中会更容易.
self-hosted应用说明.这让我感到困惑,因为我认为OWIN(相对于 Katana)已经是自我托管的,所以对我来说这听起来多余.但我不认为这与目前的问题有关.我的问题以Swashbuckle为例,但我并没有特别询问Swashbuckle.
我发现我正在寻找的大部分信息都在文章从Web API 2转换到ASP.NET MVC 6.
我有一个ASP.NET MVC 5 webproject(localhost:81),它使用Knockoutjs从我的WebApi 2项目(localhost:82)调用函数,以便在我启用CORS的两个项目之间进行通信.到目前为止,一切都有效,直到我尝试对WebApi实施OWIN令牌认证.
要在WebApi上使用/ token端点,我还需要在端点上启用CORS,但经过几个小时的尝试和搜索解决方案后,它仍在运行,并且api/token仍然会导致:
XMLHttpRequest cannot load http://localhost:82/token. No 'Access-Control-Allow-Origin' header is present on the requested resource.
public void Configuration(IAppBuilder app)
{
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
TokenConfig.ConfigureOAuth(app);
...
}
Run Code Online (Sandbox Code Playgroud)
TokenConfig
public static void ConfigureOAuth(IAppBuilder app)
{
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<AppUserManager>(AppUserManager.Create);
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
Run Code Online (Sandbox Code Playgroud)
AuthorizationProvider
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
var appUserManager = context.OwinContext.GetUserManager<AppUserManager>(); …Run Code Online (Sandbox Code Playgroud) 我正在.NET Web应用程序中实现Web API 2服务体系结构.消费请求的客户端是纯javascript,没有mvc/asp.net.我正在使用OWIN尝试根据本文使用Web API示例进行OWIN Bearer Token身份验证来启用令牌身份验证.在获得授权后,我似乎遗漏了认证步骤.
我的登录信息如下:
[HttpPost]
[AllowAnonymous]
[Route("api/account/login")]
public HttpResponseMessage Login(LoginBindingModel login)
{
// todo: add auth
if (login.UserName == "a@a.com" && login.Password == "a")
{
var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, login.UserName));
AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = new SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ObjectContent<object>(new
{
UserName = login.UserName,
AccessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket)
}, …Run Code Online (Sandbox Code Playgroud) 我不是在寻求最佳实践建议,因为在互联网上有很多关于这个主题的博客文章和教程.
我问的是混乱,因为微软对整个自托管程序进行了很多改动,我找到的每个教程都采用了不同的,不赞成的或不熟悉的方法.
我的目标是在旧版Windows服务中设置自托管Web API,以控制来自非Windows客户端的各种长时间运行的任务,例如集成WCF/SOAP客户端的Android应用程序可以真正成为PITA.
我知道WCF能够提供RESTful服务这一事实,但由于Web API非常适合这样的任务,我想我试了一下.
这就是我目前使用OWIN(Katana)启动我的API的方式:
public class ApiBootstrap {
var httpConfiguration = new HttpConfiguration();
// ... configure routes etc.
appBuilder.UseWebApi(httpConfiguration); // appBuilder = IAppBuilder
var disposable = WebApp.Start<ApiBootstrapper>(_myBaseUri);
}
Run Code Online (Sandbox Code Playgroud)
但大多数教程都采用不同的方法:
var config = new HttpSelfHostConfiguration("http://localhost:999");
// ... configure routes etc..
var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
Run Code Online (Sandbox Code Playgroud)
现在,我知道这个HttpSelfHostServer课程来自System.Web.Http.SelfHost和不使用OWIN,两者都运行良好.
但是我几天来一直在努力实现非常简单的任务,例如使用SSL保护连接,创建授权等等,因为我在这些主题上找到的每个教程都引用了不使用OWIN的自托管方法.但AFAIK,OWIN(Katana)是微软首选实现自托管的方法.
作为一个初学者,我完全困惑和无助!
编辑:仅6分钟即可获得4次赞成,1次收视和30次观看,但仍无法回答.真的不能说我在这里做的是好吃的咖啡还是只是一个令人难以置信的愚蠢问题.
我正在寻找Web Api 2,Owin和Autofac,并需要一些指导.
概述
我有一个Owin自托管的Web Api,它使用Autofac进行IoC和依赖注入.该项目是一个控制台应用程序,就像一个服务,这意味着它可以停止和启动.我有一个带有两个构造函数的身份验证控制器:一个参数少,另一个注入存储库.
问题
当我运行服务并调用api时,我的无参数构造函数被调用,我的存储库永远不会被注入(_repository = null).
研究
我做了一些研究,并在Github上发现了一些有用的项目,我将其复制到了发球台,但我错过了很大一部分难题.这很有帮助,但没有解决我的问题.我在Stack Overflow上阅读了这个问题,Dane Sparza有一个很好的演示项目,但我找不到一个明确的解决方案.问题不是自托管而是依赖注入.
我的代码(细化了解释)
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
var connectioninfo = ConnectionInfo.FromAppConfig("mongodb");
var builder = new ContainerBuilder(); // Create the container builder.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); // Register the Web API controllers.
builder.Register(c => …Run Code Online (Sandbox Code Playgroud)