小编zaf*_*s.m的帖子

序列化词典时保留外壳

我有一个Web Api项目配置如下:

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
Run Code Online (Sandbox Code Playgroud)

但是,我希望字典键的外壳保持不变.是否有任何属性Newtonsoft.Json我可以使用一个类来表示我希望在序列化期间套管保持不变?

public class SomeViewModel
{
    public Dictionary<string, string> Data { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

c# json.net

80
推荐指数
3
解决办法
2万
查看次数

T-sql - 确定值是否为整数

我想确定一个值是否为整数(如TryParse在.NET中).不幸的是ISNUMERIC,我不适合我,因为我只想解析整数而不是每种数字.有ISINT什么东西吗?

这里有一些代码可以清楚地表达出来.如果MY_FIELD不是int,则此代码将失败:

SELECT @MY_VAR = CAST(MY_FIELD AS INT)
FROM MY_TABLE
WHERE MY_OTHER_FIELD = 'MY_FILTER'
Run Code Online (Sandbox Code Playgroud)

谢谢

t-sql sql-server integer casting isnumeric

40
推荐指数
5
解决办法
14万
查看次数

客户端应该如何将facebook访问令牌传递给服务器?

在每次调用我的REST API时,我都要求客户端传递用户的facebook访问令牌,该令牌对用户进行身份验证.传递此令牌的最佳做法是什么?

  1. 也许作为HTTP问号背后的参数

    GET /api/users/123/profile?access_token=pq8pgHWX95bLZCML
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者以某种方式在请求的标题中,类似于HTTP基本认证

  3. 也许是第三种选择?(我已经排除了在JSON中传递它,因为我希望令牌也在GET调用中传递,所以JSON不适合我认为)

authentication rest http oauth-2.0 facebook-access-token

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

Json.NET如何在反序列化期间执行依赖注入?

当我有一个没有默认构造函数的类,即使用依赖注入来传递其依赖项时,可以Newtonsoft.Json创建这样的对象吗?

例如:

public class SomeFoo
{
    private readonly IFooDependency _dependency;

    public SomeFoo(IFooDependency dependency){
        if(dependency == null)
            throw new ArgumentNullException("dependency");

        _dependency = dependency;
    }

    public string Data { get; set; }
    public int MoreData { get; set; }

    public void DoFoo(){
        Data = _dependency.GetFooData();
        MoreData = _dependency.GetMoreFooDate();
    }
}
Run Code Online (Sandbox Code Playgroud)

在序列化过程中,我只关心存储Data和MoreData(以及对象的类型,但暂时不要让事情复杂化).现在,为了反序列化,我可以调用类似的东西

var obj = JsonConvert.DeserializeObject<SomeFoo>(jsonText);
Run Code Online (Sandbox Code Playgroud)

如何让JsonConvert了解我的DI容器?

(注意:解决方法是在我的类中始终使用默认构造函数,并在那里调用Service Locator以获取我需要的任何依赖项.我只是在寻找一些更简洁的解决方案而不用这些构造函数来规划我的类).

c# json dependency-injection ninject json.net

17
推荐指数
2
解决办法
7554
查看次数

Ninject - 当RequestScope无意义时,DbContext应在什么范围内绑定?

在MVC/WebAPI环境中,我将用于InRequestScope绑定DbContext.

但是,我现在处于Console应用程序/ Windows服务/ Azure辅助角色(并不重要,只是没有Web请求范围),它会定期创建一些Tasks异步运行.我希望每个任务都有自己的DbContext,并且由于任务在自己的线程上运行,我尝试DbContext使用绑定InThreadScope.

不幸的是,我意识到任务完成时不会处理DbContext.实际发生的是,线程返回线程池,当它被分配一个新任务时,它已经有一个DbContext,所以DbContexts永远保持活着.

有没有办法InThreadScope在这里使用或我应该使用其他范围?当线程从ThreadPool中不时返回时,如何使用ThreadScope?

multithreading entity-framework dependency-injection ninject threadpool

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

如何在水平扩展写入时避免并发问题?

假设有一个工作服务从队列接收消息,从文档数据库中读取具有指定Id的产品,根据消息应用一些操作逻辑,最后将更新的产品写回数据库(a).

水平缩放写入

在处理不同的产品时,这项工作可以安全地并行完成,因此我们可以横向扩展(b).但是,如果多个服务实例在同一产品上运行,我们最终可能会遇到并发问题或数据库中的并发异常,在这种情况下我们应该应用一些重试逻辑(并且仍然可能会再次失败,等等) .

问题:我们如何避免这种情况?有没有办法可以确保两个实例不能在同一产品上运行?

示例/使用案例:在线商店在productA,productB和productC上有很好的销售,一小时结束,数百名客户正在购买.对于每次购买,都会将消息排入队列(productId,numberOfItems,price). 目标:我们如何运行我们的工作服务的三个实例,并确保productA的所有消息最终都在instanceA,productB到instanceB和productC到instanceC(导致没有并发问题)?

注意:我的服务是用C#编写的,作为工作者角色托管在Azure上,我使用Azure队列进行消息传递,我正在考虑使用Mongo进行存储.此外,实体ID是GUID.

它更多的是关于技术/设计,所以如果你使用不同的工具来解决问题,我仍然感兴趣.

scalability sharding azure horizontal-scaling microservices

9
推荐指数
1
解决办法
1051
查看次数

Dictionary <Tkey,TValue>,List <T>和其他集合实现/运行时

我想知道是否有任何好的参考(网站甚至更好,一本书),我可以找到有关常用集合的内部实现的信息,如

  • Dictionary<TKey, TValue>
  • List<T>
  • Queue<T>
  • Stack<T>
  • 等等

通过内部实现,我的意思是他们如何使用动态数组来存储数据,他们调整大小的频率,常见操作的时间和空间复杂度.

当然,如果有人认为他可以在这个帖子中提供这些信息,那么非常欢迎你!

.net c# complexity-theory big-o generic-collections

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

当另一个Observable(通知程序)发出时,从源Observable发出下一个值

我希望我的情况很常见但是找不到合适的东西.我想实现的,Angular2/ RxJS 5这就是:

source:   ---1--2--3--4---------5--------6-|-->
notifier: -o------------o-----o---o--o-o------>
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
output:   ---1----------2-----3---4--5---6-|-->
Run Code Online (Sandbox Code Playgroud)

所以,我有一个发出值的源Observable,我希望它们中的每一个只在第二个Observable(称为通知符)发出时进入输出.这就像通知程序中的一个事件意味着"允许接下来通过".

我试过了delayWhen,但我的主要问题是所有的源值都在等待来自通知程序的同一个事件,所以例如如果3个源值"排队"并且通知程序发出一次,则所有3个值都通过,这是不是我想要的.

reactive-programming rxjs rxjs5 angular

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

如何通过避免扫描空值来减少索引扫描

我正在使用SQL Server 2008 R2,我想在非唯一的可空字段上添加非聚集索引.我的索引还会包含一个列,以避免访问我的聚簇索引:

CREATE INDEX IX_My_Index 
ON MyTable (myBasicField) 
INCLUDE (myIncludedField);
Run Code Online (Sandbox Code Playgroud)

在实际的数据中myBasicField会有很多,NULLs我想知道是否有一种方法可以通过不扫描这些来提高性能NULLs,或者防止将NULL值存储在我的索引上.

提前致谢.

t-sql indexing nullable sql-server-2008-r2 non-clustered-index

5
推荐指数
1
解决办法
2314
查看次数

用于移动应用的REST API上的OAuth

正在开发移动应用程序的后端,使用ASP.NET MVC 4 Web Api构建RESTful API。该应用程序将在iOS和Android上运行。我的用户将只能使用其Facebook帐户登录,并且只有在登录后,他们才能使用全部功能。

我在移动应用程序方面没有太多经验,这更多是一个设计问题:对于您应该由谁负责facebook身份验证,这两种方案(或也许是第三种方案)中的哪一种似乎更好?

  1. 移动客户端负责。无需访问后端,它直接与Facebook对话,允许用户输入其凭据,当它从Facebook获得令牌时,它将首次访问后端,并在每次请求中将令牌传递给后端。
  2. 后端API负责。移动客户端尝试从中访问资源。后端没有从客户端获得身份验证令牌,因此它将重定向到Facebook登录。用户输入凭据,facebook通过令牌将其回复给后端。然后,后端愿意回答有关所需资源的客户端响应。

当然,第二种情况意味着后端应使用DotNetOpenAuth之类的程序包来处理OAuth,而在第一种情况下,这些都发生在移动客户端中。

rest asp.net-mvc mobile oauth asp.net-web-api

5
推荐指数
1
解决办法
1149
查看次数

异步发布到Azure队列

我尝试异步地将Azure队列中的消息排入队列,如下所示:

private async Task EnqueueItemsAsync(IEnumerable<string> messages) {
            var tasks = messages.Select(msg => _queue.AddMessageAsync(new CloudQueueMessage(msg),
                null, null, null, null));

            await Task.WhenAll(tasks);
        }
Run Code Online (Sandbox Code Playgroud)

如果我说得对,这说"开始将一个项目排在另一个项目之后而不等待它们发布,请为每个任务保留一个参考,然后等待所有发布".

此代码在大多数情况下工作正常,但对于大量项目(5000),它开始入队,然后抛出超时异常(在排队~3500项后).

我通过等待每一个完成然后继续下一个来解决它

private async Task EnqueueItemsAsync(IEnumerable<string> messages) {
            foreach (var message in messages) {
                await _queue.AddMessageAsync(new CloudQueueMessage(message), null, null, null, null);
            }
        }
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会这样?

例外:

System.AggregateException包装许多此类异常: Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass4.<CreateCallbackVoid>b__3(IAsyncResult ar)请求信息RequestID:RequestDate:StatusMessage:<--- --->(内部异常#1)Microsoft.WindowsAzure.Storage.StorageException:客户端无法在指定的超时内完成操作.---> System.TimeoutException:客户端无法在指定的超时内完成操作.---内部异常堆栈跟踪结束--- Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync [T](IAsyncResult result)`.

c# async-await azure-queues

5
推荐指数
1
解决办法
1583
查看次数

如何使用ActionFilterAttribute记录运行时间?

我创建了一个动作过滤器,用于测量Web API v2中每个操作的运行时间.

public class RunningTimeAttribute : ActionFilterAttribute
    {
        private readonly ILogFactory _logFactory;
        private readonly ITimerFactory _timerFactory;
        private ITimer _timer;
        private ILogger _logger;

        public RunningTimeAttribute(ILogFactory logFactory, ITimerFactory timerFactory) {
            if(logFactory == null)
                throw new ArgumentNullException("logFactory");
            if(timerFactory == null)
                throw new ArgumentNullException("timerFactory");

            _logFactory = logFactory;
            _timerFactory = timerFactory;
        }

        public override void OnActionExecuting(HttpActionContext actionContext) {
            base.OnActionExecuting(actionContext);
            OnBeforeAction(actionContext);
        }

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) {
            OnAfterAction(actionExecutedContext);
            base.OnActionExecuted(actionExecutedContext);
        }

        private void OnBeforeAction(HttpActionContext actionContext) {
            var controllerName = actionContext.ControllerContext.Controller.GetType().FullName;
            var actionName = actionContext.ActionDescriptor.ActionName;

            _logger …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc logging action-filter asp.net-web-api

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