我开始为Nancy编写一个LoginModule,但我想到可能需要以不同的方式执行身份验证.在南希有一种可以接受的认证方式吗?我现在正在计划两个项目:web和json服务.我需要两个身份验证.
我正在努力从NancyFX中的数据库中将byte []中的Image输出到Web输出流.我没有示例代码足够接近甚至在此时显示.我想知道是否有人解决了这个问题并且可以发布一个代码片段?我基本上只想从存储在我的数据库中的字节数组中返回image/jpeg,然后将其放到Web而不是物理文件中.
例如,有一些NancyFX与SignalR集成的例子
由于我刚刚开始,我想要一个简单,工作良好的规范示例,我可以从中工作.来自微软的聊天示例的nancy版本可以正常运行.
谢谢
我想将NancyFx用于Intranet Web应用程序.所有文档和论坛仅提及表单和基本身份验证.任何人成功使用Nancy与Windows身份验证?
还有一种名为Nancy.Authentication.Stateless的东西,但我看不出它的作用(看起来像是在Apis中使用).
我有一个完整的ASP.NET MVC应用程序(由5个程序集组成,.NET 4.5.1,ASP.NET MVC 5.2.2),它在Visual Studio(使用IISExpress)中运行良好.
我现在想要一个控制台应用程序,它接受MVC应用程序并托管它(自托管).
我尝试过Microsoft.Owin.Host.HttpListener,Nancy.Owin但是当我得到404页面时,我的配置缺少映射到我的MVC应用程序.
我有
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}
Run Code Online (Sandbox Code Playgroud)
和
static void Main(string[] args)
{
StartOptions so = new StartOptions("http://localhost:9000/");
using (WebApp.Start<Startup>(so))
{
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
但显然MyMvcApplication缺少从正在运行的MVC应用程序中使用的配置.怎么做?或者如何自我托管呢?
我在网上找到的答案是指旧版本,我希望今天有更简单的方法.
我正在比较在IIS 7下运行的NancyFx和ServiceStack.NET的性能(在Windows 7主机上进行测试).两者都非常快 - 在本地测试每个框架进程超过10,000 req/sec,ServiceStack的速度提高了约20%.
我遇到的问题是ASP.NET似乎正在缓存来自HttpHandler的每个唯一URI请求的响应,很快导致大量内存压力(3 GB以上)和垃圾收集器过度工作(大约25%的时间消耗GC).到目前为止,我一直无法禁用对象的缓存和构建,并且正在寻找有关如何禁用此行为的建议.
请求循环基本如下:
for i = 1..100000:
string uri = http://localhost/users/{i}
Http.Get(uri)
Run Code Online (Sandbox Code Playgroud)
响应是一个简单的JSON对象,格式为{UserID:n}.
我已经破解了打开的WinDBG,并且每个请求都有:
System.Web.FileChangeEventHandlerSystem.Web.Configuration.MapPathCacheInfosSystem.Web.CachedPathDatasSystem.Web.Caching.CacheDependencysSystem.Web.Caching.CacheEntrys显然,这些缓存项目让我相信它是一个缓存膨胀问题(我很想摆脱150,000个无法使用的对象!).
在web.config中
<system.web>
<caching>
<outputCache enableOutputCache="false" enableFragmentCache="false"/>
</caching>
</system.web>
Run Code Online (Sandbox Code Playgroud)同样在web.config中(以及策略的许多变体,包括无).
<caching enabled="false" enableKernelCache="false">
<profiles>
<add policy="DontCache" kernelCachePolicy="DontCache" extension="*/>
</profiles>
</caching>
Run Code Online (Sandbox Code Playgroud)查看框架的源代码,看看是否可能存在使用ASP.NET缓存的任何"功能".虽然有缓存帮助程序,但它们对框架本身是私有的,并且似乎不利用ASP.NET缓存.
通过反射器挖掘我发现将值设置UrlMetadataSlidingExpiration为零消除了过多内存使用的大部分,代价是将吞吐量减少50%(FileAuthorizationModule类缓存FileSecurityDescriptors,生成时必须有些昂贵,UrlMetadataSlidingExpiration是非零).
这是通过更新web.config并将以下内容放入:
<hostingEnvironment urlMetadataSlidingExpiration="00:00:00"/>
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我将尝试完全禁用FileAuthorizationModule运行,看看是否有帮助.但是,ASP.NET仍然会生成2*N MapPathCacheInfo和CacheEntry对象,因此内存仍在消耗,速度要慢得多.
另一半问题与此处描述的问题相同:阻止许多不同的MVC URL填充ASP.NET缓存.设置
<cache percentagePhysicalMemoryUsedLimit="1" …
我为Web Api 2安装了正确的软件包
Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Run Code Online (Sandbox Code Playgroud)
但是帮助区域没有被映射并返回404(Web Api工作正常).我正在使用Microsoft.Owin.Host.SystemWeb作为主机.下面是我的启动代码.
public class Startup
{
public void Configuration(IAppBuilder app)
{
//Required for MVC areas new HttpConfiguration() doesn't work with MVC
var config = GlobalConfiguration.Configuration;
AreaRegistration.RegisterAllAreas();
WepApiStartup.Configure(config);
app.UseWebApi(config);
}
}
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以为我的api返回一个HttpStatusCode?我发现了一个稍微冗长的方法来做到这一点
return Response.AsJson(new object(), HttpStatusCode.NoContent);
Run Code Online (Sandbox Code Playgroud)
我看过这个Response类的源代码了
public static implicit operator Response(HttpStatusCode statusCode) { ... }
Run Code Online (Sandbox Code Playgroud)
这是我在找什么?如果是这样我如何使用它,我真正希望能做的是
return Response(HttpStatusCode.NoContent);
Run Code Online (Sandbox Code Playgroud) 我的应用程序使用Nancy Selfhosting.当我在没有管理员权限的情况下启动它时,我得到一个System.Net.HttpListenerException"Access Denied".
这是代码:
static void Main(string[] args)
{
var nancyHost = new Nancy.Hosting.Self.NancyHost(new Uri("http://localhost:80/"));
nancyHost.Start();
Application.Run();
}
Run Code Online (Sandbox Code Playgroud)
我也试过不同的端口但没有成功.奇怪的是,在启动侦听同一个Url的HttpListener时,我没有得到任何异常.可能导致此异常的原因是什么?
使用Nancy FX时,我遇到了以下在尝试启动Web服务时抛出的异常: AutomaticUrlReservationCreationFailureException
仔细研究了一下后,我发现解决这个问题的方法是运行cmd提示符(作为管理员),然后运行以下命令:
netsh http add urlacl url=http://+:1234/ user=DOMAIN\username
Run Code Online (Sandbox Code Playgroud)
哪里
DOMAIN\username 是服务将在其下运行的用户的ID1234 是服务将运行的端口我在这里写这篇文章是为了防止其他人遇到同样的问题而花半个小时左右的时间寻找答案 - 希望他们能比我更快找到这个!
nancy ×10
c# ×3
asp.net ×2
owin ×2
.net ×1
asp.net-mvc ×1
caching ×1
httphandler ×1
image ×1
netsh ×1
outputstream ×1
self-hosting ×1
servicestack ×1
signalr ×1