有时,在不可重现的情况下,我的WPF应用程序崩溃而没有任何消息.应用程序立即关闭.
实现全局Try/Catch块的最佳位置在哪里.至少我必须实现一个消息框:"抱歉给您带来不便......"
我正在研究使用ZeroMQ作为相当大的分布式系统的消息传递/传输层,主要针对监控和数据收集(许多生产者,少数消费者).
据我所知,目前有两种不同的同一概念实现; ZeroMQ和Crossroads I/O,后者是ZeroMQ的分支(2012年?).
我试图找出使用哪一个并想知道它们之间的差异,但到目前为止还没有找到关于此的更多信息.
例如:
基本上,如何选择一个而不是另一个?
我有一堆接近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) 似乎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
在使用.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) 我有一组日期范围,包括部分和完全重叠的日期,如下所示:
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)
如果需要游标很好,但如果没有它就可以做得更好.
由于似乎无法查询/检查底层的ZeroMQ队列/缓冲区套接字以查看它们的利用率,因此有一些方法可以检测在发送/排队时由于Publisher套接字中的完整缓冲区而丢弃邮件的时间?
例如,如果发布者队列已满,则zmq_send操作将简单地删除该消息.
基本上,我想要实现的是一种检测队列变得紧张和/或完全能够(稍后)调整解决方案以更好地工作的情况的方法.另一种方法是为每条消息添加一个序列号,并在订阅者中进行简单的计算,但我永远无法确定由于发布者中的完整缓冲区而导致消息丢失.
我想使用ZeroMQ(java绑定,jzmq)将客户端连接到服务器,但我需要严重的TCP信息,例如客户端请求的TCP/IP地址!问题是,为了能够在网络中宣布服务,我需要获取请求的TCP地址,以便能够将客户端重定向到该服务.在这种情况下,经纪人是一个中央"服务注册机构".但是,双方都有ZeroMQ服务,我没有看到检索该信息的选项.
我现在所做的是使用标准套接字建立到代理的虚拟连接,在建立连接后,我获取用于此连接的IP地址并再次关闭连接.已检索到的IP地址现在用于在随机端口上使用ZeroMQ套接字绑定它.
我认为这个解决方案是有史以来最丑陋的解决方案,因此:对这个问题有什么更好的解决方案?
问候.
我需要经常创建XML文件,我选择XmlWrite来完成这项工作,我发现它花了很多时间在像WriteAttributeString这样的东西上(在某些情况下我需要写很多属性),我的问题是有没有更好的方法来创建xml文件?提前致谢.
我有一个用C编写的简单服务器.它的主要目的是通过专有协议与一些业务合作伙伴进行通信.出于这个原因和其他一些原因,它必须用C语言编写.我有许多其他的过程,但是,用其他语言(例如Python)编写,必须与服务器通信(本地,在同一个Linux服务器上).
在这种情况下,跨语言IPC的最佳选择是什么?具体来说,我认为我掌握了传输技术:Unix域套接字,命名管道,共享内存,ZeroMQ(Crossroads).我对实现协议的最佳方式更感兴趣,以保持C代码的小型和可维护性,同时仍然允许来自其他语言的通信.
编辑:似乎有些混乱.我对讨论域套接字,共享内存等的优缺点不感兴趣.人.我很感兴趣的msgpack(感谢开卷),以及其他技术实现有线协议/办法.
c# ×5
zeromq ×4
.net ×2
architecture ×1
async-await ×1
c ×1
dotcover ×1
exception ×1
ipc ×1
jzmq ×1
linux ×1
networking ×1
sockets ×1
sql ×1
sql-server ×1
t-sql ×1
unit-testing ×1
wpf ×1
xml ×1
xmlwriter ×1