小编Hem*_*era的帖子

从“WindowsAzure.Storage”迁移时,我应该为 Azure 表使用什么包

我目前正在将使用 ASP.NET WebApi 为 .NET Fx 4.8 编写的项目迁移到 .NET 5.0。该项目大量使用WindowsAzure.Storage包来访问 Azure 存储帐户上的 BLOB、表和队列。该软件包已被弃用一段时间,说明它已被分成几个软件包。

对于队列和 Blob,我应该迁移到什么是非常清楚的。但关于 Azure Tables 似乎存在很多困惑。

无论如何:我发现Azure.Data.Tables的 API与WindowsAzure.Storage非常相似,我只需要在这里或那里做一些调整。

但我现在完全缺少的是QueryComparisonsTableQuery类。他们就这样走了吗?有替代品吗?

要迁移的代码示例如下:

var part1 = 
  TableQuery.GenerateFilterConditionForGuid(
    nameof(SomeEntity.Id),
    QueryComparisons.Equal,
    idValue));
var part2 = 
  TableQuery.GenerateFilterConditionForGuid(
    nameof(SomeEntity.Category)
    QueryComparisons.Equal,
    category));
return TableQuery.CombineFilters(part1, TableOperators.And, part2);
Run Code Online (Sandbox Code Playgroud)

c# azure nuget .net-core

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

使用await Task.Run()的Asyc方法永远不会"完成"

我有一个定义为的方法

public async Task SomeAsyncMethod()
{
   DoSomeStuff();
   await Task.Run(() => {
     DoSomeSyncStuff();
     DoSomeOtherSyncStuff();
   });
   var someDebugVariable = "someDebugValue";
}
Run Code Online (Sandbox Code Playgroud)

该方法本身正是它应该做的事情,一切运行正常.然而......看起来"外部"异步Task从未完成.

示例:当我这样称呼它时

public void CallerMethod()
{
   Task t = SomeAsyncMethod();
   t.Wait();
}
Run Code Online (Sandbox Code Playgroud)

t.Wait()永远不会完成.此外:如果我在分配时放置一个断点,someDebugVariable它永远不会被击中.

我可能会添加它DoSomeSyncStuff并且DoSomeOtherSyncStuff真正做他们应该做的事情并通过它们调试告诉我他们都完成了.

为了证明我的观点,我修改了这样的方法,结果仍然是一样的.

public async Task SomeAsyncMethod()
{
   DoSomeStuff();
   await Task.Run(() => {
     /*
     DoSomeSyncStuff();
     DoSomeOtherSyncStuff();
     */
     var a = 2; var b = 3; var c = a + b;
   });
   var someDebugVariable = "someDebugValue";
}
Run Code Online (Sandbox Code Playgroud)

编辑

我已经尝试删除除了 …

c# asynchronous task-parallel-library async-await

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

使用SPNEGO针对服务的PHP SOAP请求

我正在尝试使用PHP访问SOAP WebService。该服务是Windows服务,可在客户现场安装和配置。我要连接的服务器可配置为接受两种不同的身份验证模式。NTLM或SPNEGO。

使用以下SoapClient扩展类,将服务器配置为使用NTLM时,我能够成功连接到服务器,而不会出现问题:

class NTLMSoapClient extends SoapClient {
  function __doRequest($request, $location, $action, $version, $one_way = NULL) {
    $headers = array(
      'Method: POST',
      'Connection: Keep-Alive',
      'User-Agent: PHP-SOAP-CURL',
      'Content-Type: text/xml; charset=utf-8',
      'SOAPAction: "'.$action.'"',
    );
    $this->__last_request_headers = $headers;
    $ch = curl_init($location);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, true );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
    curl_setopt($ch, CURLOPT_USERPWD, "<user>:<password>");
    $response = curl_exec($ch);
    return $response;
  }
  function __getLastRequestHeaders() {
    return implode("\n", $this->__last_request_headers)."\n";
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将服务器配置为使用由NTLM插入的SPNEGO,则显然无法立即使用。我试图更改以下内容:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
Run Code Online (Sandbox Code Playgroud)

经过搜索和试验后,我发现有人建议仅提供用户名而不提供密码:

curl_setopt($ch, …
Run Code Online (Sandbox Code Playgroud)

php curl soap web-services spnego

5
推荐指数
0
解决办法
702
查看次数

如何在 Cmdlet 中获取当前工作目录

我正在用 C# 为 PowerShell 编写一个 Cmdlet。我正在继承 aCmdlet而不是 a PSCmdlet

有没有办法从 PowerShell 获取当前目录?我可以PSCmdlet使用 using这样做GetVariableValue("pwd")。但是在 Cmd 类中我没有那个可用。

Environment.CurrentDiretory 将我指向 powershell 启动的路径,而不是 PowerShell 本身当前所在的位置。

编辑

例子:

我通过 - say - 启动powershell powershell_ise.exe。它在C:\Windows\System32\WindowsPowerShell\v1.0. 然后我使用更改路径cd c:\my\folder并运行我的命令Do-Something。在“Do-Something”(C# 端)的实现中,我希望能够检索当前路径 => c:\my\folder

如果可能,我想避免使用PSCmdlet.

c# powershell cmdlet

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

从 cmdlet 内调用 PSCmdlet

我有一个完全用 C# 编写的 PS 模块。它包含大约 20 个已投入生产的 Cmdlet。其中一些“共享代码”。举个例子:

我有一个名为的 Cmdlet InvokeCommitCommand,可以生成“变更集”。此 Cmdlet 还发布此变更集的元数据。我现在想创建一个名为 的新 Cmdlet PublishCommitCommand,可以独立调用它来执行现有变更集的“发布”。因此,我想重构InvokeCommitCommand以利用新的 CmdletPublishCommitCommand并避免代码重复。

更一般地说...我试图CommandB从 cmdlet调用 cmdlet CommandA。它们的定义如下

public CommandA : PSCmdlet
{
  ...
}

public CommandB : PSCmdlet
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

我这里有几个选择。但它们都不起作用。

1. 选项

CommandB通过创建它的实例来调用。这是我的第一个猜测。就像这样:

var cmd = new CommandB();
cmd.Invoke();
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用。我得到例外:

无法直接调用从 PSCmdlet 派生的 Cmdlet ...

所以...下一个选择。

2. 选项

创建 PowerShell 实例并运行命令。就像这样:

var ps = PowerShell.Create();
ps.AddCommand("CommandB");
ps.Invoke();
Run Code Online (Sandbox Code Playgroud)

不幸的是这也不起作用。这会导致创建一个新的 PowerShell 实例,因此我会丢失可能已附加到当前正在运行的 PowerShell 实例的所有流重定向。

我知道我可以重用运行空间。但使用相同的运行空间并不能避免 …

c# powershell

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