Tag: .net 4.0

检测WCF中的套接字断开连接

我们正在构建一个WCF服务器(.NET 4.0)。 它只会使用net.tcp传输。 当客户端关闭TCP连接时,服务器将获取未处理的CommunicationException,并终止。 Q1。 如何处理CommunicationException以便服务器不会终止并继续为其他客户端提供服务? Q2。 在处理程序中,如何获取已中止的会话的SessionId? 我需要这样做来清理一些特定于会话的数据。 提前致谢! PS连接是通过Internet进行的,因此无论客户端是否正常断开连接,都可以随时关闭套接字。

如何(以及如果)使用TPL编写单个使用者队列?

我最近听说过很多关于.NET 4.0中TPL的播客。 他们中的大多数使用任务描述后台活动,如下载图像或进行计算,以便工作不会干扰GUI线程。 我工作的大多数代码都有更多的多生产者/单一消费者风格,其中来自多个来源的工作项必须排队,然后按顺序处理。 一个示例是日志记录,其中来自多个线程的日志行被顺序化为单个队列,以便最终写入文件或数据库。 来自任何单一来源的所有记录必须保持有序,并且来自同一时刻的记录应该在最终输出中彼此“接近”。 因此,多个线程或任务或任何调用队列的任何东西: lock( _queue ) // or use a lock-free queue! { _queue.enqueue( some_work ); _queueSemaphore.Release(); } 专用工作线程处理队列: while( _queueSemaphore.WaitOne() ) { lock( _queue ) { some_work = _queue.dequeue(); } deal_with( some_work ); } 将工作线程专门用于这些任务的消费者方面似乎总是合理的。 我应该使用TPL中的某些构造来编写未来的程序吗? 哪一个? 为什么?

使用.NET 4将程序最小化到系统托盘的最简单方法

我正在制作一个新的WPF应用程序,我需要能够最小化应用程序,并且在系统托盘中,在时钟旁边(或在一般区域)中保持良好和舒适。 这必须适用于Windows XP,Vista和7.我不必支持旧版本的Windows。 如果我使用.NET 4,最简单的方法是什么?

为什么调用ISet .Contains()编译,但在运行时抛出exception?

请帮我解释一下这个行为: dynamic d = 1; ISet s = new HashSet(); s.Contains(d); 代码编译没有错误/警告,但在最后一行我得到以下exception: Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ‘System.Collections.Generic.ISet’ does not contain a definition for ‘Contains’ at CallSite.Target(Closure , CallSite , ISet`1 , Object ) at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](CallSite site, T0 arg0, T1 arg1) at FormulaToSimulation.Program.Main(String[] args) in 据我所知,这与动态重载分辨率有关,但奇怪的是 (1)如果s的类型是HashSet ,则不会发生exception。 (2)如果我使用非generics接口和接受动态参数的方法,则不会发生exception。 因此,看起来这个问题特别与通用接口有关,但我无法找出导致问题的确切原因。 它是编译器/类型系统中的错误还是合法行为?

服务器可以处理的FileSystemWatcher实例数量有哪些实际限制?

我有一个Windows服务,目前正在实例化大约十几个FileSystemWatcher实例,以监控整个公司网络中的共享文件夹,以便处理文件。 我正在考虑添加更多实例,所以我想知道这里是否有人(生产系统)有关生产系统可以可靠处理的FileSystemWatcher实例数量的实际限制是什么? 编辑:在我的情况下,不修改InternalBufferSize属性,因此InternalBufferSize是默认的8 KB …我假设InternalBufferSize的增加会影响系统可以同时运行的FileSystemWatcher实例的数量,因此这也是方程的一部分… 编辑:如果您认为这仅仅是一个资源问题,它只取决于可用内存的数量或系统的其他硬件方面,请分享您的经验或指向证实您的意见的文档或文章的链接……我会真的很想听听那些在生产中达到极限的人,无论他们的硬件规格如何,所以请在投票前仔细考虑其他7个人在不到20分钟的时间内表示有兴趣听到那些推动限制的人…

tcpclient上的序列化数据需要状态量吗?

我使用TcpClient以字节forms发送数据,我想发送自己的类而不是数据字节。 按字节数据,我的意思是我将数据转换为字节,如下所示: using (MemoryStream bufferStream = new MemoryStream()) { using (BinaryWriter bufferData = new BinaryWriter(bufferStream)) { // Simple PONG Action bufferData.Write((byte)10); } _logger.Info(“Received PING request, Sending PONG”); return bufferStream.ToArray(); } 相反,我想像这样发送它,而不必声明它的大小或w / e public class MyCommunicationData { public ActionType Action { get; set; } public Profile User { get; set; } … } 通常,当我将数据作为字节发送时,前5个字节用于指示操作和消息大小。 但是如果我迁移到将所有数据序列化为单个类,我是否仍然需要发送它的动作和大小,或者使用序列化消息,客户端和服务器将知道要读取的内容等,或者有没有办法这样做我可以发送它而不必指定序列化对象的东西? […]

如何访问阻塞集合的基础默认并发队列

我有多个生产者和一个消费者。 但是,如果队列中存在尚未消耗的内容,则生产者不应再次对其进行排队。 (唯一没有重复的阻塞集合使用默认的并发队列) if (!myBlockingColl.Contains(item)) myBlockingColl.Add(item) 但是,阻塞coll没有包含方法,也没有提供任何类型的trypeek()方法。 如何访问底层并发队列,以便我可以做类似的事情 if (!myBlockingColl.myConcurQ.trypeek(item) myBlockingColl.Add(item) 尾巴旋转。 请帮忙。 谢谢

C#外部库(Lua)调用问题

我是C#(VS2010).Net(4.0)编程的新手,我遇到了自从几天以来我自己无法解决的问题。 我在我的C#代码中使用外部脚本语言(Lua)。 为此,我使用为.Net 4.0构建的LuaInterpreter 首先尝试:该项目是一个控制台应用程序 – >当我尝试调用Lua类时,程序运行正常。 第二次尝试:该项目是一个从Excel中使用的类Librrary COM – >类库编译正常,我的用户定义函数在Excel中正常工作。 但当我试图打电话给Lua课时,它崩溃说Lua集会失踪了。 Could not load file or assembly ‘lua51, Version=0.0.0.0, Culture=neutral, PublicKeyToken=1e1fb15b02227b8a’ or one of its dependencies. Strong name validation failed. (Exception from HRESULT: 0x8013141A) 重现问题: 1-您需要从http://www.mdome.org/2011/05/16/luainterface-for-csharp-net-4-custom-build/获取LuaInterface .Net 4.0 2-添加LuaInterface作为项目中的参考 3-将Lua51 DLL复制到建筑目录中(我也将Excel表格放在那里) 4-复制类库的代码 using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Win32; using Excel = Microsoft.Office.Interop.Excel; […]

为什么CenterToScreen方法将窗体置于光标所在的屏幕上,而不是带有焦点应用程序的屏幕?

我使用的是Visual Studio 2010,C#.NET 4,WinForms。 我的电脑有2台显示器。 当我调用表单的CenterToScreen方法时,表单以光标所在的屏幕为中心。 有谁知道为什么?

构建错误:“表达式太长或太复杂,无法编译”

每当我构建一个特定的解决方案时,我会在错误列表窗口中随机获得一个“表达式太长或者很复杂”。 但是,错误指向的唯一项是特定项目,而不是项目中的文件或特定LOC。 当我遇到这个时,我’干净’,然后我重启VS,这似乎解决了它。 关于是什么导致这个的任何想法? 这个特殊的解决方案有50个项目。