C#套接字和SslStreams

我很困惑在处理套接字时使用什么是“最好的”。 Socket对象提供发送/接收方法(和异步等效方法),但也允许创建NetworkStream。 我使用Socket.Send获得任何乐趣的唯一方法是将调用包装在一个块中,例如: using (Stream stream = new NetworkStream(socket)) { socket.Send(…); stream.Flush(); } 使用SslStream时,如果您在底层套接字上发送消息,它是否会通过SSL发送? 我应该只使用Stream.Write(…)而不是socket方法吗? 谢谢。

MVC 5 IoC和身份validation

我即将开始一个项目,我将使用MVC5。 但是,由于我想使用IoC并稍后重用我的用户表,并向其添加自定义内容,我发现很难看到我如何使用MVC5附带的新Identity框架。 我越来越关注基本forms的认证。 你有什么解决方案? 我的需求: 必须注入用户存储库/服务 用户存储库必须驻留在DAL中 用户存储库必须能够支持除EF之外的其他技术 使用OpenID和OAuth进行身份validation必须要轻松实现 必须安全 应该可以在其他项目中重复使用,例如。 WPF 我一直在寻找答案,但我看到的一切都是在控制器中硬编码的。 你是怎么解决的? 您是从头开始编写的,还是可以绑定到可以扩展到其他.NET平台的东西,如WCF和WPF? 以下代码直接来自默认ASP.NET MVC 5模板中的AccountController。 它首先做的是Bastard Injection 。 [Authorize] public class AccountController : Controller { public AccountController() : this( new UserManager( new UserStore( new ApplicationDbContext()))) { } public AccountController(UserManager userManager) { UserManager = userManager; } } 接受的答案将交给那个人,它向我展示他们所做的事情,其中​​包含了上述要求

C#List .ToArray表现不好?

