小编rom*_*the的帖子

PowerShell - 为整个脚本设置$ ErrorActionPreference

我今天第一次给PowerShell(v3.0)拍摄了一个镜头,并且对它的一些错误处理概念实现的奇怪方式感到非常沮丧.

我编写了以下代码(使用远程注册表PowerShell模块)

try
{
    New-RegKey -ComputerName $PCName -Key $Key -Name $Value
    Write-Host -fore Green ($Key + ": created")
}
catch
{
    Write-Host -fore Red "Unable to create RegKey: " $Key
    Write-Host -fore Red $_
}
Run Code Online (Sandbox Code Playgroud)

(这只是一个片段)

显然,PowerShell的默认行为是不捕获非终止的错误.所以我按照不同的人的建议在我的脚本顶部添加了以下行:

$ErrorActionPreference = "Stop"
Run Code Online (Sandbox Code Playgroud)

在PowerShell ISE中执行此操作确实捕获了所有错误.但是,从终端执行以下命令仍然无法捕获我的错误.

来自ISE:

PS C:\windows\system32> C:\Data\Scripts\PowerShell\Error.ps1
Errorhandling:  Stop
SOFTWARE\MySoftware does not exist. Attempting to create
Unable to create RegKey:  SOFTWARE\MySoftware
Key 'SOFTWARE\MySoftware' doesn't exist.
Run Code Online (Sandbox Code Playgroud)

从命令行:

PS C:\Data\Scripts\PowerShell> .\Error.ps1
Errorhandling:  Stop
SOFTWARE\MySoftware does not exist. Attempting to create
New-RegKey : Key …
Run Code Online (Sandbox Code Playgroud)

error-handling powershell powershell-ise powershell-3.0

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

Activator.CreateInstance:无法从程序集加载类型

我正在尝试在我的项目中创建一个在插件.dll中实现的类的实例来进行类型发现.我收到这个例外:

无法从程序集'SquidReports.DataCollector.Plugin.BES,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加载类型'Action'.

这是我正在使用的确切方法签名:https: //msdn.microsoft.com/en-us/library/d133hta4(v = vs.110).aspx

换句话说,我试图根据程序集名称和类名生成对象,如下所示:

object modelObject = Activator.CreateInstance((string)modelInfo.AssemblyName, (string)modelInfo.ModelName);
Run Code Online (Sandbox Code Playgroud)

这里要注意的一个重要部分是我使用程序集的"短"名称而不是"完整"名称(包括Version,Culture和PublicToken).但是,MSDN明确指出:

'assemblyName'可以是以下任何一种:程序集的简单名称,没有其路径或文件扩展名.

  • 例如,您可以为其路径和名称为.\ bin\TypeExtensions.dll的程序集指定TypeExtensions.

  • 已签名程序集的全名,包括其简单名称,版本,区域性和公钥令牌; 例如,"TypeExtensions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 181869f2f7435b51".

具体来说,我正在尝试创建一个在程序集'SquidReports.DataCollector.Plugin.BES'中定义的类'Action'的实例.我明确地将此程序集引用为完全相同*.cs文件顶部的using指令,我正在尝试创建该实例.

我从之前的问题/答案中尝试了以下建议:

清理你的解决方案,重建并再试一次这似乎适用于一些ASP.NET项目,但这是一个简单的旧控制台应用程序.

检查配置文件中引用的程序集同样,这是一个简单的控制台应用程序,仅在同一解决方案的不同项目中使用GAC和库

1.确保程序集位于正确的工作目录中:

我们到了...

它就在那里!

2.确保程序集是磁盘上的相同版本

对...

看起来一样

3.最后的建议是使用fuslogvw.exe.

我没有使用该工具的经验,但有一件事我确实发现奇怪.在运行调试会话时,我的程序集的长命名和短命名版本都出现了:

嗯...

我看了看两个日志.

这个命名短的版本确实会产生一些警告:

