小编Ret*_*der的帖子

如何清除MemoryCache?

我使用MemoryCache类创建了一个缓存.我添加了一些项目,但是当我需要重新加载缓存时,我想首先清除它.最快的方法是什么?我应该遍历所有项目并一次删除一个项目还是有更好的方法?

c# memory caching .net-4.0 memorycache

91
推荐指数
6
解决办法
8万
查看次数

链接取消令牌

我使用传递的取消令牌,以便可以干净地关闭我的服务.该服务具有不断尝试连接到其他服务的逻辑,因此令牌是打破在单独线程中运行的这些重试循环的好方法.我的问题是我需要调用一个具有内部重试逻辑的服务,但是如果重试失败则在一段时间后返回.我想创建一个带有超时的新取消令牌,这将为我做到这一点.这个问题是我的新令牌没有链接到"主"令牌,所以当主令牌被取消时,我的新令牌仍然有效,直到它超时或建立连接并返回.我想要做的是将两个令牌链接在一起,这样当主要的一个被取消时,我的新一个也会取消.我尝试使用该CancellationTokenSource.CreateLinkedTokenSource方法但是当我的新令牌超时时,它也取消了主令牌.有没有办法做我需要做的令牌,或者它需要更改重试逻辑(可能不会轻易做到这一点)

这是我想要做的:

主令牌 - 传递各种功能,以便服务可以干净地关闭.临时令牌 - 传递给单个函数并在一分钟后设置为超时

如果取消主令牌,则还必须取消临时令牌.

当临时令牌到期时,它不得取消主令牌.

.net c# cancellationtokensource cancellation-token

32
推荐指数
4
解决办法
8598
查看次数

如何转义要在OData查询中使用的单引号?

我正在使用OData来查询我的数据库.当"adapterName"只包含文本时,以下代码行正常工作.

