Tag: C#的

SqlDependency丢失订阅随着时间的推移

我一直在.NET 3.5应用程序中使用SqlDependency超过3年没有任何问题。 情况如下: 用SqlDependency观察一个表的中央窗口服务(让我们称之为表A) 多个用户使用WPF应用程序和每个用户观看一个表的唯一SqlDependency (表A再次) 用户在表A中排队处理一个工作单元 SqlDependency触发Windows服务 Windows服务处理表A中的所有未完成项目,并将结果保存到表A中 唯一的SqlDependency触发结果可用的每个用户 用户处理他们的工作 最近,我将系统升级到了.NET 4.5,并开始发现将更改放入正在监视的表中的问题,但SqlDependency永远不会触发(在服务和用户应用程序中)。 我开始进一步深入研究,并在日志中注意到,在某些时候,我将重新注册SqlDependency ,但是之后通知将永远不会触发。 看到这个行为之后,我决定运行SQL服务器上的分析器来捕获订阅事件。 从捕获的数据中,我注意到有时订阅将被一个用户注册(具有唯一的ID),但是然后它将被另一个用户触发(具有相同的唯一ID)。 这通常发生在我上面提到的服务以及WPF应用程序的一个或多个用户。 (我已经在探查器结果中附加了问题的截图) 这是预期的行为? 是否可以为不同的用户发起通知? 这是否指向应用程序层中的问题? 任何帮助表示赞赏。

为什么别名模板给出了相冲突的声明?

从Clang到g ++的一些C ++ 11代码的端口 template<class T> using value_t = typename T::value_type; template<class> struct S { using value_type = int; static value_type const C = 0; }; template<class T> value_t<S<T>> // gcc error, typename S<T>::value_type does work const S<T>::C; int main() { static_assert(S<int>::C == 0, ""); } 为Clang(版本3.1至SVN中继)与任何g ++版本提供不同的行为。 对于后者,我得到这样的错误 prog.cc:13:13: error: conflicting declaration 'value_t<S<T> > […]

有没有简单的方法使Visual Studio 2015使用特定的ToolsVersion?

使用特定版本的msbuild构build项目或解决scheme时,可以使用/toolsversion或/tv开关select较早的.net工具链: "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln 这只适用于所有版本的msbuild ,并正确selectcsc.exe等版本基于上述: > "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:4.0 amazing.sln … CoreCompile: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe … … > "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln … CoreCompile: C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe … … 如果我不指定/tv ,那么取决于我使用的是哪个版本的msbuild以及一些环境variables,我可能会得到以下任何一个: 在项目文件的顶层元素中指定的ToolsVersion ToolsVersion对应于我正在使用的msbuild.exe版本 来自msbuild.exe.config的值 来自registry的值 (请参阅MSDN上“ 覆盖ToolsVersion设置”页面的不同版本 )。 因此,为了在构build服务器和本地计算机上具有一致的结果,我在运行msbuild.exe时使用/tv (实际上,这是在psake脚本中执行的,这也确保它使用相应的版本的msbuild.exe )。 但是,使用Visual Studio构build时,我无法使用/tv开关。 相反,Visual Studio 2013及以上版本将使用该版本的Visual Studio附带的.net工具链, 除非 : 环境variablesMSBUILDLEGACYDEFAULTTOOLSVERSION设置和 … …所有的项目文件都将ToolsVersion属性设置为我想要使用的版本。 […]

如何在JavaScript中实现C#访问修饰符?