===预绑定状态信息===

LOG:DisplayName = SquidReports.DataCollector.Plugin.BES Partial)WRN:为程序集提供了部分绑定信息:

警告:程序集名称:SquidReports.DataCollector.Plugin.BES | 域ID:1

警告:仅提供部分程序集显示名称时发生部分绑定.

警告:这可能导致装订器装入错误的装配.

警告:建议为程序集提供完全指定的文本标识,

警告:它由简单的名称,版本,文化和公钥令牌组成.

警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270.

...但它以成功加载结束,它清楚地提到我的装配在正确的位置:

日志:尝试下载新的URL文件:/// C:/Source/C#/SquidReports/SquidReports.DataCollector/bin/x86/Debug/SquidReports.DataCollector.Plugin.BES.DLL.

长命名版本的日志不包含可疑消息.

还有什么想法吗?

编辑:这是Action类的最小定义.它纯粹是一个模型类.

public class Action : ICollectible
{
    public Action()
    {
        // Empty constructor …
Run Code Online (Sandbox Code Playgroud)

c# reflection assembly-loading .net-assembly

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

构建SignalR/Knockout仪表板,保证消息传递

我正在考虑使用实时消息替换我们公司的监控仪表板.

旧概念:

在我们公司,我们有一个仪表板,显示超过700台物理机的(相当详细的)状态,以及添加的元信息.它大约在1.5年前由我的一位同事在ASP.NET Web Forms(我不喜欢)中构建,以使调度员能够协调我们的技术人员应该去解决问题的位置(这些机器位于不同的地理位置) ).

不幸的是,该应用程序使用30秒的完整页面自动刷新,后面有一个大查询.它很慢,它完全重置你的视图(正如我所说,仪表板包含超过700多台机器).我个人想改变这个.使用起来非常烦人.我们的调度员已经学会了接受这一点,但我认为他们应该得到更好的待遇.

新概念:

我想在新的仪表板上显示相同的内容,但具有实时更新和"消息"日志.在我们公司,我们在MS堆栈上工作了大约90%,因此我计划使用ASP.NET MVC,SignalR,SQL Server和Knockout.

我现在有什么

看看这个简单的图表:

