Tag: c#

如何从未经检查的exception中恢复?

如果您想以相同的方式处理每个故障,例如通过记录它并跳到下一个请求,向用户显示消息并处理下一个事件等,如果这是我的用例,那么所有我都可以使用未经检查的exception。要做的是在我的系统中捕获一些高级别的常规exception类型,并以相同的方式处理所有内容。 但我希望从特定问题中恢复,而且我不确定使用未经检查的exception来处理它的最佳方法。 这是一个具体的例子。 假设我有一个使用Struts2和Hibernate构建的Web应用程序。 如果exception冒泡到我的“动作”,我会记录它,并向用户显示一个非常道歉。 但我的Web应用程序的一个function是创建新的用户帐户,这需要一个唯一的用户名。 如果用户选择已存在的名称,Hibernate会在我的系统内容中抛出org.hibernate.exception.ConstraintViolationException (未经检查的exception)。 我真的想通过要求用户选择另一个用户名来恢复这个特定问题,而不是给他们相同的“我们记录了你的问题,但现在你已经被软化了”的消息。 以下是需要考虑的几点: 有很多人同时创建帐户。 我不想在“SELECT”之间锁定整个用户表以查看名称是否存在,如果不存在则锁定“INSERT”。 在关系数据库的情况下,可能有一些技巧可以解决这个问题,但我真正感兴趣的是一般情况下,由于基本的竞争条件,预先检查exception将不起作用。 同样的事情可能适用于在文件系统上查找文件等。 鉴于我的首席技术官倾向于通过读取“Inc.”中的技术专栏引起的偷渡管理,我需要在持久性机制周围留下一层间接,以便我可以抛弃Hibernate并使用Kodo或其他任何东西,而不会改变任何东西,除了最低持久性代码层。 事实上,我的系统中有几个这样的抽象层。 尽管有未经检查的例外,我怎样才能防止它们泄漏? 已检查exception的一个已声明的弱点是必须在堆栈的每个调用中“处理”它们 – 或者通过声明调用方法抛出它们,或者通过捕获它们并处理它们。 处理它们通常意味着将它们包装在另一个适合抽象级别的类型的检查exception中。 因此,例如,在checked-exception UserNotFoundException ,我的UserRegistry的基于文件系统的实现可能捕获IOException ,而数据库实现将捕获SQLException ,但两者都会抛出隐藏底层实现的UserNotFoundException 。 如何利用未经检查的exception,免除每层的包装负担,而不泄漏实现细节?

Java和C#应用程序之间的SSL通信

我的目标是在Java服务器和用C#编写的客户端之间建立安全通信。 java服务器代码: System.setProperty(“javax.net.ssl.keyStore”,”cert/mySrvKeystore”); System.setProperty(“javax.net.ssl.keyStorePassword”,”myPassword”); SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); SSLServerSocket sslserversocket = = (SSLServerSocket) sslserversocketfactory.createServerSocket(2389); while(true) { System.err.println(“server w8 new connection”); try { SSLSocket sslsocket = (SSLSocket) sslserversocket.accept(); //sslsocket.startHandshake(); in = sslsocket.getInputStream(); out = sslsocket.getOutputStream(); out.flush(); String response = new String(receiveMessage()); while (response != “end”) { System.out.println(“Server recv=”+response); response = new String(receiveMessage()); sendMessage((“echo=”+response).getBytes()); } } […]

允许方法在Java中锁定其父对象

在Java中有没有办法获得一个方法来锁定(互斥)它所在的对象? 我知道这听起来令人困惑,但基本上我对这个C#片段并不公平,但在Java中。 lock(this) { // Some code here… } 我的任务是将用.Net编写的API重新实现到Java中,并且我被要求保持Java版本尽可能与.Net版本类似。 事实上,.Net版本看起来像是从我无法访问的C ++版本转录而来的。 无论如何,上面的行出现在C#版本中,我需要在Java中做同样的事情。

HMC SHA1哈希 – Java生成与C#不同的哈希输出