我正在使用.Net 3.5(C#),我听说过C# List.ToArray的性能List.ToArray是“坏”,因为它为所有元素的内存副本形成一个新数组。 真的吗?

SQLite简单的插入查询

我正在尝试使用SQLite作为我的存储空间。 我已经使用nuget和using语句添加了引用dll。 我有 private void SetConnection() { sql_con = new SQLiteConnection (“Data Source=c:\\Dev\\MYApp.sqlite;Version=3;New=False;Compress=True;”); } private void ExecuteQuery(string txtQuery) { SetConnection(); sql_con.Open(); sql_cmd = sql_con.CreateCommand(); sql_cmd.CommandText = txtQuery; sql_cmd.ExecuteNonQuery(); sql_con.Close(); } 我正在发送这样的查询文本 public void Create(Book book) { string txtSqlQuery = “INSERT INTO Book (Id, Title, Language, PublicationDate, Publisher, Edition, OfficialUrl, Description, EBookFormat) “; txtSqlQuery += string.Format(“VALUES […]

Hangfiredependency injection生命周期范围

我正在重写整个问题因为我意识到原因,但仍然需要一个解决方案: 我在Hangfire中有一个经常性的工作,每分钟运行并检查数据库,可能更新一些东西,然后退出。 我将dbcontext注入包含job方法的类中。 我注册这个dbcontext以使用以下注入 builder.RegisterType().As().InstancePerLifetimeScope(); 但是,每次作业运行时,Hangfire似乎都不会创建单独的生命周期范围,因为构造函数只会被调用一次,尽管每分钟调用一次作业方法。 这给我带来了问题。 如果用户更新了数据库中的某些值(dbcontext被注入其他地方并用于更新值),则仍在使用上下文Hangfire开始返回已更改的过时值。

.net 4.5中的异步和同步之间的区别

在我阅读.Net 4.5 async异步编程和await关键字时,我在这里阅读以下段落 处理异步请求 在启动时看到大量并发请求或具有突发性负载(并发性突然增加)的Web应用程序中,使这些Web服务调用异步将提高应用程序的响应能力。 异步请求与同步请求相同的处理时间。 例如,如果请求进行需要两秒钟完成的Web服务调用,则无论是同步执行还是异步执行,请求都需要两秒钟 。 但是,在异步调用期间,在等待第一个请求完成时,不阻止线程响应其他请求。 因此,当有许多并发请求调用长时间运行的操作时,异步请求会阻止请求排队和线程池增长。 对于粗体字,我无法理解它们异步请求如何处理同步请求需要相同的时间? 例如: public async Task MyMethod() { Task longRunningTask = LongRunningOperation(); //indeed you can do independent to the int result work here //and now we call await on the task int result = await longRunningTask; //use the result Console.WriteLine(result); } public async Task LongRunningOperation() // […]

是否可以使用工厂方法使用ac#object initializer?

我有一个带有静态工厂方法的类。 我想调用工厂来检索类的实例,然后通过c#object initializer语法进行额外的初始化: MyClass instance = MyClass.FactoryCreate() { someProperty = someValue; } VS MyClass instance = MyClass.FactoryCreate(); instance.someProperty = someValue;

适用于Asp.net Mvc的Google Chart HtmlHelper

Google Chart Api有没有HtmlHelper Extensions? (我喜欢用于一些基本图表,例如饼图,条形图) Soe Moe

如何将此WPF控件添加到我的WinForm中?

我知道我必须使用ElementHost在WinForm中显示WPF控件,但由于WPF控件是第三方软件,它只附带一个XML文件和一个DLL文件。 控件是AvalonEdit ,我将ICSharpCode.AvalonEdit.xml和ICSharpCode.AvalonEdit.dll文件添加到我的项目中,然后我转到Project -> Add Reference并添加了DLL作为参考。 现在我可以在我的代码中访问ICSharpCode命名空间,所有的类和方法都暴露出来,但从这一点来说,我不确定如何在我的WinForm中实际使用该控件。 我期待WPF控件出现在解决方案资源管理器中,但事实并非如此。 我尝试将一个ElementHost控件添加到我的WinForm中,但是当我尝试选择托管内容时,没有控件出现,所以它不知道我的WPF控件。 如何在WinForm中使用AvalonEdit WPF控件?

在C#中处理“循环初始化”的其他方法

首先,我会说我同意goto语句在很大程度上与现代编程语言中的更高级别结构无关,并且在适当的替代品可用时不应使用。 我最近重新阅读了Steve McConnell的Code Complete原版,并忘记了他对常见编码问题的建议。 几年前,当我第一次开始时,我已经读过它,并且不认为我意识到配方会有多大用处。 编码问题如下:执行循环时,您经常需要执行循环的一部分来初始化状态,然后使用其他逻辑执行循环,并使用相同的初始化逻辑结束每个循环。 一个具体的例子是实现String.Join(delimiter,array)方法。 我想每个人第一个接受这个问题的都是这个。 假设append方法被定义为将参数添加到返回值。 bool isFirst = true; foreach (var element in array) { if (!isFirst) { append(delimiter); } else { isFirst = false; } append(element); } 注意:稍微优化一下就是删除else并将其放在循环的末尾。 赋值通常是单个指令并等效于else,并将基本块的数量减少1并增加主要部分的基本块大小。 结果是在每个循环中执行一个条件以确定是否应该添加分隔符。 我也看到并使用了其他处理这个常见循环问题的方法。 您可以先在循环外执行初始元素代码,然后从第二个元素到结尾执行循环。 您还可以将逻辑更改为始终将元素附加到分隔符,并且一旦完成循环,您只需删除添加的最后一个分隔符。 后一种解决方案往往是我更喜欢的解决方案,因为它不会复制任何代码。 如果初始化序列的逻辑发生变化,您不必记得在两个地方修复它。 然而,它需要额外的“工作”来做某事然后撤消它,至少导致额外的cpu周期,并且在许多情况下,例如我们的String.Join示例也需要额外的内存。 我兴奋地阅读这个结构 var enumerator = array.GetEnumerator(); if (enumerator.MoveNext()) { goto start; do { append(delimiter); start: […]