小编Jak*_*lås的帖子

WPF全局异常处理程序

有时,在不可重现的情况下,我的WPF应用程序崩溃而没有任何消息.应用程序立即关闭.

实现全局Try/Catch块的最佳位置在哪里.至少我必须实现一个消息框:"抱歉给您带来不便......"

.net c# wpf exception-handling exception

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

ZeroMQ vs Crossroads I/O.

我正在研究使用ZeroMQ作为相当大的分布式系统的消息传递/传输层,主要针对监控和数据收集(许多生产者,少数消费者).

据我所知,目前有两种不同的同一概念实现; ZeroMQ和Crossroads I/O,后者是ZeroMQ的分支(2012年?).

我试图找出使用哪一个并想知道它们之间的差异,但到目前为止还没有找到关于此的更多信息.

例如:

  • 它们是否与电线兼容?
  • 它们是API兼容的,即某种通用基础API,可能具有不同的附加组件?
  • 他们都实现了对ZMTP(ZeroMQ消息传输协议)的支持吗?
  • 他们是否对未来发展有某种共同的理解,还是会在两个不同的方向上继续发展?
  • 与另一方有关的利弊是什么?

基本上,如何选择一个而不是另一个?

zeromq crossroads-io

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

如何从代码覆盖中测试或排除私有无法访问的代码

我有一堆接近100%测试覆盖率的程序集,但我经常遇到如下例所示的情况.我无法测试默认的开关案例,这是为了防范未来的错误,我在枚举中添加了更多的项目,但忘记更新switch语句以支持新项目.

我希望能够找到一种模式,我可以消除"不可测试的"代码,测试它或标记要覆盖分析排除的代码行(但不是整个方法).

这可能听起来很愚蠢,但我不想假设默认情况永远不会发生,我不想将默认情况与已经存在的情况捆绑在一起.我希望在创建此类错误时抛出异常.迟早会发生这种情况.

我目前使用DotCover来计算覆盖率.

注意:只是示例代码,但我认为它说明了一种相当常见的模式.

public class Tester
{
    private enum StuffToDo
    {
        Swim = 0, 
        Bike,
        Run
    }

    public void DoSomeRandomStuff()
    {
        var random = new Random();
        DoStuff((StuffToDo)random.Next(3));
    }

