Tag: .net 4.5

Cold Tasks和TaskExtensions.Unwrap

我有一个缓存类,它使用冷(未启动)任务来避免多次运行昂贵的东西。 public class AsyncConcurrentDictionary : System.Collections.Concurrent.ConcurrentDictionary<TKey, Task> { internal Task GetOrAddAsync(TKey key, Task newTask) { var cachedTask = base.GetOrAdd(key, newTask); if (cachedTask == newTask && cachedTask.Status == TaskStatus.Created) // We won! our task is now the cached task, so run it cachedTask.Start(); return cachedTask; } } 这很有效,直到你的任务实际使用C#5的await ,ala实现 cache.GetOrAddAsync(“key”, new Task(async () => { var […]

具有复合ViewModel的MVC和entity frameworkHtml.DisplayNameFor

我对使用WPF / Silverlight的MVVM非常熟悉,但这是我第一次尝试使用MVC Web应用程序…这只是我的背景。 我创建了一个名为TestSitesController的控制器,它是从我的entity framework模型(生成读/写操作和视图的模板)中的“站点”模型类自动生成的。 我修改的唯一的东西是3个点,对于某些方法,有一个默认参数Guid id = null。 我摆脱了“= null”一切正常。 这是我改变的一个例子 public ActionResult Delete(Guid id = null) { //…. } 这被改为 public ActionResult Delete(Guid id) { //…. } Site模型没有什么特别的SiteId,Abbreviation和DisplayName ……试图让这个问题尽可能简单。 好的,所以我运行网站并转到htpp://…/TestSites/,一切都很完美。 我注意到我的所有视图(创建,删除,详细信息和编辑)都使用了@model MVCWeb.MyEntities.Site,我现在完全可以使用它; 但在Index.cshtml视图中,我注意到它正在使用 @model IEnumerable 这适用于生成的模板,但我想使用“复合视图模型”,也许这就是我试图混合我的MVVM知识,但如果可能的话就会坚持下去。 在我看来,复合视图模型只是一个特定于一个视图的模型,该视图由一个或多个实体模型以及其他属性(如SelectedSiteId等)组成。 所以我创建了一个非常简单的ViewModel,名为TestSitesViewModel public class TestSitesViewModel { //Eventually this will be added to a base ViewModel to […]

如何在使用HttpClient.GetAsync()时确定404响应状态

我试图确定HttpClient的GetAsync方法在使用C#和.NET 4.5的404错误的情况下返回的response 。 目前我只能说出错误已经发生而不是错误的状态,如404或超时。 目前我的代码我的代码如下所示: static void Main(string[] args) { dotest(“http://error.123”); Console.ReadLine(); } static async void dotest(string url) { HttpClient client = new HttpClient(); HttpResponseMessage response = new HttpResponseMessage(); try { response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { Console.WriteLine(response.StatusCode.ToString()); } else { // problems handling here string msg = response.IsSuccessStatusCode.ToString(); throw new Exception(msg); } } […]

C#Concurrency – 长期运行任务的首选方法

当需要在整个应用程序生命周期中运行I / O侦听器时,在4.5框架上运行C#5.0时,首选哪种并发模型? 我已经确定了生产者 – 消费者模式最适合处理我收到的内容,但基础设施应该支持它的想法? 是否建议使用简单的Thread thread = new Thread(ThreadStart(method)) ? 或者首选的是Task或Async/Await模型? 这是一个快速解决问题,但由于我在设计初期,我更愿意确保基础强大。 我对其他语言的直觉反应是,在后台运行一个简单的线程是最好的,但C#中过多的并行框架让我偏离了正轨。 如果有任何相关性,我的应用程序中的轮询时间将由I / O读取超时处理。 更新: I / OI指的是FTDI设备,其中字节可以随时由设备推送到PC,具体取决于板载控制器的状态。 因此,我总是需要准备好拾取数据并进行处理。 我正在使用的API基于FTDI供应商提供的D2XX DLL。

async / await并打开FileStream?

在尝试确定我是否正确使用ReadAsync和CopyToAsync等Stream方法时,我遇到了以下问题: C#4.5文件读取性能sync vs async 在这个问题中,我在接受的答案中阅读了以下内容: 最值得注意的是,您的“异步”测试不使用异步I / O; 对于文件流, 您必须将它们显式地打开为异步,否则您只是在后台线程上执行同步操作。 在他的异步IO代码中,他使用以下命令“异步”打开FileStream : var file = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true) 所以我想知道你是否打算使用像CopyToAsync这样的方法,你是否应该打开如上所示的底层FileStream ?而不是像下面那样做一些简单的事情: File.Open(filename, FileMode.Open) 以下是CopyToAsync实际文档中的CopyToAsync演示如何打开底层FileStream : https : CopyToAsync 如果打开底层FileStream方式useAsync ,那么FileStream构造函数的useAsync参数有什么作用?

MVC 4 Connectionstring到SQL Server 2012

我使用Visual Studio 2012在C#中创建了一个全新的MVC 4应用程序。我正在尝试连接到一个全新的SQL Server 2012(标准)实例,但我似乎无法正确设置我的连接字符串。 我的Web.config中的连接字符串: 每次从Visual Studio中进入ASP.NET配置时,页面都会加载,但只要我点击“安全性”,我就会收到以下消息: 您选择的数据存储存在问题。 这可能是由无效的服务器名称或凭据或权限不足引起的。 它也可能是由未启用角色管理器function引起的。 单击下面的按钮可重定向到可以选择新数据存储的页面。 以下消息可能有助于诊断问题: 无法连接到SQL Server数据库。 我已经validation我的凭据是正确的(我可以使用它们通过SQL Management Studio进行连接)。 还有什么我可以检查的吗? 我很难过。 更新: 我无法从SQL Management Studio(MSSQLSERVER)中连接到我的默认实例,因此我重新安装了SQL,创建了一个命名实例(LHSQLSERVER)。 现在我能够在SQL Management Studio中连接到该实例,但我仍然从ASP.NET配置中获得相同的错误。 另一件需要注意的事情 – 我运行的aspnet_regsql工具来自Framework64 \ v4.0.30319文件夹。 如果我使用.NET 4.5,这是正确的吗? 更新2: 我已经尝试用连接字符串替换连接字符串到我知道可以工作的远程站点(即mysite.winhost.com),但我仍然在ASP.NET网站配置工具中得到相同的错误? FWIW我也使用Windows 8,但我认为这不重要。 还有什么别的我可以查一下吗? 更新3: 我发现这篇文章说你不再需要用于MVC 4的aspnet_regsql工具了,所以我重新运行了删除所有设置的工具,但是再次没有运气。 有没有人以前用MVC 4做过这个? 更新4: 有关我找到的解决方案,请参阅下面的答案。

DelegatingHandler用于WebApi中的响应

我目前正在使用几个委托处理程序(派生自DelegatingHandler类)在发送之前处理请求,例如validation签名等。这一切都非常好,因为我不必在所有调用上复制签名validation(例如)。 我想对来自同一Web请求的响应使用相同的原则。 是否有类似于DelegatingHandler的响应? 在某种程度上,在返回到方法之前捕获响应的方法是什么? 附加信息:我使用HttpClient.PutAsync(…)调用web api

C#中的IObserver和IObservable用于观察者与代理,事件

我所要做的就是实现观察者模式。 所以,我提出了这个解决方案: 我们有一个PoliceHeadQuarters,其主要工作是向所有订阅者发送通知。 考虑到DSP,Inspector和SubInspector类订阅了PoliceHeadQuarters。 使用事件和代表我写道 public class HeadQuarters { public delegate void NewDelegate(object sender, EventArgs e); public event EventHandler NewEvent; public void RaiseANotification() { var handler = this.NewEvent; if (handler != null) { handler(this, new EventArgs()); } } } public class SubInspector { public void Listen(object sender, EventArgs e) { MessageBox.Show(string.Format(“Event Notification received by sender […]

HttpClient(C#)在许多异步请求上失败了吗?

我正在使用HttpClient异步向外部api发出许多请求。 我等待所有请求完成,然后在其他代码中使用响应。 我的问题是,如果我发出太多请求,当我使用Task.WhenAll等待时,我的代码会引发exception。 这段代码最终将并行运行,我的意思是我将同时执行多组这些异步请求(即10组200个异步请求)。 我已经实例化了一个HttpClient,我正在使用.NET 4.5异步/等待修饰符,如下所示: using (var client = new HttpClient()) { // make a list of tasks List<Task> taskList; List replies; for (int i = 0; i < MAX_NUMBER_REQUESTS; i++) { taskList.Add(client.GetAsync(externalUri); } List responses = await Task.WhenAll(taskList); // read each response after they have returned foreach (var response in responses) { var […]

如何使用Model First方法使用动态连接字符串,但仍然使用EDMX中的数据模型?

我使用EF 5使用Model First方法创建了一个EDMX,即我从一个空白设计师开始并模拟我的实体。 现在,我希望能够使用EDMX中定义的此模型,但提供运行时SQL Server连接字符串,而无需修改配置文件。 我知道如何将连接字符串传递给DbContext但问题是找到程序集中映射的元数据。 例如,我的EDMX在app.config中有这个连接字符串 我缺少的部分是”metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;” 我希望能够以编程方式创建一个DbContext传入SQL Server连接字符串,但“添加”元数据部分。 这就是我希望T4文件生成的内容…… public partial class MesSystemEntities : DbContext { public MesSystemEntities() : base(“name=MesSystemEntities”) { } public MesSystemEntities(string sqlServerConnectionString) : base(GetEfConnectionString(sqlServerConnectionString)) { } private string GetEfConnectionString(string sqlServerConnectionString) { // values added by T4 generation string format = “metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;;provider=System.Data.SqlClient;provider connection string=\”{0}\””; return String.Format(format, sqlServerConnectionString); } … } 我的问题是如何在T4生成文件中获取我需要的元数据来创建entity […]