我目前正在将使用 ASP.NET WebApi 为 .NET Fx 4.8 编写的项目迁移到 .NET 5.0。该项目大量使用WindowsAzure.Storage包来访问 Azure 存储帐户上的 BLOB、表和队列。该软件包已被弃用一段时间,说明它已被分成几个软件包。
对于队列和 Blob,我应该迁移到什么是非常清楚的。但关于 Azure Tables 似乎存在很多困惑。
无论如何:我发现Azure.Data.Tables的 API与WindowsAzure.Storage非常相似,我只需要在这里或那里做一些调整。
但我现在完全缺少的是QueryComparisons和TableQuery类。他们就这样走了吗?有替代品吗?
要迁移的代码示例如下:
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) 我有一个定义为的方法
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)
编辑
我已经尝试删除除了 …
我正在尝试使用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) 我正在用 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# 编写的 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# ×4
powershell ×2
.net-core ×1
async-await ×1
asynchronous ×1
azure ×1
cmdlet ×1
curl ×1
nuget ×1
php ×1
soap ×1
spnego ×1
web-services ×1