 +----+ +----+ +----+ +----+ +----+ +----+ +----+            
 | PC | | PC | | PC | | PC | | PC | | PC | | PC | ... ...    
 +--+-+ +--+-+ +-+--+ +--+-+ +--+-+ +--+-+ +--+-+            
    |      |     |       |      |      |      |              
    |   +--+  +--+  +----+    <-+    <-+    <-+              
    |   |     |     |                                        
+---v---v-----v-----v+         +-----------------------+     
|                    | TCP/IP  |                       |     
| Monitoring Backend +--------->  Data …
Run Code Online (Sandbox Code Playgroud)

c# asp.net real-time signalr knockout.js

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

使用ODP.NET进行的第一次查询总是很慢

注意:我考虑首先在DBA Exchange上发布这个,但考虑到这是一个.NET客户端问题,我认为最好先问这里.

我有两个存储在Oracle 11g开发服务器中的函数,这些函数使用ODP.NET调用(使用Oracle.ManagedDataAccess而不是Oracle.DataAccess).

这两个函数在SQL Developer中是闪电般快速的(有意义的是,它们只是简单的查询,只选择了大约20,000条记录),但是当使用ODP从我的C#应用​​程序中激发时,性能(使用System.Diagnostics.Stopwatch测量)并不是很好.净.

以下是结果:(忽略'转换时间和撰写时间,它们不是查询过程的一部分)

Connecting time - GET_TVM_ALL: 00:00:00.0553501
Query time - GET_TVM_ALL: 00:00:05.3467058
Conversion time: 00:00:07.6508273
Connecting time - GET_TVM_STATUS_ALL_FUNC: 00:00:00.0006773
Query time - GET_TVM_STATUS_ALL_FUNC: 00:00:00.0256008
Conversion time: 00:00:03.7280097
Composing time: 00:00:00.0157274
Total Elapsed: 00:00:16.7796351
Run Code Online (Sandbox Code Playgroud)

GET_TVM_ALL的执行时间为5秒,非常高.更令人惊讶的是,第二个查询要快得多.这很奇怪,因为毫无疑问,对于超过20倍的记录数量来说,这是一个更复杂的查询.

所以我换了它们,这就是结果:

Connecting time - GET_TVM_STATUS_ALL_FUNC: 00:00:00.0573807
Query time - GET_TVM_STATUS_ALL_FUNC: 00:00:05.2981962
Conversion time: 00:00:03.6474905
Connecting time - GET_TVM_ALL: 00:00:00.0007322
Query time - GET_TVM_ALL: 00:00:00.0070785
Conversion time: 00:00:07.2473809
Composing time: 00:00:00.0154049
Total Elapsed: 00:00:16.2268687
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,看起来第一个查询总是很慢,无论其内容如何.为了证明这一点,我做了一个愚蠢的虚拟函数:

CREATE OR REPLACE FUNCTION GET_DUMMY …
Run Code Online (Sandbox Code Playgroud)

c# sql oracle performance odp

8
推荐指数
1
解决办法
1502
查看次数

在C#和VBA之间进行通信

应我老板的要求,我创建了一小组脚本,用于定期监控某些设备和进程的状态.随后使用相对复杂的VBA模块处理此信息,该模块收集所有信息,应用公式,设置范围并生成图表等.

但是有两个问题:我是业余程序员,所以我的VBA例程效率很低.这对我来说不是一个大问题(我只是在跑步时起床喝咖啡),但对于其他用户来说,这可能很麻烦,因为不知道为什么这么长时间.我想要一个进度的图形表示.应用程序的配置是通过文本文件完成的.我想提供一个体面的GUI来设置配置.

为了实现这一点,我正在寻找一种让我的C#WinForms应用程序与我的VBA应用程序通信的方法.我知道如何从我的C#应用​​程序运行VBA例程,但我不知道如何让它们实时进行操作.

以下是我特别想要实现的两件事:

  • 我已经有一个在VBA例程结束时保存的日志文件.而不是我想要将日志/调试消息实时发送到我的C#应用​​程序(不仅仅是在应用程序的末尾),因此消息可以在我的GUI应用程序中显示,因为它们是由VBA应用程序生成的.
  • 我还希望VBA应用程序将有关实时进度的信息发送到我的GUI应用程序,这样我就可以在GUI应用程序中创建图形化进度条.

我已经考虑过通过标准输出进行通信.我知道如何使用C#/ .Net读取标准输出,但我不确定如何使用VBA写入StdOut流.

我相信很多人会指出我想要达到的目标是愚蠢和老式(或者完全没必要),但作为业余程序员,对我来说这似乎是一个非常具有挑战性和有趣的项目,可以教我一件事或两个.

.net c# vba interop office-interop

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

C# - 在本地安全地存储密码

我正在创建一个C#应用程序,它将在Kiosk风格的环境中锁定功能(键组合,窗口任务栏等).其中一个要求是,某些人仍然可以使用密钥组合和密码来突破应用程序.

应用程序本身已完成,但我还没有找到一种存储和检查密码的好方法.一切都应该存储在本地(没有检查网络数据库或其他).如何定义用于解锁我的应用程序的密码,同时使其灵活(无需重新编译应用程序即可更改密码).我怎样才能以安全的方式实现这一目标?

.net c# security passwords kiosk

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

为什么我的类型没有标记为相同?

关于这一点还有其他几个问题,但我觉得它们中没有一个确实提供了可靠的答案.

我最近搞乱反思很多,我想检查实现某个接口的几个程序集中包含的类型.

所以我有一个名为BESCollector的类,它实现了ICollector

public class BESCollector : ICollector
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

在这里,我加载程序集,遍历所有类型,并查看该类型是否包含ICollector类型的接口...

Assembly pluginAssembly = Assembly.ReflectionOnlyLoadFrom(pluginConfig.AssemblyLocation);
IEnumerable<Type> types = pluginAssembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(ICollector)));
Run Code Online (Sandbox Code Playgroud)