    private void DoStuff(StuffToDo stuff)
    {
        switch (stuff)
        {
            case StuffToDo.Swim:
                break;
            case StuffToDo.Bike:
                break;
            case StuffToDo.Run:
                break;
            default:
                // How do I test or exclude this line from coverage?
                throw new ArgumentOutOfRangeException("stuff");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# architecture unit-testing code-coverage dotcover

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

GetResponseAsync不接受cancellationToken

似乎GetResponseAsync在Async/Await中不接受cancellationToken.所以问题是我如何取消以下程序,只要我需要从响应中收集Cookie:

 using (HttpWebResponse response = (HttpWebResponse) await request.GetResponseAsync())
 {
    cookies.Add(response.Cookies);
 }
Run Code Online (Sandbox Code Playgroud)

实现上述目标的替代代码也是受欢迎的.

c# httpwebrequest httpwebresponse async-await cancellation-token

14
推荐指数
2
解决办法
8339
查看次数

HttpWebRequest如何处理(过早)关闭底层TCP连接?

在使用.NET的HttpWebRequest类调用远程服务器(特别是REST Web服务)时,我很难搞清楚是否有办法处理潜在的连接问题.从我的调查来看,WebClient类的行为是相同的,这是有点预期的,因为它似乎只提供了一个更简单的HttpWebRequest接口.

出于模拟目的,我编写了一个非常简单的HTTP服务器,它不符合HTTP 1.1 RFC.它的作用是接受客户端连接,然后发送适当的HTTP 1.1头和"Hello World!".有效负载返回客户端并关闭套接字,服务器端接受客户端连接的线程如下所示:

    private const string m_defaultResponse = "<html><body><h1>Hello World!</h1></body></html>";
    private void Listen()
    {
        while (true)
        {
            using (TcpClient clientConnection = m_listener.AcceptTcpClient())
            {
                NetworkStream stream = clientConnection.GetStream();
                StringBuilder httpData = new StringBuilder("HTTP/1.1 200 OK\r\nServer: ivy\r\nContent-Type: text/html\r\n");
                httpData.AppendFormat("Content-Length: {0}\r\n\r\n", m_defaultResponse.Length);
                httpData.AppendFormat(m_defaultResponse);

                Thread.Sleep(3000); // Sleep to simulate latency

                stream.Write(Encoding.ASCII.GetBytes(httpData.ToString()), 0, httpData.Length);

                stream.Close();

                clientConnection.Close();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

由于HTTP 1.1 RFC声明HTTP 1.1默认保持连接活动,并且服务器必须发送"Connection:Close"响应头,如果它想要关闭连接,这是客户端的意外行为.客户端以下列方式使用HttpWebRequest:

    private static void SendRequest(object _state)
    {
        WebResponse resp = null;

        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.0.32:7070/asdasd");
            request.Timeout = …
Run Code Online (Sandbox Code Playgroud)

c# networking httpwebrequest

11
推荐指数
2
解决办法
8485
查看次数

消除并减少重叠日期范围

我有一组日期范围,包括部分和完全重叠的日期,如下所示:

UserID  StartDate   EndDate 
======  ==========  ==========
1       2011-01-01  2011-01-02  <- A
1       2011-01-01  2011-01-10  <- A
1       2011-01-08  2011-02-15  <- A
1       2011-02-20  2011-03-10  <- B
2       2011-01-01  2011-01-20  <- C
2       2011-01-15  2011-01-25  <- C
Run Code Online (Sandbox Code Playgroud)

使用T-SQL,我想为每个用户创建一组新的数据,消除重叠数据,扩展范围并在需要时删除冗余数据,结果如下所示:

UserID  StartDate   EndDate 
======  ==========  ==========
1       2011-01-01  2011-02-15 ('A', three rows combined, extending the range)
1       2011-02-20  2011-03-10 ('B', no change, no overlaps here)
2       2011-01-01  2011-01-25 ('C', two rows combined)
Run Code Online (Sandbox Code Playgroud)

如果需要游标很好,但如果没有它就可以做得更好.

sql t-sql sql-server stored-procedures sql-server-2005

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

检测ZeroMQ队列中丢弃的消息

由于似乎无法查询/检查底层的ZeroMQ队列/缓冲区套接字以查看它们的利用率,因此有一些方法可以检测在发送/排队时由于Publisher套接字中的完整缓冲区而丢弃邮件的时间?

例如,如果发布者队列已满,则zmq_send操作将简单地删除该消息.

基本上,我想要实现的是一种检测队列变得紧张和/或完全能够(稍后)调整解决方案以更好地工作的情况的方法.另一种方法是为每条消息添加一个序列号,并在订阅者中进行简单的计算,但我永远无法确定由于发布者中的完整缓冲区而导致消息丢失.

zeromq

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

在ZeroMQ中获取TCP地址信息

我想使用ZeroMQ(java绑定,jzmq)将客户端连接到服务器,但我需要严重的TCP信息,例如客户端请求的TCP/IP地址!问题是,为了能够在网络中宣布服务,我需要获取请求的TCP地址,以便能够将客户端重定向到该服务.在这种情况下,经纪人是一个中央"服务注册机构".但是,双方都有ZeroMQ服务,我没有看到检索该信息的选项.

我现在所做的是使用标准套接字建立到代理的虚拟连接,在建立连接后,我获取用于此连接的IP地址并再次关闭连接.已检索到的IP地址现在用于在随机端口上使用ZeroMQ套接字绑定它.

我认为这个解决方案是有史以来最丑陋的解决方案,因此:对这个问题有什么更好的解决方案?

问候.

sockets service-discovery zeromq jzmq

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

什么是编写XML的最快方法

我需要经常创建XML文件,我选择XmlWrite来完成这项工作,我发现它花了很多时间在像WriteAttributeString这样的东西上(在某些情况下我需要写很多属性),我的问题是有没有更好的方法来创建xml文件?提前致谢.

.net c# xml xmlwriter

8
推荐指数
2
解决办法
7259
查看次数

简单的线协议,什么人做?

我有一个用C编写的简单服务器.它的主要目的是通过专有协议与一些业务合作伙伴进行通信.出于这个原因和其他一些原因,它必须用C语言编写.我有许多其他的过程,但是,用其他语言(例如Python)编写,必须与服务器通信(本地,在同一个Linux服务器上).

在这种情况下,跨语言IPC的最佳选择是什么?具体来说,我认为我掌握了传输技术:Unix域套接字,命名管道,共享内存,ZeroMQ(Crossroads).我对实现协议的最佳方式更感兴趣,以保持C代码的小型和可维护性,同时仍然允许来自其他语言的通信.

编辑:似乎有些混乱.我对讨论域套接字,共享内存等的优缺点感兴趣.人.我感兴趣的msgpack(感谢开卷),以及其他技术实现有线协议/办法.

c linux ipc zeromq

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