小编Paw*_*sen的帖子

发送UDP广播,接收多条消息

我有2个程序,1个用于发送UDP广播消息,1个用于监听此广播.我的问题是,有时当我发送广播时,接收器会收到2条消息.为什么?

接收者代码:

public class Receiver {
  private readonly UdpClient udp = new UdpClient(15000);
  private void StartListening()
  {
    this.udp.BeginReceive(Receive, new object());
  }
  private void Receive(IAsyncResult ar)
  {
    IPEndPoint ip = new IPEndPoint(IPAddress.Any, 15000);
    byte[] bytes = udp.EndReceive(ar, ref ip);
    string message = Encoding.ASCII.GetString(bytes);
    StartListening();
  }
}
Run Code Online (Sandbox Code Playgroud)

发件人代码:

public class Sender {
  public void Send() {
    UdpClient client = new UdpClient();
    IPEndPoint ip = new IPEndPoint(IPAddress.Broadcast, 15000);
    byte[] bytes = Encoding.ASCII.GetBytes("Foo");
    client.Send(bytes, bytes.Length, ip);
    client.Close();
  }
}
Run Code Online (Sandbox Code Playgroud)

c# udp broadcasting

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

nunit在64位调试,应用程序在32位

我是那些热爱VS编辑和继续的人之一.因此我开发了32位应用程序.但是当我在调试模式下运行单元测试并尝试编辑一行时,我得到了通常的"不允许对64位应用程序进行更改".信息.我的所有组件都标记为x86,nunit安装为32位应用程序.我的系统是64位的.
如何强制nunit作为32位应用程序运行?

debugging nunit

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

启动服务时RabbitMQ虚拟主机报错

我已经运行了几个月的 RabbitMQ 服务器。今天早上我无法连接到它,我的应用程序超时并且管理客户端没有响应。重新启动了机器。应用程序仍然超时。我可以登录到管理客户端,但看到以下消息:

虚拟主机/在节点 rabbit@MQT01 上遇到错误并且可能无法访问

我所有的队列都在那里,但看不到任何交流。

我希望有人能帮我弄清楚发生了什么。我查看了日志,但找不到任何好的提示。

这是日志的一部分:

2018-09-11 09:39:42 =ERROR REPORT====
** Generic server <0.281.0> terminating
** Last message in was {'$gen_cast',{submit_async,#Fun<rabbit_queue_index.36.122888644>}}
** When Server state == undefined
** Reason for termination == 
** {function_clause,[{rabbit_queue_index,journal_minus_segment1,[{{true,<<172,190,166,92,192,205,125,125,36,223,114,188,53,139,128,108,0,0,0,0,0,0,0,0,0,0,26,151>>,<<>>},no_del,no_ack},{{true,<<89,173,78,227,188,37,119,171,231,189,220,236,244,79,138,177,0,0,0,0,0,0,0,0,0,0,23,40>>,<<>>},no_del,no_ack}],[{file,"src/rabbit_queue_index.erl"},{line,1231}]},{rabbit_queue_index,'-journal_minus_segment/3-fun-0-',4,[{file,"src/rabbit_queue_index.erl"},{line,1208}]},{array,sparse_foldl_3,7,[{file,"array.erl"},{line,1684}]},{array,sparse_foldl_2,9,[{file,"array.erl"},{line,1678}]},{rabbit_queue_index,'-recover_journal/1-fun-0-',1,[{file,"src/rabbit_queue_index.erl"},{line,915}]},{lists,map,2,[{file,"lists.erl"},{line,1239}]},{rabbit_queue_index,segment_map,2,[{file,"src/rabbit_queue_index.erl"},{line,1039}]},{rabbit_queue_index,recover_journal,1,[{file,"src/rabbit_queue_index.erl"},{line,906}]}]}
2018-09-11 09:39:42 =CRASH REPORT====
  crasher:
    initial call: worker_pool_worker:init/1
    pid: <0.281.0>
    registered_name: []
    exception exit: {{function_clause,[{rabbit_queue_index,journal_minus_segment1,[{{true,<<172,190,166,92,192,205,125,125,36,223,114,188,53,139,128,108,0,0,0,0,0,0,0,0,0,0,26,151>>,<<>>},no_del,no_ack},{{true,<<89,173,78,227,188,37,119,171,231,189,220,236,244,79,138,177,0,0,0,0,0,0,0,0,0,0,23,40>>,<<>>},no_del,no_ack}],[{file,"src/rabbit_queue_index.erl"},{line,1231}]},{rabbit_queue_index,'-journal_minus_segment/3-fun-0-',4,[{file,"src/rabbit_queue_index.erl"},{line,1208}]},{array,sparse_foldl_3,7,[{file,"array.erl"},{line,1684}]},{array,sparse_foldl_2,9,[{file,"array.erl"},{line,1678}]},{rabbit_queue_index,'-recover_journal/1-fun-0-',1,[{file,"src/rabbit_queue_index.erl"},{line,915}]},{lists,map,2,[{file,"lists.erl"},{line,1239}]},{rabbit_queue_index,segment_map,2,[{file,"src/rabbit_queue_index.erl"},{line,1039}]},{rabbit_queue_index,recover_journal,1,[{file,"src/rabbit_queue_index.erl"},{line,906}]}]},[{gen_server2,terminate,3,[{file,"src/gen_server2.erl"},{line,1161}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]}
    ancestors: [worker_pool_sup,rabbit_sup,<0.262.0>]
    message_queue_len: 0
    messages: []
    links: [<0.276.0>,<0.336.0>,#Port<0.31196>]
    dictionary: [{fhc_age_tree,{1,{{10352640,#Ref<0.1077581647.1695285251.67028>},true,nil,nil}}},{worker_pool_worker,true},{rand_seed,{#{jump => #Fun<rand.16.15449617>,max => 288230376151711743,next => #Fun<rand.15.15449617>,type => exsplus},[257570830250844431|246837015578235662]}},{worker_pool_name,worker_pool},{{"c:/Users/dfpsb/AppData/Roaming/RabbitMQ/db/RABBIT~1/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L/queues/9GD33C2I2PKZ7A8QHZ4MWWCKE/journal.jif",fhc_file},{file,1,true}},{{#Ref<0.1077581647.1695285251.67028>,fhc_handle},{handle,{file_descriptor,prim_file,{#Port<0.31196>,1808}},#Ref<0.1077581647.1695285251.67028>,240,false,0,infinity,[],<<>>,0,0,0,0,0,false,"c:/Users/dfpsb/AppData/Roaming/RabbitMQ/db/RABBIT~1/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L/queues/9GD33C2I2PKZ7A8QHZ4MWWCKE/journal.jif",[write,binary,raw,read],[{write_buffer,infinity}],true,true,10352640}}]
    trap_exit: false
    status: running
    heap_size: 10958
    stack_size: 27
    reductions: 104391 …
Run Code Online (Sandbox Code Playgroud)

rabbitmq

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

MongoDB C#collection.Save vs Insert + Update

从C#文档:

Save方法是Insert和Update的组合.如果文档的Id成员具有值,则假定它是现有文档并且在文档上保存调用Update(设置Upsert标志以防万一它实际上是新文档).

我正在我的所有域对象继承的基类中手动创建我的ID.所以我的所有域对象在插入MongoDB时都有一个ID.

问题是,我应该使用collection.Save并保持我的界面简单,或者这实际上导致Save-call(带有Upsert标志)的一些开销,我应该使用collection.Insert和Update吗?

我在想的是Save方法首先调用Update,然后确定我的新对象首先不存在,然后调用Insert.我错了吗?有没有人测试过这个?

注意:我使用InsertBatch插入批量数据,因此在这种情况下,大数据块无关紧要.

编辑,跟进

我写了一个小测试,以确定调用Update with Upsert标志是否有一些开销,所以Insert可能会更好.原来它们以相同的速度运行.请参阅下面的测试代码.MongoDbServer和IMongoDbServer是我自己的通用接口,用于隔离存储设施.

IMongoDbServer server = new MongoDbServer();
Stopwatch sw = new Stopwatch();
long d1 = 0;
long d2 = 0;
for (int w = 0; w <= 100; w++)
{
    sw.Restart();
    for (int i = 0; i <= 10000; i++)
    {
        ProductionArea area = new ProductionArea();
        server.Save(area);
    }
    sw.Stop();
    d1 += sw.ElapsedMilliseconds;
    sw.Restart();
    for (int i = 0; i <= 10000; i++)
    {
        ProductionArea area = new ProductionArea();
        server.Insert(area);
    }
    sw.Stop();
    d2 …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-.net-driver

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

Service Fabric,我在哪里使用哪个证书?

我正在 Azure 中设置 Service Fabric 群集,并希望通过 https 运行 Web API(使用 .NET Core)。我想使用我的 CA 签名通配符 (*.mydomain.com) 证书来访问此 API。但我对创建集群时在哪里使用它有点困惑,是集群还是客户端证书?我正在考虑客户端证书,但文档指出这是用于管理工具(即资源管理器),所以我不确定如何继续。

是的,我已经阅读了大量的帖子和资源,但我仍然觉得这很令人困惑。

https azure ssl-certificate azure-service-fabric

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

ClickOnce和自定义更新URL

我正在研究的应用程序(.NET C#)正在我们客户自己的服务器上部署,因此我们可以使用ClickOnce在客户工作计算机上安装应用程序.由于它是客户自己的服务器,因此IP永远不会相同.这是标准ClickOnce更新机制的问题.这是我最终想要的场景:

  • 从项目中删除"应用程序应检查更新".
  • 启动后,应用程序从服务器获取应用程序设置(已经实现),并在这些设置中提供更新URL.
  • 使用更新URL,应用程序使用ClickOnce检查更新.
  • 应用程序已更新并重新启动.

这可能吗?如何?

我已经阅读了如何移动ClickOnce部署包,这可能有效,但有时客户决定更改服务器IP.

.net deployment clickonce

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