......没有结果:(.调试时我可以清楚地看到它包含这种类型.我打破了if循环

Assembly pluginAssembly = Assembly.ReflectionOnlyLoadFrom(pluginConfig.AssemblyLocation);
IEnumerable<Type> types = pluginAssembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(ICollector)));
foreach (Type type in pluginAssembly.GetTypes())
{
    Type[] interfaces = type.GetInterfaces();
    if (interfaces.Contains(typeof(ICollector)))
    {
        Console.WriteLine(@"\o/");
    }
}
Run Code Online (Sandbox Code Playgroud)

这些结果直接来自调试器.在这里你可以看到它interfaces包含一个Type,即ICollector:

-       interfaces  {System.Type[1]}    System.Type[]
  +     [0] {Name = "ICollector" FullName = "SquidReports.DataCollector.Interface.ICollector"}  System.Type {System.ReflectionOnlyType}
Run Code Online (Sandbox Code Playgroud)

我要求的类型.GetInterfaces()显然是BESCollector:

+       type    {Name = "BESCollector" FullName = "SquidReports.DataCollector.Plugin.BES.BESCollector"} System.Type {System.ReflectionOnlyType} …
Run Code Online (Sandbox Code Playgroud)

c# reflection types interface

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

RxJava:观察套接字发出的消息

我仍在尝试学习RxJava。有一件事我现在无法束手无策。每一篇试图学习我如何使用Rx的文章都向我展示了如何基于已经“可预测”的源(即一定数量的项目的序列(单个值或简单的Iterable))创建Observable。 。

通常,您会看到一些类似的内容 Observable.just()

Observable<String> observerable = Observable.just("Hello, world!");
Run Code Online (Sandbox Code Playgroud)

Observable.from()

Observable.from("apple", "orange", "banana").subscribe(fruit -> System.out.println(fruit));
Run Code Online (Sandbox Code Playgroud)

很好,但是下面的用例呢?

我有不断通过套接字推送的消息(我没有构建它,我只是在集成)。我需要“观察”通过套接字推送的数据序列。

很多人似乎都指向Obserable.using()这里是一个例子),但是我也不认为这是正确的解决方案。通过套接字推送的消息是不完整的,因为它们具有最大长度。我需要自己“构造”消息,因此需要在每次从套接字推送之间进行缓冲。

换句话说,我正在寻找一种方法来根据从套接字推入的数据自己构造消息,然后将其推入Observable。我一直在寻找在整个地方执行此操作的正确方法,但是我似乎找不到合适的解决方案。

java sockets reactive-programming rx-java

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

Python,BeautifulSoup - <div> text和<img>属性的顺序正确

我有一小段HTML,我想通过BeautifulSoup运行.我已经有了基本的导航功能,但这个让我很难过.

这是HTML的一个示例(完全构成):

<div class="textbox">
    Buying this item will cost you 
    <img align="adsbottom" alt="1" src="/1.jpg;type=symbol"/>
    silver credits and
    <img align="adsbottom" alt="1" src="/1.jpg;type=symbol"/>
    golden credits
</div>
Run Code Online (Sandbox Code Playgroud)

使用img标签的'alt'属性我希望看到以下结果: 购买此项目将花费您1银奖和1金奖

我不知道如何顺序循环遍历div-tag.我可以执行以下操作来提取div-tag中包含的所有文本

html = BeautifulSoup(string)
print html.get_text()
Run Code Online (Sandbox Code Playgroud)

获取div标签中包含的所有文本,但这会给我这样的结果: 购买此项目将花费您银奖和金币