这是对这个问题的跟进,但我正在尝试将C#代码移植到Java而不是Ruby代码移植到C#,就像相关问题中的情况一样。 我正在尝试validation从Recurly.js api返回的加密签名是否有效。 不幸的是,Recurly没有Java库来协助validation,所以我必须自己实现签名validation。 根据上面的相关问题( this ),以下C#代码可以生成validation从Recurly返回的签名所需的哈希: var privateKey = Configuration.RecurlySection.Current.PrivateKey; var hashedKey = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(privateKey)); var hmac = new HMACSHA1(hashedKey); var hash = hmac.ComputeHash(Encoding.ASCII.GetBytes(dataToProtect)); return BitConverter.ToString(hash).Replace(“-“, “”).ToLower(); Recurly在其签名文档页面上提供以下示例数据: 未加密的validation消息 :[1312701386,transactioncreate,[account_code:ABC,amount_in_cents:5000,货币:美元]] 私钥 :0123456789ABCDEF0123456789ABCDEF 结果签名 :0f5630424b32402ec03800e977cd7a8b13dbd153-1312701386 这是我的Java实现: String unencryptedMessage = “[1312701386,transactioncreate,[account_code:ABC,amount_in_cents:5000,currency:USD]]”; String privateKey = “0123456789ABCDEF0123456789ABCDEF”; String encryptedMessage = getHMACSHA1(unencryptedMessage, getSHA1(privateKey)); private static byte[] getSHA1(String source) throws NoSuchAlgorithmException, […]

CX中的ZXing(“Zebra Crossing”)

我正在寻找一个好的开源库,可以从图像中找到并读取条形码(与使用条形码扫描仪相比)。 从Stack Overflow的其他问题来看,我发现ZXing (“Zebra Crossing”)非常好。 虽然它是为Java制作的,但是有一个C#端口 – 但是,我相信它可能不完整。 你认为它是否足够可靠来解析这种情况下的条形码,还是其他一些库更好? 编辑:正如Ed在评论中指出的那样,我应该先尝试一下。 哇,我没想到。 :)但我想我的问题是部分端口是否足够可靠 – 如果你以前有人使用它,它能否熟练扫描?

适用于.NET / C#和Java的高性能数学库

我们目前有一个用C ++编写的高性能科学应用程序,它使用了Intel Math Kernel Library 。 我们正在考虑编写一个用Java和.NET / C#编写的基准应用程序来比较性能差异。 要做到这一点,我们还需要一个好的(商业首选)数学库。 有没有人知道Java / C#的任何数学等价库? 作为旁注:C ++有英特尔TBB库来帮助进行multithreading处理。 .NET / C#和Java是否具有相同的function?

为什么公共语言运行时不能支持Java

今天,公共语言运行时支持多种语言,包括Iron Python和Iron Ruby。 我们同样可以在Java Run Time环境中使用J Ruby和J Python。 如果是这样,为什么.net框架工作的公共语言运行时间不能支持Java? 你只是好奇地知道,虽然你可能会认为这是一个愚蠢的问题。

为什么预处理器的使用在C / C ++ / ObjC以外的语言中不常见?

我已经是Java和VB.Net程序员已经有4年了,还有一个C#程序员已经有6个月了。 我还使用了一堆动态语言,如Perl,Python,PHP和JavaScript。 我从来不需要预处理器。 我的问题是:为什么你会在C,C ++和Objective-C中看到如此广泛使用预处理器,但很少(或从不)在Java,C#或Scala等语言中看到它?

针对F#的情况如何?

简单的C#/ Java代码非常难以并行化,multithreading等。因此,简单的C#/ Java代码将在一个盒子上使用越来越少的总处理能力(因为现在所有东西都将是多核的) )。 在C#和Java中解决这个问题并不简单。 可变性和副作用是在C#和Java中完成工作的关键,但这正是使多核,multithreading编程变得如此困难的原因。 因此,函数式编程将变得越来越重要。 鉴于J2EE / Ruby世界将在许多function/多核方法中分裂(就像它对其他所有方法一样),而.NET人员都将使用F#,这种思路表明F#将在两个方面很大年份。 这种思路有什么问题? 为什么F#不会很大? (编辑)Larry O’Brien在这篇博客文章中指出:“语言方面,在我看来,这是一套C和C ++闪耀的练习 – 至少在multithreading的东西之前。列表处理习语的语言也会最初做得很好,但可能有内存消耗问题(特别是函数式语言)。最后,我认为托管C派生语言(Java和C#)具有最简单的练习9路径,然后在练习10中面临严重缺陷,其中并发问题起主要作用。在我看来,并发性将成为未来五年专业发展的核心问题,因此这些缺点非常重要。

C#Xamarin Java.Interop错误?

您好,自上次Xamarin update以来,我们收到此error 。 CS0012类型’IJavaPeerable’在未引用的程序集中定义。 您必须添加对程序集’Java.Interop,Version = 0.1.0.0,Culture = neutral,PublicKeyToken = 84e04ff9cfb79065’的引用。 ImageLibrary C:\ Users \ rutge \ Source \ Repos \ GarderobeApp \ ImageSwiper \ ImageSwiper.cs 33有效 有谁知道这意味着什么?