ds.query('/DataAdapters?$filter=Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, '');
Run Code Online (Sandbox Code Playgroud)

如果"adapterName"包含单引号则失败.我尝试使用以下代码转义单引号:

adapterName = adapterName.replace(/\'/g, '\\\'');
Run Code Online (Sandbox Code Playgroud)

虽然这正确地逃避了用户定义的文本,但该功能仍然失败.谁能告诉我查询中文本的正确格式是什么?

c# odata

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

如何在网页中将UTC时间显示为本地时间?

我有一个数据库,其时间为UTC.这个时间可以在网页上显示,因此我被要求在页面中显示为本地时间,因为它可以从任何国家/地区查看.一位同事提到了从当前线程(在服务器上)获取国家/地区设置的一些内容,但我找不到任何有关此问题的详细信息.我想做什么?

asp.net datetime utc

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

从主机名创建IPEndPoint

我正在使用需要"IPEndPoint"的第三方DLL.由于用户可以输入IP地址或主机名,因此我需要先将主机名转换为IP地址,然后才能创建IPEndPoint.是否有任何功能在.net中执行此操作,或者我将不得不编写自己的DNS查找代码?

c# network-programming

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

如何使用timout取消TaskCompletionSource

我有一个函数,我使用await关键字异步调用:

public Task<StatePropertyEx> RequestStateForEntity(EntityKey entity, string propName)
{
    var tcs = new TaskCompletionSource<StateInfo>();
    try
    {
        var propInstance = BuildCacheKey(entity, propName);
        StateCacheItem cacheItem;
        if (_stateCache.TryGetValue(propInstance, out cacheItem))
        {
            tcs.SetResult( new StateInfo (cacheItem.State.Name, cacheItem.State.Value) );
            return tcs.Task;
        }

        //state not found in local cache so save the tcs for later and request the state
        var cacheKey = BuildCacheKey(entity, propName);
       _stateRequestItemList.TryAdd(cacheKey, new StateRequestItem(entity, propName, tcs));

        _evtClient.SubmitStateRequest(entity, propName);

        return tcs.Task;
    }
    catch (Exception ex)
    {
        tcs.SetException(ex);
        return tcs.Task;
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数查看它是否具有所需的信息,如果有,则返回它.如果它没有详细信息,它会发送一个最终应该作为事件发出的请求.此时,我的代码(未显示)找到存储的TaskCompletionSource项,设置结果并返回它.这一切都运行正常但我现在被要求考虑一种情况,当我通过"_evtClient.SubmitStateRequest(entity,propName);"行请求状态时,可能永远不会返回回复.我需要实现某种超时机制,以便我可以取消TCS任务,以便函数调用者可以正常失败.我一直在寻找SO和互联网,找不到任何看起来正确的东西.我现在不确定是否需要以不同的方式重构上述代码.任何人都可以建议或指向类似的情况?

调用上述函数的代码可以在单击中调用它,如下所示:

var stateProperty …
Run Code Online (Sandbox Code Playgroud)

c# async-await taskcompletionsource

10
推荐指数
1
解决办法
7283
查看次数

在WebApi中组合路由映射

我在WebApi Katana应用程序中使用路由.我有以下两个路由映射,工作正常.我的问题是,我可以使用可选参数将它们组合成单个路径映射吗?我看不到明显的方法来保持所需的功能.我是新手,可能错过了我帮助我实现这一目标的技巧.如果路线必须保持这种方式,那么这不是问题.

        config.Routes.MapHttpRoute(
            name: "UnRegister",
            routeTemplate: "api/services/{serviceName}/{location}",
            defaults: new {controller = "MyController", location = RouteParameter.Optional});

        config.Routes.MapHttpRoute(
            name: "UnRegister2",
            routeTemplate: "api/services/{serviceName}/{instanceId}",
            defaults: new { controller = "MyController" });
Run Code Online (Sandbox Code Playgroud)

所需的功能是通过提供以下详细信息来注销服务:

Servicename
Servicename and location
Servicename and instanceId
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api asp.net-web-api-routing owin katana

10
推荐指数
1
解决办法
9536
查看次数

OData过滤器和Guid字段的问题

我正在尝试使用OData获取一些代码.以下代码似乎不起作用.

ds是OpenDataServiceProxy.

adapterTypeId是Guid的字符串表示形式.

adapterName是一个字符串名称

ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, 'Error');
Run Code Online (Sandbox Code Playgroud)

上面的行给出以下错误:

预期在位置0处的类型'System.Boolean'的表达式.

如果我删除过滤器的Guid部分,以便它只使用"名称"部分,它可以正常工作.

DataAdapters表字段"DataAdapterTypeId"外键地键入"DataAdapterTypes"表DataAdapterTypeId字段.

谁能发现我做错了什么?

- - - - - - - - - -编辑 - - - - - - - - - - -

好的,我已经更改了过滤器,如下所示.我不再收到错误,但得到的结果很多,而不是一个匹配过滤器的记录.任何人都可以说为什么它不过滤?

ds.query('/DataAdapters?($filter=Name eq \'' + adapterName + '\' and $filter=DataAdapterTypeId eq guid\'' + adapterTypeId + '\')', ifmgr_CreateAdapter_Step1, onGenericFailure, '');
Run Code Online (Sandbox Code Playgroud)

c# odata

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

将列表拆分为C#中的多个列表

我有一个字符串列表,我发送到队列.我需要拆分列表,以便最终得到一个列表列表,其中每个列表包含最大(用户定义)字符串数.因此,例如,如果我有一个列表,其中包含以下A,B,C,D,E,F,G,H,I和列表的最大大小为4,我想最终得到一个列表列表第一个列表项包含:A,B,C,D,第二个列表有:E,F,G,H,最后一个列表项只包含:I.我查看了"TakeWhile"函数,但不确定是否这是最好的方法.对此有何解决方案?

list c#-4.0

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

在Linq语句中使用"匹配"

我有一个有两个记录的表(运行时会有很多).该deviceId的记录,"DEVICE1"和"DEVICE2".我想使用正则表达式来提取记录.

下面的代码编译但无法返回结果.当我将光标悬停在"devices.ToList()"语句上时,我收到以下错误:

base {System.SystemException} = {"LINQ to Entities does not recognize the method 'System.Text.RegularExpressions.MatchCollection Matches(System.String)' method, and this method cannot be translated into a store expression."}”

任何人都可以告诉我如何修改我的查询,以便这将返回基于表达式的记录?

filterText = @"DEVICE.";
Regex searchTerm = new Regex(filterText);

using (var ctx = new MyEntities())
{
 var devices = from d in ctx.Devices
                let matches = searchTerm.Matches(d.DeviceId)
                where matches.Count > 0
                select ((Device)d);
return devices.ToList();
}
Run Code Online (Sandbox Code Playgroud)

c# regex linq-to-entities

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