保存和加载不同的文件格式时是否有一个好用的模式?
例如,我有一个复杂的文档类层次结构,但我想支持一些不同的文件格式.
我考虑过策略模式,但我不相信,因为需要访问对象的每个部分才能保存和加载它.
我们目前正在讨论是否最好通过WCF通道抛出故障,而不是传递指示服务状态或响应的消息.
故障来自WCF的内置支持,您可以使用内置的错误处理程序并做出相应的反应.然而,这会带来开销,因为在.NET中抛出异常可能会非常昂贵.
消息可以包含必要的信息,以确定服务调用发生的情况,而不会产生抛出异常的开销.但是,它确实需要几行重复代码来分析消息并确定其内容后面的操作.
我们开始创建一个可以在我们的服务中使用的通用消息对象,这就是我们想出的:
public class ReturnItemDTO<T>
{
[DataMember]
public bool Success { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public T Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我的所有服务调用都返回此项,我可以一直检查"成功"属性以确定是否一切顺利.然后我在事件中有一个错误消息字符串表示出现了问题,如果需要,我还有一个包含Dto的通用项.
必须将异常信息记录到中央记录服务,而不是从服务传回.
思考?评论?想法?建议?
对我的问题进一步澄清
我与错误合同有关的一个问题是沟通业务规则.
比如,如果有人登录,并且他们的帐户被锁定,我该如何沟通呢?他们的登录显然失败了,但由于"帐户锁定"的原因导致登录失败.
我也是:
A)使用boolean,抛出Fault并锁定消息帐户
B)返回AuthenticatedDTO及相关信息
有没有办法更改String(byte [])构造函数使用的编码?
在我自己的代码中,我使用String(byte [],String)来指定编码,但我使用的是无法更改的外部库.
String src = "with accents: é à";
byte[] bytes = src.getBytes("UTF-8");
System.out.println("UTF-8 decoded: "+new String(bytes,"UTF-8"));
System.out.println("Default decoded: "+new String(bytes));
Run Code Online (Sandbox Code Playgroud)
这个输出是:
UTF-8 decoded: with accents: é à Default decoded: with accents: é Ã
我试过更改系统属性,file.encoding但它不起作用.
几天前在wordpress上发布了一个新博客(http://ghads.wordpress.com),我想现在或之后发布一些代码片段.反正有没有支付额外的插件使它看起来像代码?
我希望这个问题对于这个论坛来说不算太基础,但我们会看到.我想知道如何重构一些代码以获得更好的性能,这些代码会运行很多次.
假设我正在使用Map(可能是HashMap)创建一个单词频率列表,其中每个键都是一个字符串,其中包含要计数的单词,而值是一个整数,每次找到该单词的标记时,该整数都会递增.
在Perl中,增加这样的值将非常简单:
$map{$word}++;
Run Code Online (Sandbox Code Playgroud)
但在Java中,它要复杂得多.这是我目前正在做的方式:
int count = map.containsKey(word) ? map.get(word) : 0;
map.put(word, count + 1);
Run Code Online (Sandbox Code Playgroud)
这当然依赖于较新Java版本中的自动装箱功能.我想知道你是否可以提出一种更有效的方法来增加这样的价值.是否有良好的性能原因可以避开Collections框架并使用其他东西?
更新:我已经对几个答案进行了测试.见下文.
我在我们的数据中心运行了一个asp.NET webapplication,我们希望客户通过单点登录进行登录.如果我们可以使用IIS集成安全性,这将非常容易.但是我们不能这样做.我们对客户的域控制器没有信任.我们希望网站可用于一般互联网.只有当人们从客户网络中连接时,他们才会自动登录.
我们拥有的是域帐户列表以及在asp.net代码中通过LDAP查询DC的方法.在IIS中允许匿名访问时,IIS永远不会向浏览器挑战凭据.因此我们的应用程序永远不会获得用户凭据.
有没有办法强制浏览器发送凭据(因此能够使用单点登录)与IIS接受匿名请求.
更新:
我尝试自己发送401:未经授权,www-authenticate:NTLM标头.接下来发生的事情(正如Fiddler告诉我的那样)是IIS完全控制并处理完整的请求链.据我从各种来源了解,IIS采用用户名,将挑战发送回浏览器.浏览器返回加密响应,IIS连接到域控制器以使用此响应对用户进行身份验证.
但是在我的方案中,IIS与客户端位于不同的Windows域中,无法对用户进行身份验证.因此,建立一个带有Windows身份验证功能的独立站点也无法正常工作.
现在我需要选择我正在研究的选项:
使用TableAdapter时,我找不到一种优雅的方法来从存储过程中获取返回值.
使用非标量存储过程调用时,TableAdapter似乎不支持SQL存储过程返回值.您希望自动生成函数的返回值是来自存储过程的返回值,但它不是(它实际上是受影响的行数).虽然可以使用'out'参数并将变量作为ref传递给自动生成的函数,但它不是一个非常干净的解决方案.
我在网上看到了一些丑陋的黑客来解决这个问题,但没有像样的解决方案.任何帮助,将不胜感激.
我已经使用SVN建立了一个存储库并上传了项目.有多个用户在处理这些项目.但是,并非所有人都在处理所有项目并需要访问权限.我想为每个项目的用户设置权限.
我该如何实现这一目标?
asp.net ×3
java ×2
blogs ×1
c# ×1
collections ×1
encoding ×1
exception ×1
file-io ×1
iis ×1
ip-address ×1
mime ×1
networking ×1
optimization ×1
sql-server ×1
svn ×1
types ×1
wcf ×1