小编Chr*_*isV的帖子

在.NET服务总线队列与Azure队列服务之间进行选择

只是一个关于Azure应用程序的快速问题.如果我有许多需要通信的Web和Worker角色,文档说要使用Azure队列服务.

但是,我刚刚读到新的.NET Service Bus现在也提供了队列.这些看起来更强大,因为它们似乎提供了更加详细的API.虽然.NSB看起来更有趣,但它有几个问题让我在分布式应用程序中使用它时会很谨慎.(例如,Queue Expiration ...如果我不能保证队列将按时更新,我可能会失去它!).

有没有人有任何经验使用这两种技术中的任何一种,并且可以提供何时选择其中一种的建议.

我怀疑虽然服务总线看起来更强大,但我的用例实际上只是让Web/Worker角色能够相互通信,Azure Queue Service就是我所追求的.但是我真的在寻找确认之前,然后自己进入角落:-)

提前致谢.

UPDATE

在休息时间读了两个系统.它看起来像.NET服务总线更专门用于集成系统,而不是提供通用的可靠消息系统.Azure队列是分布式的,因此可靠且可扩展,其中.NSB队列不是,因此更适合Azure本身托管的代码.

谢谢你的回复.

azure azure-storage-queues azure-servicebus-queues

30
推荐指数
2
解决办法
2万
查看次数

WPF与Silverlight 3.0

Silverlight 3.0 beta刚刚在拉斯维加斯举行的Microsofts Mix Conference上宣布.

新测试版的两个功能是3D图形和在浏览器之外运行应用程序的能力,这对我来说似乎是WPF(Windows Presentation Foundation)之前提供的两项主要功能.

我目前正在评估WPF和Silverlight可能用于我们公司未来的开发活动,这个公告让我对这两种UI技术的预期方向感到困惑,以及为什么我会选择其中一种.

有没有人最近使用WPF实现了一个新的应用程序,如果有的话,是什么驱使你做出这个决定?鉴于已宣布对silverlight的更改,如果您现在已经改变了,您的决定是否会改变,如果没有,为什么?

任何意见,将不胜感激.

silverlight wpf cross-platform

21
推荐指数
3
解决办法
2502
查看次数

永远不要使用Nulls?

我们目前正在经历为C#编写一些编码标准的漫长过程.

我最近用签名写了一个方法

string GetUserSessionID(int UserID)
Run Code Online (Sandbox Code Playgroud)

在未找到用户的会话的情况下,GetUserSession()返回null.

在我的通话代码中...我说...

string sessionID = GetUserSessionID(1)
if (null == sessionID && userIsAllowedToGetSession)
{
    session = GetNewUserSession(1);
}
Run Code Online (Sandbox Code Playgroud)

在最近的一次代码审查中,审阅者说"你永远不应该从方法中返回null,因为它会在调用方法上花更多的工作来检查空值."

我立刻哭了恶作剧,好像你回来了字符串.空的你仍然需要对返回的值进行某种检查.

if (string.Empty == sessionID)
Run Code Online (Sandbox Code Playgroud)

但是,考虑到这一点,我不会在Collection/Array/List的情况下返回null.我会返回一个空列表.

对此的解决方案(我认为)将重构为2种方法.

bool SessionExists(int userID);
Run Code Online (Sandbox Code Playgroud)

string GetUserSessionID(int UserID);
Run Code Online (Sandbox Code Playgroud)

这次,GetUserSessionID会抛出一个SessionNotFound异常(因为它不应该返回null)

现在代码看起来像......

if(!SessionExists(1) && userIsAllowedToGetSession))
{
   session = GetNewUserSession(1);
}
else
{
   session = GetUserSessionID(1);
}
Run Code Online (Sandbox Code Playgroud)

现在这意味着没有空值,但对我来说这似乎有点复杂.这也是一个非常简单的例子,我想知道这将如何影响更复杂的方法.

关于何时抛出异常以及如何处理它们,有很多关于何时使用null的信息的最佳实践建议.

是否有其他人对空值的使用有任何可靠的指导(甚至更好的标准),这对可空类型意味着什么(我们应该使用它们吗?)

提前致谢,

克里斯.

=====

感谢大家!那里有很多有趣的讨论.

我已经给了egaga的答案,因为我喜欢将Get vs Find作为编码指南的建议,但所有这些都是有趣的答案.

c# null

18
推荐指数
5
解决办法
1129
查看次数

重命名SVN和VS.Net中的文件夹

我正在使用subversion和Visual Studio 2008(和Tortoise)

我在visual studio项目中有很多文件夹要我重命名.

每当我在过去尝试过此操作时,我最终都会遇到冲突并且必须创建我的新文件夹,将所有现有内容复制到其中,检入并删除旧文件夹.

有没有人遇到过更简单的方法,或者在Visual Studio和Subversion中重命名文件夹有一套可靠的过程?