同样,我可以通过这样做从img-tags获取alt属性的值:

html = BeautifulSoup(string).img
print html['alt']
Run Code Online (Sandbox Code Playgroud)

但当然这只给了我属性值.

如何以正确的顺序迭代所有这些元素?是否可以按连续顺序读取div元素中的文本和img-element的属性?

html python beautifulsoup

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

Observable TcpListener 在单次连接后终止

我是 Rx 的新手,所以我可能在这里犯了一些基本错误。

我想创建一个非常简单的套接字服务器,它可以使用 Observables 从客户端接收消息。为此,我使用 Rxx,它在 System.Net.Sockets 命名空间中提供扩展方法,还提供 ObserableTcpListener 静态工厂类。

这是我到目前为止所拥有的,几乎是从各种来源窃取的:

IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9001);
TcpListener listener = new TcpListener(endpoint);

IObservable<TcpClient> clients = listener
    .StartSocketObservable(1)
    .SelectMany<Socket, TcpClient>(socket => SocketToTcpClient(socket));
    .Finally(listener.Stop)

clients.Subscribe(client =>
{
    OnConnect(client).Subscribe(
        message => OnMessage(client, message),
        ex => OnException(client, ex),
        () => OnCompleted(client));
});

private static IObservable<TcpClient> SocketToTcpClient(Socket socket)
{
    TcpClient client = new TcpClient();
    client.Client = socket;
    return Observable.Return<TcpClient>(client);
}

private static IObservable<byte[]> OnConnect(TcpClient client)
{
    return client.Client.ReceiveUntilCompleted(SocketFlags.None);
}

private static void OnMessage(TcpClient client, …
Run Code Online (Sandbox Code Playgroud)

c# sockets system.reactive

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

RestAssured 不尊重 Quarkus 中的 ObjectMapper 配置

我对 Quarkus 应用程序中的配置进行了非常简单的调整ObjectMapper,如 Quarkus 指南所述:

@Singleton
public class ObjectMapperConfig implements ObjectMapperCustomizer {

    @Override
    public void customize(ObjectMapper objectMapper) {
        objectMapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
        objectMapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
        objectMapper.registerModule(new JavaTimeModule());
    }

}
Run Code Online (Sandbox Code Playgroud)

我这样做是为了用@JsonRootName注释包装/解开我的对象:

@RegisterForReflection
@JsonRootName("article")
public class CreateArticleRequest {

    private CreateArticleRequest(String title, String description, String body, List<String> tagList) {
        this.title = title;
        this.description = description;
        this.body = body;
        this.tagList = tagList;
    }

    private String title;
    private String description;
    private String body;
    private List<String> tagList;

    ... 

}
Run Code Online (Sandbox Code Playgroud)

当针对我的实际 API 时,这工作得很好curl,但是每当我在其中一个测试中使用 RestAssured 时,RestAssured 似乎不尊重我的 …

java rest-assured objectmapper quarkus

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

在NancyFx上下文中获取Windows用户

我的任务是创建一个Intranet Web应用程序.它最终将由位于NancyFx API之上的SPA前端(可能是Angular)组成.

坦率地说,我绝对没有使用Windows用户进行Auth的经验,因为一般不推荐(正确的),所以很难找到具体的信息.

我想根据发送每个请求的用户授权用户.但是,我不知道如何从Nancy的每个请求上下文中访问用户信息.我看过一下:

public class IndexModule : NancyModule
{
    public IndexModule()
    {
        Get["/"] = parameters =>
        {
            var User = this.Context.CurrentUser;
            return View["index"];
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,this.Context.CurrentUser似乎永远不会被填充null.

如何使用Windows用户填充每个请求上下文?

或者,我做错了吗?在南希处理Windows用户的推荐方法是什么?我已经研究了两天多了,而且我很担心告诉我的老板我不知道如何处理这个相当重要的问题.

c# authentication authorization nancy

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