我需要为我的应用程序打开特定端口.
我已尝试INetFwAuthorizedApplication为所有端口使用每个应用程序的规则.
fwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app)
Run Code Online (Sandbox Code Playgroud)
或者,为所有应用程序打开一个端口INetFwOpenPort.
firewallManager.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add(port)
Run Code Online (Sandbox Code Playgroud)
有没有办法以编程方式以编程方式为每个应用程序打开单个端口?我可以通过防火墙设置手动完成.
是否可以将 NetworkCredentials(或变体)转换为 PSCredential?
我想透明地使用当前用户的凭据,但不想提示他们。
本文的底部描述了如何使用GetOrAdd(如果我理解正确)可能导致损坏/意外结果.
喀嚓/
ConcurrentDictionary专为多线程场景而设计.您不必在代码中使用锁来添加或删除集合中的项.但是,一个线程始终可以检索一个值,而另一个线程可以通过为相同的键提供一个新值来立即更新该集合.
此外,尽管ConcurrentDictionary的所有方法都是线程安全的,但并非所有方法都是原子方法,特别是GetOrAdd和AddOrUpdate.传递给这些方法的用户委托是在字典的内部锁之外调用的.(这样做是为了防止未知代码阻塞所有线程.)因此,可能会发生以下事件序列:
1)threadA调用GetOrAdd,找不到任何项,并通过调用valueFactory委托创建一个新项添加到Add.
2)threadB同时调用GetOrAdd,调用其valueFactory委托,并在threadA之前到达内部锁,因此将其新的键值对添加到字典中.
3)threadA的用户委托完成,线程到达锁,但现在看到该项已经存在
4)threadA执行"Get",并返回先前由threadB添加的数据.
因此,无法保证GetOrAdd返回的数据与线程的valueFactory创建的数据相同.调用AddOrUpdate时,可能会发生类似的事件序列.
题
验证数据的正确方法是什么,并重试更新?一个很好的方法是根据旧值的内容尝试/重试此操作的扩展方法.
这将如何实施?我可以依赖result(verify)作为有效结束状态,还是必须使用不同的方法重试并重新检索值?
码
更新值时,以下代码具有竞争条件.期望的行为是AddOrUpdateWithoutRetrieving()将以不同的方式递增各种值(使用++或Interlocked.Increment()).
我还想在一个单元中执行多个字段操作,如果先前的更新由于竞争条件而没有"占用",则重试更新.
运行代码,您将看到控制台中出现的每个值开始增加1,但每个值都会漂移,有些值会前后几次迭代.
namespace DictionaryHowTo
{
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
// The type of the Value to store in the dictionary:
class FilterConcurrentDuplicate
{
// Create a new concurrent dictionary.
readonly ConcurrentDictionary<int, TestData> eventLogCache =
new ConcurrentDictionary<int, TestData>();
static void Main()
{
FilterConcurrentDuplicate c = new FilterConcurrentDuplicate();
c.DoRace(null);
}
readonly …Run Code Online (Sandbox Code Playgroud) c# concurrency multithreading thread-safety task-parallel-library
对于Active Directory在站点之间复制数据时间过长的情况,我需要确保本地AD副本包含最新信息.
我没有在Codeproject或StackOverflow上找到任何东西
是否可以生成RSA密钥对,将其导出为与DKIM的类似PEM格式兼容的ASN1 格式,仅使用C#?
我想减少对第三方的依赖,但这里有一些我发现的
充气城堡
密码学应用程序块
Win32 PFXImportCertStore
导入PEM
微软的CLR安全增强功能
微软CNG
以下是在Codeplex上使用.NET dll的Microsoft CNG提供程序的代码(上图)...但是我不知道如何以DKIM兼容的ASN1格式导出和导入公钥和私钥.
byte[] pkcs8PrivateKey = null;
byte[] signedData = null;
CngKey key = CngKey.Create(CngAlgorithm2.Rsa);
byte[] exportedPrivateBytes = key.Export(CngKeyBlobFormat.GenericPrivateBlob);
string exportedPrivateString= Encoding.UTF8.GetString(exportedPrivateBytes);
pkcs8PrivateKey = Encoding.UTF8.GetBytes(exportedPrivateString);
using (CngKey signingKey = CngKey.Import(pkcs8PrivateKey, CngKeyBlobFormat.Pkcs8PrivateBlob))
{
using (RSACng rsa = new RSACng(signingKey))
{
rsa.SignatureHashAlgorithm = CngAlgorithm.Sha1;
signedData = rsa.SignData(dataToSign);
}
}
Run Code Online (Sandbox Code Playgroud)
题
是否有任何使用Microsoft库(Codeplex上的Win32,PFX或CLR)的直接示例,说明如何创建密钥对并以PEM格式导出/导入这些值?
我有一个时间敏感的操作,需要知道其他计算机之间的时钟偏差,和/或防止这样的事情.如何检测或防止时钟偏差?
在我的情况下,我正在为Azure Blob写一个压缩的日期时间戳.如果不同的节点会以不同的方式对该日期时间戳进行解释(因为它可能发生在闰日或闰秒期间),那将是一场灾难.
更多信息
我正在尝试检测本地节点当前时间的时钟偏差.
每个节点都将时间敏感信息写入Blob/Table.如果时间戳早于X,则会发生某些操作.如果时间不同步,数据可能会丢失或损坏.
可能解决方案
也许我可以让每个节点定期将其当前日期写入blob存储(32字节),然后在例行的基础上查询.
如何合并List<T>基于TPL的任务以便以后执行?
public async IEnumerable<Task<string>> CreateTasks(){ /* stuff*/ }
Run Code Online (Sandbox Code Playgroud)
我的假设是.Concat()......
void MainTestApp() // Full sample available upon request.
{
List<string> nothingList = new List<string>();
nothingList.Add("whatever");
cts = new CancellationTokenSource();
delayedExecution =
from str in nothingList
select AccessTheWebAsync("", cts.Token);
delayedExecution2 =
from str in nothingList
select AccessTheWebAsync("1", cts.Token);
delayedExecution = delayedExecution.Concat(delayedExecution2);
}
/// SNIP
async Task AccessTheWebAsync(string nothing, CancellationToken ct)
{
// return a Task
}
Run Code Online (Sandbox Code Playgroud)
我想确保这不会产生任何任务或评估任何东西.事实上,我想我在问"逻辑上执行IQueryable到返回数据的东西"?
背景
由于我正在进行递归,并且我不想在正确的时间之前执行此操作,如果多次调用,合并结果的正确方法是什么?
如果重要,我正在考虑运行此命令来启动var AllRunningDataTasks = results.ToList();此代码后面的所有任务:
while (AllRunningDataTasks.Count > …Run Code Online (Sandbox Code Playgroud) 我需要确保我的IOS应用程序在连接到给定服务器时需要DNSSec。如何确保DNS调用始终使用此功能?
我的控制器使用了这样的声明(不确定订单是否重要)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
Run Code Online (Sandbox Code Playgroud)
我试图访问HTTPContext并注意到我甚至无法获得HTTPContext.Current
看起来有两个HTTPContext变量,而MVC就是先例.我必须完全限定对象的命名空间才能使应用程序编译.
编译但不应该
[Flags]
enum TransactionData : long // 64 bits. Last bit is sign bit, but I'm putting data there
{
None = 0,
Color1 = 1 << 63,
}
Run Code Online (Sandbox Code Playgroud)
错误但不应该
[Flags]
enum TransactionData : ulong // 64 bits. No sign bit. Not allowed to put data there
{
None = 0,
Color1 = 1 << 63,
}
Run Code Online (Sandbox Code Playgroud)
编译器错误文本:
-2147483648无法转换为ulong
题:
我希望会发生相反的情况.谁能解释为什么会这样?
我也可以如何打印这个flags属性byte[]进行检查?
var eee = TransactionData.None | TransactionData.Color1
// How do I convert eee to byte[]?
Run Code Online (Sandbox Code Playgroud) c# compiler-construction enums enum-flags visual-studio-2013
c# ×7
security ×2
api ×1
asp.net-mvc ×1
azure ×1
certificate ×1
concurrency ×1
enum-flags ×1
enums ×1
firewall ×1
httpcontext ×1
ienumerable ×1
ios ×1
iphone ×1
ldap ×1
linq ×1
networking ×1
p2p ×1
pem ×1
port ×1
powershell ×1
rsa ×1