提前致谢,

克里斯.

svn tortoisesvn visual-studio

14
推荐指数
1
解决办法
4831
查看次数

TDD:"仅测试"方法

在这里寻找一些实用的建议以及人们在类似情况下的任何经验.

我们使用BDD/TDD sytle方法来构建我们的软件(相当大/复杂的应用程序)最终结果是......从业务需求派生的行为规范(Given/When/Then style),反映这些的单元测试和反映的代码测试的要求.

但是,最近我们的测试部门已经开始运行集成测试,可以理解的是他们希望使用我们(已经通过的)业务逻辑代码来建立和拆除测试状态(而不是直接处理数据库),因为他们主要关注通过应用程序的UI进行测试,不想花一整天的时间来争论数据库.

问题是,某些实体存储库没有删除方法,因为还没有针对这些方法表达业务需求.许多人有存档/恢复/备份等(并且可能在待办事项上有删除待处理).

所以现在我们有一个测试部门.删除要求(但与业务用户故事冲突的要求)

所以......我的问题是......如果我要为测试部门专门添加方法......那么处理这些方法的最佳方法是什么.我知道这在"TDD乌托邦"中通常被认为是不好的做法,但实际上,你是如何处理这种冲突的?

我的第一个想法是使用命名...

void TestOnly_Delete(Guid id){} 
Run Code Online (Sandbox Code Playgroud)

... ...属性

[TestOnly]
void Delete(Guid id){}
Run Code Online (Sandbox Code Playgroud)

......或编译器指令......

#if TESTBUILD
void Delete(Guid id){}
#endif
Run Code Online (Sandbox Code Playgroud)

因此,开发人员至少可以知道不要调用TestOnly方法,并且最多不会在生产版本中部署测试方法.

...或者只是作弊并添加一个用户故事来管理它;-)

任何经验或建议感激不尽?

提前致谢.

architecture tdd bdd integration-testing naming-conventions

14
推荐指数
1
解决办法
357
查看次数

IIS7下的奇怪的64/32位GUID问题

我的团队之一最近在矩阵中遇到了一个有趣的故障.如果有人能帮助解释这一点,那就太好了.这可能是一个复杂的解释,所以忍受我.

我们正在构建一个ASP.Net应用程序.在其中我们有一个简单的"if"语句.

Guid adminId = Guid.Empty;
if (mRoles.Contains("Admin"))
{
    adminId = mUserId;
}
Run Code Online (Sandbox Code Playgroud)

(其中mRoles是一个List并包含"Admin")

这与预期一样(即adminID被分配mUserId).但是,当重写使用下面的三元运算符时它不会!(adminID被分配Guid Empty)!

Guid adminId = mRoles.Contains("Admin") ? mUserId : Guid.Empty;
Run Code Online (Sandbox Code Playgroud)

发现此问题的开发人员在64位计算机(IIS7/64位vista)上,如果他在IIS中更改其设置,请执行以下操作...在"默认应用程序池">"高级设置"下,选中"启用32位"应用".现在两个陈述都有效!

我们认为这可能是因为Guid是一个结构而不是一个类,并且该值在某种程度上是在64位进程下被抵消的.

我怀疑问题与此类似... http://www.mail-archive.com/comtypes-users@lists.sourceforge.net/msg00164.html 这可以解释为什么第一个简单的if语句有效.(因为创建adminId变量可能是创建指针而三元运算符不是?)

如果有人能够阐明这一点,那就太好了.这是兼容性错误吗?或者我们对三元运算符和结构组合的误解?

谢谢.

UPDATE

将一个简单的应用程序组合在一起并且不能在一个全新的项目中重现它,因此必须是GUID之外的其他东西.

// Works(将mUserId分配给adminId)

Guid adminId = true ? mUserId : Guid.Empty;
Run Code Online (Sandbox Code Playgroud)

//不工作(即使t == true !!!! ???)

