在编写Web服务时,如何构建返回值?你如何处理错误条件(预期和意外的错误)?如果你返回像int这样简单的东西,你只是将它返回,或者将它嵌入到一个更复杂的对象中吗?一个服务中的所有Web方法是返回单个类的实例,还是为每个方法创建自定义返回值类?
在设计数据库以使用MVCC(多版本并发控制)时,您可以使用类似"IsLatest"的布尔字段或整数"VersionId"创建表,并且您永远不会进行任何更新,只会在事情发生变化时插入新记录.
MVCC为需要详细历史记录的应用程序提供自动审计,并且还减轻了数据库对更新锁的压力.缺点是,由于获得最新版本所需的额外条款,它会使您的数据大小更大并减慢选择速度.它还使外键更复杂.
(请注意,我不是在讨论SQL Server的快照隔离级别等RDBMS中的本机MVCC支持)
这已在Stack Overflow上的其他帖子中讨论过.[todo - 链接]
我想知道,哪些流行的实体/ ORM框架(Linq to Sql,ADO.NET EF,Hibernate等)可以干净地支持这种类型的设计?这是对典型ActiveRecord设计模式的重大改变,因此我不确定那里的大多数工具是否可以帮助那些决定使用他们的数据模型走这条路线的人.我对如何处理外键特别感兴趣,因为我甚至不确定将数据建模为支持MVCC的最佳方法.
Windows Server 2003存在一个限制,它会阻止您复制超大文件,与您拥有的RAM量成比例.限制在CopyFile和CopyFileEx函数中,xcopy,Explorer,Robocopy和.NET FileInfo类使用这些函数.
这是你得到的错误:
无法复制[filename]:系统资源不足,无法完成所请求的服务.
这是关于该主题的知识库文章,但它涉及NT4和2000.
还有一个建议是从Exchange安装中使用ESEUTIL,但我没有运气这么做.
有人知道一个快速,简单的方法来处理这个问题吗?我在谈论带有2Gb RAM的机器上> 50Gb.我计划启动Visual Studio并为我编写一些东西,但是有一些已经存在的东西,稳定且经过充分测试会很好.
[编辑]我提供了工作C#代码以配合接受的答案.
在理想的世界中,我们的开发过程将是完美的,从而产生经过如此彻底测试的常规版本,从而无需"修补"正在运行的应用程序.
但是,不幸的是,我们生活在现实世界中,有时虫子会从我们身边溜走,并且在我们已经忙于编写下一个版本之前,不要将它们放在丑陋的头上.而bug 现在需要修复.不作为下一个计划发布的一部分.当交通消失时,今晚不是. 现在.
你是如何处理这种需求的?它确实可以与良好的设计实践背道而驰,比如将代码重构为漂亮的离散类库.
在生产服务器上手动编辑标记和存储过程可能会导致灾难,但它也可以避免灾难.
应用程序设计和部署技术有哪些好的策略可以在维护需求和良好的编码实践之间找到平衡点?
是否有一个快速的单行程序在Sql Server中调用datepart并获取当天的名称而不仅仅是数字?
select datepart(dw, getdate());
Run Code Online (Sandbox Code Playgroud)
这将返回1-7,星期日为1.我希望'星期日'而不是1.
我有一个使用CreateFile()API读取/写入USB设备的库.该设备恰好实现了HID设备配置文件,因此它与Microsoft的HID类驱动程序兼容.
系统上安装的其他一些应用程序是以读/写模式打开设备,没有共享模式.这会阻止我的库(以及消耗它的任何东西)使用该设备.我认为这是与HID兼容的设备 - 其他驱动程序软件(鼠标,控制器,PHIDGETS等)可能不合作.
无论如何,设备文件路径的形式如下:
1: "\\?\hid#hpqremhiddevice&col01#5&21ff20e7&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}".
2: "\\?\hid#vid_045e&pid_0023#7&34aa9ece&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}".
3: "\?\hid#vid_056a&pid_00b0&col01#6&5b05f29&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}".
我正在尝试使用代码打开它,例如:
// First, open it with minimum permissions, this device may not be ours.
// we'll re-open it later in read/write
hid_device_ref = CreateFile(
device_path, GENERIC_READ,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
Run Code Online (Sandbox Code Playgroud)
我已经考虑过像SysInternals这样的工具,如FileMon或Process Monitor.但我似乎无法报告上面列出的设备文件句柄的使用情况.
我在我的应用程序中有一个要求,我认为可以通过使用线程本地存储来满足,但我想知道它是否是最好避免的事情之一.
我已经阅读了一些关于这个主题的文章:
http://www.dotnetcoders.com/web/Articles/ShowArticle.aspx?article=58
http://msdn.microsoft.com/en-us/library/system.threadstaticattribute(vs.80).aspx
我知道如何使用它,我只是想知道我是否应该使用它.
有什么建议,需要注意什么?
[编辑]
这是用例:
我通过一些对每个查询进行大量日志记录的方法来汇集所有数据访问权限.我记录的一件事是命令文本的完整转储,其中填写了命令,这样我就可以直接从跟踪日志中复制粘贴到Sql Management Studio中.
在我的网络应用程序中的global.asax中,当我收到未处理的异常时,我会向管理员发送尽可能多的信息.当我收到SqlException时,我想将sql命令转储文本放入此电子邮件中,这样可以节省因查询导致页面爆炸时挖掘跟踪日志的时间.
我不想改变我的数据访问类的方法签名,所以我可以在堆栈中一直传递一些引用,只是为了在我得到异常时将其删除.我在想TLS可能是一个放"lastsqlcommand"之类的好地方,但这看起来不是一个可行的解决方案.
我知道这与参数嗅探有关,但我只是对以下示例的某些内容感到困惑,即使是一项能够很好地完成这么多复杂事情的技术.
我们中的许多人遇到了间歇性运行比平时慢几个数量级的存储过程,然后如果从过程中复制出sql并在单独的查询窗口中使用相同的参数值,则它会像往常一样快速运行.
我刚刚修改了这样的程序:
alter procedure p_MyProc
(
@param1 int
) as -- do a complex query with @param1
Run Code Online (Sandbox Code Playgroud)
对此:
alter procedure p_MyProc
(
@param1 int
)
as
declare @param1Copy int;
set @param1Copy = @param1;
-- Do the query using @param1Copy
Run Code Online (Sandbox Code Playgroud)
它从跑步一分钟后回到不到一秒钟,就像它通常运行一样.这种行为似乎完全随机.对于10个@param1输入中的9个,查询速度很快,无论它最终需要处理多少数据,或者结果设置多大.但是对于那10个中的1个,它只是迷失了.修复是用查询中的相同int替换int?
这没有道理.
[编辑]
@gbn链接到这个问题,详细说明了类似的问题:
已知问题?:SQL Server 2005存储过程无法使用参数完成
我犹豫着哭"Bug!" 因为这经常是一个警察,但这对我来说确实看起来像个错误.当我使用相同的输入运行我的存储过程的两个版本时,我看到相同的查询计划.唯一的区别是原始版本需要运行超过一分钟,而带有goofy参数复制的版本会立即运行.
.net ×2
sql-server ×2
asp.net ×1
c# ×1
c++ ×1
cil ×1
database ×1
datepart ×1
deployment ×1
device ×1
file-io ×1
hid ×1
maintenance ×1
optimization ×1
orm ×1
soap ×1
sql ×1
thread-local ×1
usb ×1
web-services ×1
winapi ×1
windows ×1
wsdl ×1