我正在努力寻找一个清晰简洁的例子,说明如何使用令牌实现基于服务的身份验证方案.据我所知,基本步骤如下:
第三步和第四步是我陷入困境的地方.我假设在这种情况下,"令牌"只需要是客户端可以解密的加密字符串,或者某个随机字符串存储在某个地方(即数据库),然后客户端可以验证,但我不确定然后客户端应该使用令牌或者为什么你甚至需要一个令牌 - 简单的用户ID也不能满足要求吗?
如果我有一组数据库表(例如,在Access文件中),并且需要根据规则集验证此集合中的每个表,该规则集在所有表中都有通用规则,以及特定于一个或一个子集的单个规则.表,有人可以推荐一个好的设计模式来研究吗?
具体来说,我想避免类似的代码:
void Main()
{
ValidateTable1();
ValidateTable2();
ValidateTable3();
}
private void ValidateTable1()
{
//Table1 validation code goes here
}
private void ValidateTable2()
{
//Table2 validation code goes here
}
private void ValidateTable3()
{
//Table3 validation code goes here
}
Run Code Online (Sandbox Code Playgroud)
此外,我决定使用log4net记录所有错误和警告,以便可以声明每个方法void
,并且不需要返回任何内容.这是一个好主意还是更好的创建某种ValidationException
捕捉所有异常并将它们存储在一起List<ValidationException>
之前将它们全部打印出去?
我确实找到了这个,看起来它可能有用,但我希望能找到一些代码样本来解决.有什么建议?过去有没有人做过类似的事情?
对于某些背景,程序将使用C#或VB.NET编写,并且这些表很可能存储在Access或SQL Server CE中.
首先,我理解接口或抽象类(在.NET/C#术语中)不能具有抽象静态方法的原因.我的问题更侧重于最佳设计解决方案.
我想要的是一组"辅助"类,它们都有自己的静态方法,这样如果我从第三方供应商那里得到对象A,B和C,我可以使用诸如
AHelper.RetrieveByID(string id); AHelper.RetrieveByName(string name); AHelper.DumpToDatabase();
由于我的AHelper,BHelper和CHelper类都基本上都有相同的方法,因此将这些方法移动到这些类随后派生的接口似乎是有意义的.但是,希望这些方法是静态的,使我无法使用通用接口或抽象类来导出所有这些方法.
我总是可以使这些方法非静态,然后首先实例化对象,如
AHelper a = new AHelper(); a.DumpToDatabase();
但是,这段代码对我来说似乎并不直观.你有什么建议?我应该完全放弃使用接口或抽象类(我现在的情况)还是可以重构这些以完成我正在寻找的设计?
现在我有一个每天早上运行的SSIS包,并向我报告前一天失败或成功的包数.这些包的信息部分包含在SQL Server 2005中sysjobs
的msdb
数据库(系统数据库)中的表(系统表)中.
当试图将包移动到C#可执行文件(主要是为了获得更好的格式化发送的电子邮件)时,我无法找到一种方法来创建允许我通过LINQ访问这些表的dbml文件.我试图寻找可以使这些表可见的任何属性,但我没有太多运气.
这可能与LINQ到SQL?
一些背景:我有一个数据库,我想使用linq-to-sql通过C#应用程序进行更新.此表中的一列具有XML数据类型.
该表中的每个其他列(不是XML数据类型)都可以完美地更新,但是当我对XML字段进行更改时,程序(看似)正确执行,但是在我之后字段始终保留其原始值跑SubmitChanges()
.
我浏览了一下互联网,发现Microsoft Connect上的一些帖子诊断出类似的问题,最后在这里偶然发现了解决方案:
要强制XML字段更新,这不会:
XElement tmp = MyLinqObject.XmlField;
MyLinqObject.XmlField = null;
MyLinqObject.XmlField = tmp;
Run Code Online (Sandbox Code Playgroud)
而不是强迫LINQ更新XML列分配克隆对象:
MyLinqObject.XmlField = new XElement (MyLinqObject.XmlField);
Run Code Online (Sandbox Code Playgroud)
我可以确认这似乎确实有效,但我不确定为什么.我唯一的猜测是XmlField属性在堆上有某种唯一标识符,通过制作克隆,你已经为它分配了一个新的唯一标识符.当Linq然后生成查询时,它甚至不会尝试查看该字段是否已更新,因为它有一个新的id,它只是将值写入数据库.但是,我只是在猜测并希望其他人能够更好地了解幕后发生的事情.
编辑:为了解决Jon的帖子,问题的原因(正如在MS Connect网站上解释的那样)是"XML字段不会更新,因为Linq-to-SQL不处理XElement.Changed事件".
对于我的实现,有效的代码最终看起来像这样:
MyXElementProperty.SetElementValue("Author", author);
MyXElementProperty = new XElement(MyXElementProperty);
Run Code Online (Sandbox Code Playgroud)
作为参考(对于发现此问题的任何其他人),以下内容也有效:
MyXElementProperty = new XElement(MyXElementProperty);
MyXElementProperty.SetElementValue("Author", author);
Run Code Online (Sandbox Code Playgroud) 如果我将ruby哈希变成一串名称 - 值对(例如,在HTTP参数中使用),这是最好的方法吗?
# Define the hash
fields = {"a" => "foo", "b" => "bar"}
# Turn it into the name-value string
http_params = fields.map{|k,v| "#{k}=#{v}"}.join('&')
Run Code Online (Sandbox Code Playgroud)
我想我的问题是:
有更简单的方法http_params
吗?当然,上面的方法是有效的,并且相当简单,但我很好奇是否有办法从哈希到字符串而不先创建一个数组(map
方法的结果)?
背景故事:我正在使用log4net处理我正在处理的项目的所有日志记录.可以在几种不同的情况下调用一种特定的方法 - 一些保证日志消息是错误,另一些保证日志消息是警告.
所以,作为一个例子,我怎么能转
Public Sub CheckDifference(ByVal A As Integer, ByVal B As Integer)
If (B - A) > 5 Then
log.ErrorFormat("Difference ({0}) is outside of acceptable range.", (B - A))
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
进入更符合以下方面的事情:
Public Sub CheckDifference(ByVal A As Integer, ByVal B As Integer, "Some delegate info here")
If (B - A) > 5 Then
**delegateinfo**.Invoke("Difference ({0}) is outside of acceptable range.", (B - A))
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
所以我可以调用它并传递log.ErrorFormat或log.WarnFormat作为委托?
我在VS 2008和.NET 3.5 SP1中使用VB.NET.此外,我对一般的代表来说还是比较新的,所以如果这个问题措辞不同以消除任何含糊之处,请告诉我.
编辑:另外,我怎么能将委托初始化为类构造函数中的ErrorFormat或WarnFormat?会这么容易myDelegate …
我是Ruby on Rails的新手,我正在通过这里发布的教程工作:http://www.tutorialspoint.com/ruby-on-rails/index.htm
我遇到的一个问题是,我在整个代码示例中都看到了这个问题:
<%= link_to c.title, {:action => 'show', :id => c.id} -%>
Run Code Online (Sandbox Code Playgroud)
在其他时间,我看到这个:
<%= link_to 'Edit', {:action => 'edit', :id => c.id} %>
Run Code Online (Sandbox Code Playgroud)
具体来说,我想知道在结束之前是否有理由留下减号( - )%>
或者只是代表作者的错字.
在旁注中,我尝试搜索谷歌和SO搜索类似的问题,但-%>
不是谷歌友好搜索词.
我在我工作的一个项目中使用了Shoulda和Test :: Unit.我遇到的问题是我最近改变了这个:
class MyModel < ActiveRecord::Base
validates_presence_of :attribute_one, :attribute_two
end
Run Code Online (Sandbox Code Playgroud)
对此:
class MyModel < ActiveRecord::Base
validates_presence_of :attribute_one
validates_presence_of :attribute_two, :on => :update
end
Run Code Online (Sandbox Code Playgroud)
以前,我的(传递)测试看起来像这样:
class MyModelTest < ActiveSupport::TestCase
should_validate_presence_of :attribute_one, :attribute_two
end
Run Code Online (Sandbox Code Playgroud)
据我所知,没有参数should_validate_presence_of
会导致此测试继续通过上面指定的更改.在测试需求时:attribute_two
,没有放弃Shoulda ,有什么方法可以解决这个问题吗?
我正试着用capistrano来解决一个好的git工作流程.我找到了一些 好 文章,但我要么完全没有把握他们的建议(可能),要么他们有点缺乏.
这是我到目前为止的想法,但是当我合并回主分支时(即在移动到舞台之前?之后?)并尝试将其挂钩到capistrano进行部署时,我会陷入困境:
git checkout master
git pull
git checkout -b bug-fix-branch
git status
git add .
git commit -m "Friendly message about the commit"
所以,这通常是我被卡住的地方.此时,我有一个健康的主分支和一个新的bug-fix-branch,它包含我的(未经测试的 - 除了单元测试)更改.
如果我想将我的更改推送到阶段(通过cap staging deploy
),我是否必须将我的更改合并回主分支(我不愿意,因为看起来master应该保持没有未经测试的代码)?我是否甚至从master部署(或者我应该首先标记版本然后修改我的production.rb
文件以从该标记部署)? git-deployment似乎解决了其中一些工作流问题,但我似乎无法弄清楚它究竟是如何实际挂钩到cap staging deploy和cap production deploy.
思考?我认为有可能的规范的方式来做到这一点,但我要么无法找到它还是我太新与git认识到,我已经找到了它.
救命!
c# ×2
linq-to-sql ×2
.net ×1
.net-3.5 ×1
capistrano ×1
delegates ×1
deployment ×1
git ×1
hash ×1
lambda ×1
linq ×1
log4net ×1
name-value ×1
oop ×1
rest ×1
ruby ×1
shoulda ×1
sql-server ×1
string ×1
unit-testing ×1
validation ×1
vb.net ×1
web-services ×1
xml ×1