我正在开发单页webapp.我正在通过直接创建DOM节点来进行渲染.特别是,通过创建文本节点,将所有用户提供的数据添加到页面中document.createTextNode("user data")
.
这种方法是否避免了HTML注入,跨站点脚本(XSS)以及用户可以做的所有其他恶意事件的任何可能性?
我正在尝试使用.NET驱动程序将文档插入MongoDB 2.4.4.它似乎不会自动生成_id
on upsert,虽然它确实正确生成了_id
on plain插入.如何让驱动程序正确生成_id
?
这是一个展示问题的小例子.
public class MongoObject
{
[BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
[BsonRepresentation(BsonType.ObjectId)]
public string MongoID { get; set; }
public int Index { get; set; }
}
var obj = new MongoObject()
{
Index = 1
};
//This inserts the document, but with a _id set to Null
_collection.Update(Query.EQ("Index", BsonValue.Create(1)), Update.Replace(obj), UpdateFlags.Upsert, new WriteConcern() { Journal = true });
//This inserts the document with the expected autogenerated _id
//_collection.Insert(obj);
Run Code Online (Sandbox Code Playgroud) 我在批处理文件中有许多启动任务.特别是我调用IIS appcmd.exe
来配置IIS.Azure中的启动任务应该是幂等的(即,能够以相同的结果重复运行),以防角色由于某种原因重新启动.不幸的是,我的许多IIS配置命令第二次都会失败,例如因为它们第一次删除配置节点,然后在后续运行中不存在.
我的问题是,如何使这些启动任务具有幂等性?有没有办法让appcmd.exe不抛出错误?有没有办法让shell捕获错误?有没有办法让Azure框架忽略错误?
这是我的启动任务的一个例子.这都包含在命令文件中configiis.cmd
.
@REM Enable IIS compression for application/json MIME type
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost
@REM Set IIS to automatically start AppPools
%windir%\system32\inetsrv\appcmd.exe set config -section:applicationPools -applicationPoolDefaults.startMode:AlwaysRunning /commit:apphost
@REM Set IIS to not shut down idle AppPools
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 /commit:apphost
@REM But don't automatically start the AppPools that we don't use, and do shut them down when idle
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='Classic .NET …
Run Code Online (Sandbox Code Playgroud) 我正在研究在WCF上实现的HTTP REST服务.我想适当地为我的操作设置HTTP缓存控制头.
我已经看到一些涉及使用WebOperationContext.Current.OutgoingResponse
修改每个方法中的标头的示例.但是说实话,这是一个痛苦的屁股,特别是因为几乎所有的操作都将使用相同的缓存控制策略(无缓存).
我认为必须有一种优雅的方式来设置它.也许ServiceBehavior的组合可以设置服务级别的默认值,而OperationBehaviors可以覆盖某些操作的默认值?或者也许有更好的方法来做到这一点?
我正在使用Begin/End样式方法进行一些异步网络I/O. (它实际上是对Azure表存储的查询,但我认为这并不重要.)我已经使用了实现了客户端超时ThreadPool.RegisterWaitForSingleObject()
.据我所知,这工作正常.
因为ThreadPool.RegisterWaitForSingleObject()
a WaitHandle
作为参数,我必须开始I/O操作,然后执行ThreadPool.RegisterWaitForSingleObject()
.这似乎引入了I/O在我注册等待之前完成的可能性.
简化的代码示例:
private void RunQuery(QueryState queryState)
{
//Start I/O operation
IAsyncResult asyncResult = queryState.Query.BeginExecuteSegmented(NoopAsyncCallback, queryState);
//What if the I/O operation completes here?
queryState.TimeoutWaitHandle = ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, QuerySegmentCompleted, asyncResult, queryTimeout, true);
}
private void QuerySegmentCompleted(object opState, bool timedOut){
IAsyncResult asyncResult = opState as IAsyncResult;
QueryState state = asyncResult.AsyncState as QueryState;
//If the I/O completed quickly, could TimeoutWaitHandle could be null here?
//If so, what do I do about that?
state.TimeoutWaitHandle.Unregister(asyncResult.AsyncWaitHandle);
}
Run Code Online (Sandbox Code Playgroud)
处理这个问题的正确方法是什么?我还需要担心 …
我最近尝试将我的WebRole从Azure SDK v1.6升级到v1.7.这似乎工作正常.我可以在我的devfabric中构建并运行该角色就好了.当我尝试将升级后的项目部署到真实云时,实例永远不会启动.他们只是坐在"忙碌"的状态.有趣的是,他们没有做典型的"循环回路",他们只是永远坐在"忙碌".
当我使用RDP登录实例时,我在事件日志中看到以下错误:
属于站点"1"的应用程序"/"具有无效的AppPoolId"DefaultAppPool"集.因此,应用程序将被忽略.
其次是:
站点1已禁用,因为为站点定义的根应用程序无效.有关根应用程序无效的信息,请参阅上一个事件日志消息.
查看IIS管理器确认没有名为"DefaultAppPool"的AppPool.对于Azure创建的名称,也没有典型的带有GUID的AppPools.不出所料,我的网站也不存在.
那么我该如何解决这个问题呢?
我正在使用Backbone.js构建一个应用程序.我的一些服务器端API将在特定时间后返回所有新的或更改的模型.其中一些对象对我的收藏可能是新的,所以我可以添加它们.其他可能已经存在,在这种情况下,我想更新现有的模型.所以基本上我正在寻找upsert(更新或插入)功能.
这类似于0.9.0中添加的{add:true}选项,除了我还想要更新.
有一个简单/已知的方法来做到这一点?更新代码似乎并不难,但我不想重新发明轮子.
我们看到.NET 4.5和System.DateTime的奇怪行为.应用于具有Kind = Utc的DateTime对象时,ToLocalTime()的行为在使用.NET 4.5的Server 2008R2计算机上与.NET 4.0相比时显得不同.更奇怪的是,安装了.NET 4.5的开发者PC上并没有出现这个问题.
有没有人对这种行为有解释?我无法在Microsoft网站上发现任何错误报告.我们可以使用更复杂的方法来转换有效的时间,但是很难确保将来没有人使用.ToLocalTime().
开发人员PC - 在VS2012安装期间安装的Windows 7,VS2012,.NET 4.5:
unixEpoch 621355968000000000 Utc
asLocal1 635121441023588986 Local
asLocal2 635121441023588986 Unspecified
Run Code Online (Sandbox Code Playgroud)
Production Server 1 - Server 2008R2,.NET 4.0
unixEpoch 621355968000000000 Utc
asLocal1 635121441023588986 Local
asLocal2 635121441023588986 Unspecified
Run Code Online (Sandbox Code Playgroud)
Production Server 2 - 作为独立软件包安装的Server 2008R2,.NET 4.5
unixEpoch 621355968000000000 Utc
asLocal1 ***635121405023588986*** Local
asLocal2 635121441023588986 Unspecified
Run Code Online (Sandbox Code Playgroud)
除了安装.NET 4.5之外,生产服务器1和2是相同的.当在全球几个不同的本地时区运行时,问题就会出现.
演示此问题的示例代码:
using System;
using NUnit.Framework;
namespace DateTimeToLocal
{
[TestFixture]
public class DateTimeFixture
{
private const long unixTimeInNanos = 1376561702358898611;
[Test]
public void Demonstrate() …
Run Code Online (Sandbox Code Playgroud) 我有很多需要输出的文本,其中包括来自多种语言的各种字符.有时我需要输出除Unicode之外的字符编码(例如,Shift-JIS或ISO-8859-2)的文本,以匹配它将要访问的页面.
如果文本具有编码无法处理的字符(例如,ISO-8859-2编码输出中的日文字符),则输出结果为奇数字符.我可以逃脱它们,但我宁愿这样做只有在真的有必要的时候.
所以,我的问题是:如果编码可以处理我的字符串中的所有字符,是否有一种方法可以提前告诉我?
编辑:我认为EncoderFallback可能是我问的问题的正确答案.不幸的是,它似乎并不适合我的特殊情况.我的想法是将字符转换为它们的HTML实体等价物(例如,モ而不是モ).但是,编码器只转换它找到的第一个这样的字符,如果我设置了Response.ContentEncoding,它根本就不会调用我的EncoderFallback.
我有一个简单的对象,我正在通过JSON往返.它序列化很好,但我反序列化其中一个值设置为默认值(在这种情况下为0).这是为什么?
这是我的目标:
public class CurrencyExchangeRate
{
public string CurrencyCode { get; private set; }
public decimal Rate { get; private set; }
public CurrencyExchangeRate(string currencyCode, decimal exchangeRate)
{
this.CurrencyCode = currencyCode;
this.Rate = exchangeRate;
}
}
Run Code Online (Sandbox Code Playgroud)
这序列化为JSON {"CurrencyCode":"USD", "Rate": 1.10231}
.但是当我反序列化时,Rate
字段始终设置为0
.该CurrencyCode
字段已正确设置,因此显然反序列化不会完全失败,只有一个字段失败.
我想出了一些链接多个调用的代码Task.WhenAll()
.我认为这有效,但看起来有点滑稽.目的是Tasks
在关闭服务之前允许所有内容完成.伪代码省略了一些循环,方法声明等...
//initialize once on startup
Task _completion = Task.FromResult(0);
//Every minute a timer fires and we start some tasks
// and then chain them into the existing Task
var newTasks = Enumerable.Range(0, 10).Select(_ => Task.Factory.StartNew(() => {/* long running stuff here */})).ToArray();
_completion = Task.WhenAll(_completion, Task.WhenAll(newTasks));
//At some point a shutdown will be requested, and we can just wait for the one Task to complete
_completion.Wait();
Run Code Online (Sandbox Code Playgroud)
出于任何原因,这是一个坏主意吗?我最终会持有对每一个的引用,Task
以便它们永远不会被垃圾收集,或者导致某些内部数组变得巨大,或者其他一些可怕的东西?
对我来说,反复取出结果Task.WhenAll()
并将其反馈给我感觉有点奇怪Task.WhenAll()
.我看了一下Task.WhenAll()的 …
c# ×6
.net ×5
azure ×2
iis ×2
json.net ×2
appcmd ×1
asp.net ×1
async-await ×1
asynchronous ×1
backbone.js ×1
datetime ×1
dos ×1
encoding ×1
html ×1
http-caching ×1
javascript ×1
json ×1
mongodb ×1
rest ×1
security ×1
text ×1
wcf ×1
web ×1
xss ×1