很多时候,我发现自己在将方法设置为私有以防止某人在无意义的上下文中调用它(或者会破坏所涉及对象的内部状态)或将该方法设为公共(或通常是内部)之间为了将它暴露给单元测试组件.我只是想知道Stack Overflow社区对这种困境的看法是什么?
所以我想真正的问题是,关注可测试性还是保持适当的封装更好?
最近我一直倾向于可测试性,因为大多数代码只会被一小群开发人员利用,但我想我会看到其他人都在想什么?
如果已经问过这个问题,我很抱歉,但我无法在任何地方找到它.我有一个表将文件存储为BLOBS.保存文件的列是image数据类型.我希望能够从列中提取二进制数据并将其转换为实际文件.如果可能的话,我希望能够与BCP或管理工作室合作.
我尝试过BCP,但出于某种原因,当我试图拿出一份办公文档时,Word认为它已经腐败了.这是我到目前为止所尝试的(显然已经改变了值以保护无辜:):
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -n -S server -U username -P password
Run Code Online (Sandbox Code Playgroud)
这不行吗?有什么想法吗?
编辑结果你不需要-n native flag.此外,BCP尝试在图像列上默认包含4字节前缀 - 您实际上希望此设置为0.
bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
Run Code Online (Sandbox Code Playgroud)
Enter the file storage type of field document_binary [image]: Enter prefix-length of field document_binary [4]: 0 Enter length of field document_binary [0]: Enter field terminator [none]:
我有一个带有以下行的web.config:
<requestFiltering>
<requestLimits maxUrl="25000" maxQueryString="25000"></requestLimits>
</requestFiltering>
Run Code Online (Sandbox Code Playgroud)
这使我可以访问最多25k字符的URL,包括查询字符串.但是,当我发布到Azure网站时,它完全忽略了我的web.config的这个特定部分,但我找不到Microsoft发布的任何限制.
有谁知道发生了什么?
我正在通过asp.net中的HTTPModule提供一些文件.我想知道将Cache-Control标头设置或不设置为某些东西(如无缓存)是否有任何好处?
编辑:我对此感到好奇的原因是因为我们遇到了一个问题,即在IE中通过SSL会话提供office文档会导致错误(将Cache Control设置为no-cache).也就是说,如果已将Cache-Control设置为no-cache,则无法在IE中通过SSL下载office文档.
基本上我想不包括Cache-Control标头,但想知道它是否会导致问题?
编辑2:好吧,Cache-Control标头已经出来了.我尝试了下面的建议,但遇到了一些问题.每当我添加一个过期标题或根本改变Cache-Control时,当我尝试打开Office 2007文档时,它会尝试将其作为zip打开.(我知道它们真的是封装下的zip文件)但是当我不使用expires头文件或缓存控件时,IE就像Office文档一样打开它们.不幸的是,我没有时间尝试解决这一切 - 因为代码冻结是从现在开始的十分钟:)
谢谢大家帮忙!
我正在尝试将我的所有javascript包含移到页面底部.我正在使用带Razor的MVC.我写了一个帮助方法来注册脚本.它使脚本按照它们注册的顺序保留,并且不包括欺骗.
@{ Html.RegisterScript("/scripts/someFile.js"); }
Run Code Online (Sandbox Code Playgroud)
然后就在关闭身体标签之前,我做了类似这样的事情:
@Html.RenderScripts()
</body>
Run Code Online (Sandbox Code Playgroud)
如果脚本全部在一个页面上注册,这一切都可以正常工作.如果我在我的布局中注册了一些脚本,并在内部视图中注册了一些脚本,那么事情就会出错.基本上,内部视图在布局之前执行.因此,虽然内部视图中的脚本依赖于外部视图中的脚本,但它们之前已经过注册.
所以,如果我有_Master.cshstml,它有
@{
Html.RegisterScript("script1.js");
Html.RegisterScript("script2.js");
}
Run Code Online (Sandbox Code Playgroud)
然后我将InnerView.cshtml与_Master.cshtml作为其布局并在我拥有的视图中
@{
Html.RegisterScript("script3.js");
}
Run Code Online (Sandbox Code Playgroud)
脚本按以下顺序呈现:script3,script1,脚本2.
有什么办法可以强制布局在内部视图之前执行吗?我已经尝试过各种各样的东西,内部视图似乎总是先执行.也许这是预期的?如果是这样,那么我完成我想要做的最好的方法是什么?
我最近开始在新的Azure VM上托管我的一个侧面项目.该应用程序使用Redis作为内存缓存.在我的本地环境中,一切都运行良好,但现在我已经将代码移动到Azure了,我看到一些奇怪的例外来自Booksleeve.
当应用程序首次启动时,一切正常.但是,在大约5-10分钟的不活动之后,对应用程序的下一个请求会遇到网络异常(我现在正在工作,并且没有确切的错误消息,所以当我回到家时我会发布它们人们认为它们与讨论密切相关)这导致内部MessageQueue关闭,这导致每个后续的Enqueue()抛出异常("队列关闭").
所以经过一些谷歌搜索我找到了这样的帖子:使用BookSleeve维护一个关于DIY连接管理器的开放Redis连接.如果这是最好的行动方案,我当然可以实施类似的东西.
所以,问题:
conn.SetKeepAlive()方法,但我尝试了许多不同的值,似乎没有任何区别.还有更多的东西,还是我在错误的树上吠叫?就像我说的那样,如果Redis连接在不活动后死亡是不寻常的,那么当我回到家时,我会从我的日志中发布堆栈跟踪和异常.
谢谢!
更新 Didier在评论中指出,这可能与Azure使用的负载balanacer有关:http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-超时details.aspx
假设是这种情况,那么实现可以解决这个愚蠢问题的连接管理器的最佳方法是什么.我假设我不应该为每个工作单元创建一个连接吗?
c# ×4
asp.net ×2
azure ×2
bcp ×1
blob ×1
booksleeve ×1
download ×1
html ×1
http-headers ×1
javascript ×1
razor ×1
redis ×1
sql-server ×1
t-sql ×1
unit-testing ×1