bool t = (mRoles.Contains("TenantAdmin");
Guid adminId = t ? mUserId : Guid.Empty;
Run Code Online (Sandbox Code Playgroud)

我想我们会回到这个图纸上.感谢大家的帮助,如果我们再进一步,我会再次回复此处.

唯一可能不太清楚的是mRoles不是Type字符串的通用列表.它是一个字符串[],并且Contains()方法是LINQs扩展方法,如果这有任何区别,但无法理解为什么: - ?

更新2

我们已经查看了IL并且它是正确的(现在可以间歇性地工作!)我们发现,当默认应用程序池加载更多应用程序时,它会再次开始失败.我们唯一能想到的是,其中一些应用程序可能包含一些非托管代码,这些代码会以某种方式干扰我们的应用程序,这可能吗?

.net 64-bit iis-7 guid

11
推荐指数
1
解决办法
719
查看次数

DevExpress Refactor Pro vs JetBrains ReSharper

在我的部门,我们目前正在使用ReSharper 4.0并决定是否在下周发布时升级到4.5.我个人是ReSharper的忠实粉丝,但是我的一些同事已经指出他们一直在使用DevExpress的一个名为Refactor Pro的插件来执行类似的功能.

http://www.devexpress.com/Refactor
http://www.jetbrains.com/resharper/beta.html

有没有人以前比较过这些工具,并对哪种工具能够最大限度地提高生产率以及为什么能够持有任何强有力的观点?

resharper refactoring

10
推荐指数
2
解决办法
6264
查看次数

TransactionScope和连接池

我正在尝试使用不正确的IsolationLevels来处理我们的应用程序中是否存在数据库连接问题.我们的应用程序是使用SQL Server 2005的.Net 3.5数据库应用程序.

我发现连接的IsolationLevel在返回到连接池时没有被重置(参见这里),并且在这篇博文中读到每个新创建的TransactionScope都有自己的连接池分配给它时也很惊讶.

我们的数据库更新(通过我们的业务对象)在TransactionScope中进行(为每个业务对象图更新创建一个新的).但我们的提取不使用显式事务.所以我想知道的是,我们是否可能遇到这样的情况:我们的获取操作(应使用默认的IsolationLevel - Read Committed)将重用已用于更新的池中的连接,并继承更新IsolationLevel (REPEATABLEREAD)?或者我们的更新是否会保证使用不同的连接池,因为它们包含在TransactionScope中?

提前致谢,

格雷厄姆

sql-server connection-pooling transactionscope isolation-level .net-3.5

9
推荐指数
1
解决办法
3855
查看次数

Azure ACS 2自定义域

我正在尝试在ASP.NET MVC应用程序中设置身份验证,如果是这样,请使用Azure访问控制服务(ACS)(2011年5月发布).我已经使用默认设置了.但是这里存在可用性问题.

当我使用我的Google帐户进行身份验证时...... Google说.. mydomain.accesscontrol.windows.net正在请求访问该帐户.这可能会让最终用户感到困惑,因为他们期望使用login.mydomain.com.

我指着一个DNS CNAME记录来自login.mydomain.commydomain.accesscontrol.windows.net并上传一个X.509证书login.mydomain.com通过访问控制服务控制面板.但是当我尝试访问https://login.mydomain.com时出现服务器错误,因为发送到浏览器的证书是*.accesscontrol.windows.net.NB.我无法看到Azure ACS服务器上的错误.

有没有人在这里设法成功为ACS设置自定义域,并可以建议如何做到这一点?似乎可以使用角色和存储帐户,但我找不到有关AppFabric服务组的任何文档.

asp.net-mvc accesscontrolservice azure wif appfabric

8
推荐指数
1
解决办法
604
查看次数

空值与未设置值

我们编写了一个Web服务,它使用一个简单的实体转换器将DTO的值映射回"真正的"服务器端业务对象.作为这个练习的一部分.我们在显式设置空值未设置值的客户端之间遇到了"有趣"的区别.

问题本质上是我们想要在客户端没有显式设置值的情况下在实际业务对象上设置默认值,但是使用标准可空类型无法判断客户端是否明确表示" 将此设置为null "或者只是不设置它.

这里的解决方案显然是某种"旗帜".

在业务对象中,我们可以使用属性设置器中设置的私有"IsDirty"标志在内部跟踪字段的状态,但是DTO只是真正指定了接口,因此这意味着将此数据公开给公众.这留下了许多实现选项.语言是C#(所以静态类型)所以......

  1. 我们可以在每个属性上公开一个"IsSet"标志吗?
  2. 我们可以将每个属性公开为具有.Value和.IsSet属性的类吗?等等

如何选择在数据合同中公开这些"标志"?你在这里认为最佳做法是什么?

对此的任何意见将不胜感激.

wcf design-patterns datacontract

5
推荐指数
1
解决办法
723
查看次数

最优布局算法

我正在基于本文的ASP.NET应用程序中实现CSS Sprites设置.

http://weblogs.asp.net/zowens/archive/2008/03/05/css-sprite-for-asp-net.aspx

"获取SPRITE已经!"部分中.......作者说......

"唯一真正的缺点就是所有的图像都垂直排列.我不太确定这很重要,但大多数其他发生器都能够以某种方式将图像垂直和水平排列."

我敢肯定这必须是以前解决的问题,所以我的问题是,"鉴于一组矩形,你能以最佳的方式有效地铺设这些吗?" (我想它取决于我对最优的定义,但是最接近正方形作为开始.(虽然实际情况可能并非如此.))此外,您是否需要提前预测所有矩形或者可以这样做逐步?

algorithm math geometry css-sprites

4
推荐指数
1
解决办法
3388
查看次数