小编goo*_*ate的帖子

创建防火墙规则以c#编程方式打开每个应用程序的端口

我需要为我的应用程序打开特定端口.

我已尝试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)

有没有办法以编程方式以编程方式为每个应用程序打开单个端口?我可以通过防火墙设置手动完成.

c# api port firewall windows-firewall

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

将 NetworkCredentials 转换为 PSCredentials?

是否可以将 NetworkCredentials(或变体)转换为 PSCredential?

我想透明地使用当前用户的凭据,但不想提示他们。

c# security authentication powershell networkcredentials

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

使用"ConcurrentDictionary.GetOrAdd()"时,避免陈旧(逻辑损坏)数据,包括Repro代码

本文的底部描述了如何使用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

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

在当前AD站点中获取最近的域控制器,无需硬编码信息

对于Active Directory在站点之间复制数据时间过长的情况,我需要确保本地AD副本包含最新信息.

  • 如何获取当前站点的DomainControllers列表?

我没有在CodeprojectStackOverflow上找到任何东西

c# directoryservices ldap active-directory domaincontroller

5
推荐指数
2
解决办法
8547
查看次数

使用CngKey在PEM(DKIM兼容)中使用C#生成RSA密钥对....类似于"openssl rsa"

是否可以生成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格式导出/导入这些值?

c# rsa certificate pem

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

如何检测Azure角色中节点之间的时钟偏差?

我有一个时间敏感的操作,需要知道其他计算机之间的时钟偏差,和/或防止这样的事情.如何检测或防止时钟偏差?

在我的情况下,我正在为Azure Blob写一个压缩的日期时间戳.如果不同的节点会以不同的方式对该日期时间戳进行解释(因为它可能发生在闰日或闰秒期间),那将是一场灾难.


更多信息

我正在尝试检测本地节点当前时间的时钟偏差.

每个节点都将时间敏感信息写入Blob/Table.如果时间戳早于X,则会发生某些操作.如果时间不同步,数据可能会丢失或损坏.

可能解决方案

也许我可以让每个节点定期将其当前日期写入blob存储(32字节),然后在例行的基础上查询.

p2p azure azure-storage azure-worker-roles azure-web-roles

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

如何在不运行它们的情况下合并两个Linq IEnumerable <T>查询?

如何合并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)

linq ienumerable task-parallel-library

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

如何制作IOS应用程序*需要* DNSSec?

我需要确保我的IOS应用程序在连接到给定服务器时需要DNSSec。如何确保DNS调用始终使用此功能?

security iphone networking ios

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

System.Web.HttpContext vs System.Web.MVC.HttpContext

我的控制器使用了这样的声明(不确定订单是否重要)

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就是先例.我必须完全限定对象的命名空间才能使应用程序编译.

  • 为什么有两个HTTPContext变量?
  • 使用顺序是否会影响我的冲突对象将使用哪个对象进行编译?

c# asp.net-mvc httpcontext

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

[Flags] enum之间的意外行为:long vs [Flags] enum:ulong

编译但不应该

[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

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