概要 我试图在JavaScript中正确地实现inheritance和封装,就像使用基于类的语言(如c#)一样。 丑陋的部分是受保护的成员在私人实例中有多个副本,只能通过闭包进行访问,除了将这些成员刷新到私有实例之外,我没有其他想法。 如果可能的话,我想摆脱Function.extend代码中的transmit和transfer 。 故事 由于程序集可能是一个超出javascript范围的概念,我不考虑internal修饰符,但public , protected和private 。 public和private修改者并不难实现; 但是对于inheritance, protected是非常棘手的。 然而,这不是一个推荐的事情,我读过的大多数文章说, 前缀与一个特殊的字符和文件 。 但似乎我坚持让JavaScript来模拟基于类的语言..我偷了这个想法,并以我的方式实现,代码是在这篇文章的后面。 现场背后的想法是把更高的可达性与更高的原型,并访问最高的一个封闭。 假设我们有三个原型A , D和G ,看起来像 因为一个对象不可能是一个不属于原型链的另一种types的实例。 我select的方式是水平链接protected级别,并从声明types的原型复制成员。 这使嵌套类成为可能,因为在派生较less的types上声明的成员可以传播到更多派生types; 在我的代码中的transmit方法是做到这一点。 如果A , D和G拥有自己的受保护成员,则看起来像: 访问私有实例的闭包是this[''] 。 它需要一个用于识别类的参数。 修饰符持有者只是类标识符,在Function.extend名为y ,在testing代码中是_ ,它不应暴露在类声明之外。 它也被用作this['']的快捷键。 _['base']实际上不仅是基础构造函数调用者,而且是私有实例创build者。 它创build私有实例并为每个构造函数更新this['']的inheritance,所以它应该总是在构造函数中调用。 尽pipe一个私有实例可以访问公共成员,但是不应该被用来改变它们,因为this['']在访问公共成员时并不保证被调用。 但是私人实例的访问是; recent记得最近访问的私有实例,如果有变化,更新受保护的成员。 我的问题是,我怎样才能摆脱这种清爽的保护成员? 有更好的想法来实现封装更多的现实? PS:我实际上不想要一个使用非标准方法/属性的解决scheme。如果使用的方法/属性对于旧的浏览器来说太过时尚,它会更好。 Function.extend Function.extend=function (base, factory) { factory.call(initializeClass); updateStaticMembersOfDerivedInnerClasses(y['public'].constructor); transfer(y['protected'], y['public']); return y['public'].constructor; […]

.NET套接字与C + +套接字高性能

我的问题是与C ++与C#的同事解决一个争论。 我们已经实现了一个接收大量UDPstream的服务器。 这个服务器是用C ++开发的,使用asynchronous套接字和重叠的I / O使用完成端口。 我们使用5个线程的5个完成端口。 这台服务器可以在千兆networking上轻松处理500 Mbps的吞吐量,而不会丢失任何数据包/错误(我们没有将testing推到500 Mbps以上)。 我们试图在C#中重新实现相同types的服务器,并且我们还没有达到相同的吞吐量。 我们使用ReceiveAsync方法和SocketAsyncEventArgs池来使用asynchronous接收,以避免为每个接收调用创build新对象的开销。 每个SAEventArgs都有一个缓冲区,所以我们不需要为每个接收分配内存。 池非常非常大,所以我们可以排队超过100个接收请求。 此服务器无法处理超过240 Mbps的传入吞吐量。 超过这个限制,我们在UDPstream中丢失了一些数据包。 我的问题是:我应该期望使用C + +套接字和C#套接字相同的性能? 我的意见是,如果内存在.NET中正确pipe理,它应该是相同的性能。 侧面的问题:有人会知道一个很好的文章/参考解释如何.NET套接字使用I / O完成端口下的引擎?

Kinect侧身骨架跟踪

目前我正在使用Microsoft Kinect测量关节之间的angular度。 大多数测量工作正常。 当一个人坐在椅子上时,Kinect将不会准确地跟踪骨架。 为了说明我的问题,我添加了3张Kinect深度图。 正如你所看到的,3个测量中的2个“正确地”工作。 每当我抬起我的腿,Kinect正确地停止骨骼跟踪。 有没有人有解决这个问题,或者这只是Kinect的限制? 谢谢。 更新1:在屏幕截图2上显示的这些跟踪关节上的JointTrackingState-Enumeration被标记为Inferred ,但深度视图正在跟踪我的全身。 更新2:在截图2我试图跟踪我的前腿,突出显示为绿色。 我知道另一条腿没有被跟踪,但这没关系,我猜。 更新3:以下代码select一个框架: private Skeleton StickySkeleton(Skeleton[] skeletons) { if (skeletons.Count<Skeleton>(skeleton => skeleton.TrackingId == _trackedSkeletonId) <= 0) { _trackedSkeletonId = -1; _skeleton = null; } if (_trackedSkeletonId == -1) { Skeleton foundSkeleton = skeletons.FirstOrDefault<Skeleton>(skeleton => skeleton.TrackingState == SkeletonTrackingState.Tracked); if (foundSkeleton != null) { _trackedSkeletonId = […]

编写安全C和安全C语言

“普通人不想自由,他只是想安全。” – HL Menken 我正在尝试编写非常安全的C语言。下面我列出一些我使用的技术,并询问它们是否像我想的那样安全。 请不要犹豫,把我的代码/先入之见撕成碎片。 任何答案,即使是最微不足道的漏洞,或教我一个新的想法将受到高度重视 。 从stream中读取: 根据GNU C编程教程 getline: getline函数会根据需要通过realloc函数自动放大内存块,所以永远不会有空间不足 – getline是如此安全的一个原因。 请注意,getline可以安全地处理您的input行,不pipe它多长时间。 我认为getline应该在所有input下防止从stream中读取时发生缓冲区溢出 。 我的假设是否正确? 有没有可能导致利用的input和/或分配scheme? 例如,如果stream中的第一个字符是一些奇怪的控制字符 ,可能是0x08 BACKSPACE(ctl-H)。 有没有工作做mathcertificategetline是安全的? Malloc在失败时返回空值: 如果malloc遇到错误malloc返回一个NULL指针。 由于仍然可以将指针运算应用于NULL(0x0)指针,因此存在安全风险,因此维基百科build议 /* Allocate space for an array with ten elements of type int. */ int *ptr = (int*)malloc(10 * sizeof (int)); if (ptr == NULL) { /* Memory could […]

不明白使用Nullabletypes的pre decrement操作符行为

好吧,对于你们中的一些人来说,这可能是显而易见的,但是我对于从这个相当简单的代码中得到的行为难以理解: public static void Main(string[] args) { int? n = 1; int i = 1; n = ++n – –i; Console.WriteLine("Without Nullable<int> n = {0}", n); //outputs n = 2 n = 1; i = 1; n = ++n – new Nullable<int>(–i); Console.WriteLine("With Nullable<int> n = {0}", n); //outputs n = 3 Console.ReadKey(); } 我预计两个输出是相同的,等于2但奇怪的是,他们没有。 […]

在C#/ VB.NET中解码T-SQL CAST

Asprox僵尸networking SQL注入攻击的复活,最近我们的网站已经泛滥成灾 。 没有深入细节,攻击尝试通过以ASCII编码的BINARYstring编码T-SQL命令来执行SQL代码。 它看起来像这样: DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x44004500…06F007200%20AS%20NVARCHAR(4000));EXEC(@S);– 我可以在SQL中解码这个,但是由于我当时不知道到底发生了什么,所以我有点小心这样做。 我试图写一个简单的解码工具,所以我可以解码这种types的文本,甚至没有接触SQL Server 。 我需要解码的主要部分是: CAST(0x44004500…06F007200 AS NVARCHAR(4000)) 我已经尝试了所有以下命令,但没有运气: txtDecodedText.Text = System.Web.HttpUtility.UrlDecode(txtURLText.Text); txtDecodedText.Text = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(txtURLText.Text)); txtDecodedText.Text = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(txtURLText.Text)); txtDecodedText.Text = Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(txtURLText.Text)); txtDecodedText.Text = Encoding.Unicode.GetString(Convert.FromBase64String(txtURLText.Text)); 不使用SQL Server转换此编码的正确方法是什么? 可能吗? 我会采取VB.NET代码,因为我也熟悉。 好的,我确定我在这里错过了一些东西,所以我就在这里。 由于我的input是一个基本的string,我开始只是一个编码部分 – 4445434C41(这意味着DECLA)的片段 – 第一次尝试是这样做的… txtDecodedText.Text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(txtURL.Text)); …它所做的只是返回与我放入的完全相同的东西,因为它将每个字符转换为字节。 我意识到我需要手动将每个两个字符parsing为一个字节,因为我不知道任何方法,那么现在我的小解码器看起来像这样: while (!boolIsDone) { bytURLChar = byte.Parse(txtURLText.Text.Substring(intParseIndex, 2)); bytURL[intURLIndex] = bytURLChar; […]

外部BDD(Specflow)

我是BDD的新手,但是我发现它非常有趣,想用BDD开发我的下一个项目。 谷歌search和屏幕截图之后,我仍然在现实生活中遇到很多有关BDD的问题。 1.声明式还是强制式场景? 我所看到的大多数时间场景都是用UI来编写的(势在必行)。 Scenario: Login Given I am on the Login-page When I enter 'AUser' in the textbox 'UserName' And I enter 'APassword' in the textbox 'Password' And I click the 'Login' button Then I should see the following text 'You are logged in' 我发现这些testing非常脆弱,他们没有提到点击button的商业价值。 我认为它的噩梦来维持。 为什么大多数例子使用命令式场景? Scenario: Login (declarative) Given I am not […]