小编Bri*_*chl的帖子

Json.NET JsonSerializer线程是否安全?

我正在尝试减少我的Web服务生成的垃圾量,我注意到我们正在JsonSerializer为每个请求创建一个新的Json.NET 实例.它不是有史以来最轻量级的对象,所以我想知道我是否可以创建单个实例并将其重用于所有请求.首先,这要求在序列化和反序列化期间它是线程安全的.

文档没有说明它是否是线程安全的.

检查代码似乎序列化和反序列化方法是线程安全的,只要您不同时更改对象上的任何设置.但是,这是一个复杂的课程,所以我不能100%肯定我的分析.

有没有人试过重用实例JsonSerializer并让它工作与否?重复使用是否有任何已知问题?

c# json.net

33
推荐指数
3
解决办法
6539
查看次数

从HTML注入和XSS中,createTextNode是否完全安全?

我正在开发单页webapp.我正在通过直接创建DOM节点来进行渲染.特别是,通过创建文本节点,将所有用户提供的数据添加到页面中document.createTextNode("user data").

这种方法是否避免了HTML注入,跨站点脚本(XSS)以及用户可以做的所有其他恶意事件的任何可能性?

html javascript security xss web

13
推荐指数
1
解决办法
3274
查看次数

MongoDB .NET在upsert上不生成_id

我正在尝试使用.NET驱动程序将文档插入MongoDB 2.4.4.它似乎不会自动生成_idon upsert,虽然它确实正确生成了_idon 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)

c# mongodb mongodb-.net-driver

13
推荐指数
1
解决办法
4345
查看次数

如何使启动任务具有幂等性?

我在批处理文件中有许多启动任务.特别是我调用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)

iis dos azure appcmd

8
推荐指数
1
解决办法
2054
查看次数

在WCF服务中设置HTTP缓存控制头

我正在研究在WCF上实现的HTTP REST服务.我想适当地为我的操作设置HTTP缓存控制头.

我已经看到一些涉及使用WebOperationContext.Current.OutgoingResponse修改每个方法中的标头的示例.但是说实话,这是一个痛苦的屁股,特别是因为几乎所有的操作都将使用相同的缓存控制策略(无缓存).

我认为必须有一种优雅的方式来设置它.也许ServiceBehavior的组合可以设置服务级别的默认值,而OperationBehaviors可以覆盖某些操作的默认值?或者也许有更好的方法来做到这一点?

asp.net rest wcf http-caching

7
推荐指数
1
解决办法
2201
查看次数

C#:如果操作首先完成,则使用RegisterWaitForSingleObject

我正在使用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)

处理这个问题的正确方法是什么?我还需要担心 …

.net c# multithreading asynchronous

7
推荐指数
1
解决办法
5821
查看次数

1.7升级后,Azure WebRole无法启动

我最近尝试将我的WebRole从Azure SDK v1.6升级到v1.7.这似乎工作正常.我可以在我的devfabric中构建并运行该角色就好了.当我尝试将升级后的项目部署到真实云时,实例永远不会启动.他们只是坐在"忙碌"的状态.有趣的是,他们没有做典型的"循环回路",他们只是永远坐在"忙碌".

当我使用RDP登录实例时,我在事件日志中看到以下错误:

属于站点"1"的应用程序"/"具有无效的AppPoolId"DefaultAppPool"集.因此,应用程序将被忽略.

其次是:

站点1已禁用,因为为站点定义的根应用程序无效.有关根应用程序无效的信息,请参阅上一个事件日志消息.

查看IIS管理器确认没有名为"DefaultAppPool"的AppPool.对于Azure创建的名称,也没有典型的带有GUID的AppPools.不出所料,我的网站也不存在.

那么我该如何解决这个问题呢?

iis azure azure-web-roles

7
推荐指数
1
解决办法
2403
查看次数

Backbone.js集合upsert?

我正在使用Backbone.js构建一个应用程序.我的一些服务器端API将在特定时间后返回所有新的或更改的模型.其中一些对象对我的收藏可能是新的,所以我可以添加它们.其他可能已经存在,在这种情况下,我想更新现有的模型.所以基本上我正在寻找upsert(更新或插入)功能.

这类似于0.9.0中添加的{add:true}选项,除了我还想要更新.

有一个简单/已知的方法来做到这一点?更新代码似乎并不难,但我不想重新发明轮子.

backbone.js

6
推荐指数
2
解决办法
2737
查看次数

在Server 2008R2上使用.NET 4.5更改DateTime.ToLocalTime()行为?

我们看到.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)

.net c# datetime

6
推荐指数
1
解决办法
1466
查看次数

.NET:如何判断编码是否支持字符串中的所有字符?

我有很多需要输出的文本,其中包括来自多种语言的各种字符.有时我需要输出除Unicode之外的字符编码(例如,Shift-JIS或ISO-8859-2)的文本,以匹配它将要访问的页面.

如果文本具有编码无法处理的字符(例如,ISO-8859-2编码输出中的日文字符),则输出结果为奇数字符.我可以逃脱它们,但我宁愿这样做只有在真的有必要的时候.

所以,我的问题是:如果编码可以处理我的字符串中的所有字符,是否有一种方法可以提前告诉我?

编辑:我认为EncoderFallback可能是我问的问题的正确答案.不幸的是,它似乎并不适合我的特殊情况.我的想法是将字符转换为它们的HTML实体等价物(例如,モ而不是モ).但是,编码器只转换它找到的第一个这样的字符,如果我设置了Response.ContentEncoding,它根本就不会调用我的EncoderFallback.

.net c# encoding text character-encoding

3
推荐指数
1
解决办法
1351
查看次数

反序列化时缺少JSON.Net构造函数参数

我有一个简单的对象,我正在通过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字段已正确设置,因此显然反序列化不会完全失败,只有一个字段失败.

.net json json.net deserialization

3
推荐指数
1
解决办法
965
查看次数

链接Task.WhenAll()

我想出了一些链接多个调用的代码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()的 …

.net c# task-parallel-library async-await

3
推荐指数
1
解决办法
654
查看次数