我正在使用反应式扩展来处理一种进程中的消息总线.实施非常简单.
注册看起来像
public IDisposable Register<T>(Action<T> action) where T : IMessage
{
return this.subject
.OfType<T>()
.Subscribe(action);
}
Run Code Online (Sandbox Code Playgroud)
简单地发送:
private void SendMessage(IMessage message)
{
this.subject.OnNext(message);
}
Run Code Online (Sandbox Code Playgroud)
但是我现在遇到RX的异常行为有些问题.注册/订阅操作中抛出一个异常 - Observable'stream'被破坏,不再订阅.正弦此消息总线用于应用程序的两个部分进行通信我需要确保即使抛出意外异常也不会破坏这样的流.
我有一个真实的场景,是一个完美的领域模型设计.它是一个具有多个象限的字段,每个象限上具有不同的状态.所以我的聚合根是字段.现在我有一个重要的问题:我想拥有一个持久的ignorat域模型,我认为这是有道理的.那么我应该在哪里调用存储库方法的更新?不在域名模型中,对吧?那么当没有对象的更改跟踪代理并且不应该在实体中调用存储库时,如何在数据库中更新聚合根子实体?或者我误解了域模型模式?
我的问题清楚了吗?:)提前谢谢你最好的劳里
假设我有以下界面:
public interface IApiOutputCache
{
Task RemoveStartsWithAsync(string key);
Task<T> Get<T>(string key) where T : class;
Task RemoveAsync(string key);
Task<bool> ContainsAsync(string key);
Task Add(string key, object o, DateTimeOffset expiration, params string[] dependsOnKeys);
Task<IEnumerable<string>> GetAllKeys();
}
Run Code Online (Sandbox Code Playgroud)
我可以实现不同的缓存提供者.我为两个不同的缓存实现了两次:
a)azure redis b)内存缓存
对于azure redis,这个工作非常好,因为StackExchange.Redis为我提供了所有的异步方法,所以我可以保持完全异步.
现在我为内存缓存实现了另一个,它不为我提供异步api.
现在实现这个界面的最佳实践是什么?
按原样实现,但只是做一切同步?将内部调用变为a Task.Run(我认为快速mem缓存调用不是一个好主意).
我正在尝试实现一个简单的任务:使用BASIC Auth保护我的ASP.NET WEBAPI(构建在Katana之上).我知道我可以实现自己的中间件或消息处理程序或其他任何东西.但是我想知道这样一个简单的任务是否尚未实现?我在网上发现了多个样本,显示它应该是多么简单.但所有这些示例都引用了一个名为microsoft.owin.security.basic的nuget包,这在任何地方都找不到!?你能帮助我吗?
我正在设计一个 REST API。如您所知,RESTful API 没有真正的规范。就我而言,我有一个简单的 API,其中有用户。我可以获取用户并更新他们。像这样的东西:
获取.../用户/12
但是,为了创建用户,我希望只允许属性的子集。例如,当您获得用户时,您会获得许多属性,例如:Id、Name、CreationDate 等
当您创建用户时,我只想允许发布名称而不是其他任何内容。在您对 RESTful 服务的理解中,是否允许对同一资源的不同 http 动词有不同的模型?或者你会期望一个
发布../用户
是否可以具有与获取现有属性时获得的属性完全相同的属性?
或者您认为我不应该这样做?阅读了许多宗教讨论后只是想知道;)
提前谢谢你最好的劳林
我想用天蓝色的服务总线来实现一个pub/sub.我从这个教程开始,它到目前为止工作:https: //azure.microsoft.com/en-gb/documentation/articles/service-bus-dotnet-how-to-use-topics-subscriptions/
但在我的专案中,我并不完全确定我应该如何做到:
我在azure web app上运行了一个web api,它被缩放到三个实例.我有一个控制台应用程序客户端,可以触发一些专用主题的消息.
我想要实现的是,web api的所有三个实例都会获得发送到消息总线的消息. 所以这是一个火灾忘记行动:
我对订阅者处于非活动状态/脱机状态时发送的旧消息不感兴趣.我只是在这些实例上同步内存缓存,所以当我需要知道哪些密钥无效时,它实际上是一个简短的生活信息.但重要的是每个订户都要获取信息以避免陈旧数据.
我不确定我是否必须在web api的启动代码中动态创建订阅,以便每个实例都有自己的订阅,或者我是否可以将所有Web应用程序实例订阅到同一订阅?我不想动态创建订阅,因为我不知道何时再次删除它们(例如缩小到2个实例而不是3个实例).但我无法找到任何文档如何做到这一点,如果它是多个客户订阅相同的订阅或如果我需要为每个客户端创建订阅.
我有一个web api,它有一些get方法,可以将一些分布式查询引发到运行时间很长且cpu昂贵的多个系统.所以我们添加了一个输出缓存.像魅力一样工作,在第一个查询处理后,它非常快.
所以现在我发布了一个(可能是常见的?)问题.想象一下,缓存失效或过期的情况(出于某些原因),而不是一次一个客户端调用web api而是100个客户端.目前发生的是100个客户端开始运行长时间运行的查询,并且cpu爆炸到100%,服务器实例崩溃并且不再响应.我基本上想要的是,只有第一个请求执行处理并让所有其他请求等到他完成查询并将结果添加到缓存.然后所有其他人都可以从缓存中获得响应.
我知道有大约1000种方法可以实现它,但我想知道是否有一般模式或最佳实践?或者我必须实施锁?或者使用TPL或者什么?坦率地说,我不知道从哪里开始?
非常感谢你提前.
编辑除了下面非常好的答案,我还发现了这篇文章:http: //www.asp.net/aspnet/overview/developing-apps-with-windows-azure/building-real-world-cloud-apps-with-windows -azure /队列为中心的工作模式
WebAPI 2支持异步过滤方法.我没有看到这种异步过滤方法的意义,或者我想念它们?由于过滤器需要在控制器方法之前执行,因此它必须同步运行!?为什么异步过滤器会带来优势呢?它与webapi中的线程处理有关吗?我的问题清楚了吗?提前谢谢你的回答!最好的劳林
我正在使用rx扩展来实现一个简单的实现,它工作正常.我正在使用线程池调度程序.这工作也很好,但我想只有一个后台线程!我的想法是,我有一个ui线程可以放弃主题,所有内容都会在同一个后台线程中被触发.如果有两个请求,则应序列化.这可能吗?提前谢谢Laurin
我希望在发生攻击时提高我的网络应用程序的安全性.我的系统中包含以下组件:
现在有一个场景,即应用程序加密并存储上传的文档.这的工作原理如下:
1)用户上传文档到Web应用程序2)生成随机加密密钥3)随机加密密钥存储到azure密钥库4)sql azure存储blob url和密钥url
现在我的问题是:如果黑客攻击Web应用程序实例,如何使用密钥保险库更安全?我的意思是在app.config中有客户端ID和客户端密钥来访问keyvault,我们需要它来读取和写入密钥.因此,如果我使用密钥保险库不会增加黑客攻击网络应用程序的安全性,对吧?
c# ×8
asp.net ×3
.net ×2
azure ×2
architecture ×1
async-await ×1
asynchronous ×1
caching ×1
encryption ×1
katana ×1
rest ×1
security ×1