小编Ham*_*ein的帖子

显式事件添加/删除,误解?

我最近一直在研究内存管理,并一直在研究如何管理事件,现在,我看到了事件订阅的显式添加/删除语法.

我认为这很简单,添加/删除只允许我在订阅和取消订阅时执行其他逻辑?我得到它了,还是有更多的东西?

此外,虽然我在这里,任何清理我的事件处理的建议/最佳实践.

.net c# events memory-management

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

服务巴士 - 我愚蠢吗?

我已经看了几个月的公共交通,我对这些可能性非常感兴趣.但是,我似乎无法将这些概念完全正确.我看了代码,我已经阅读了文档,但我觉得我并不理解它.

一般的例子显示;

    Bus.Initialize( sbc =>
                       {
                           sbc.UseMsmq( );
                           sbc.VerifyMsmqConfiguration( );
                           sbc.UseMulticastSubscriptionClient( );
                           sbc.ReceiveFrom( "msmq://localhost/myqueue" );
                       } );
Run Code Online (Sandbox Code Playgroud)

现在,我明白这是做什么的,但我不认为我的大脑比这更进一步.这就是我所理解的;

  • 消息可以从软件发布,并在服务总线内订阅,以便在收到该消息时执行操作.
  • 服务总线本身位于消息传递队列(MT中的RabbitMQ或MSMQ)之上

我只想更多地了解这一点.我不认为我得到它.我是否需要配置服务器,监听?我是否在我的软件中设置它然后只是发布消息,它们从内部被拾取和处理?

masstransit servicebus publish-subscribe

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

Ninject每个会话单身?

所以我试图将用户的概念引入我的应用程序,并拥有自己的一组自定义登录例程等工作正常.在我的模块中,我将IUserSession绑定到我的实现和InSingletonScope.

现在我怀疑是这种情况,并且已经能够证明这不是正确的事情,如果我尝试使用两个用户登录同一站点,我只获得一组数据.

如果我实现MembershipProvider,我是否应该避免这种限制.我知道,如果我实施会员提供者,我不必注入所有内容,但我的登录不仅仅是用户名/密码,如何使用其他数据登录"?

ninject membership-provider ninject.web asp.net-mvc-3

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

Xamarin PCL库中的GetConstructors

我正在与Xamarin一起开发一个Android项目,并且在此过程中,我决定编写自己的简单IoC容器.现在,我来决定是否需要为注入的实例注入任何依赖项.我查看了Type.GetConstructors,它说它可以在PCL项目中使用,但我似乎无法获得GetConstructors.

我在使用中有System.Reflection,如果我创建了一个Android库,我可以使用GetConstructor/s.MSDN 文档肯定说它在PCL中.也许这不是我完全理解PCL在Xamarin生态系统中意味着什么,但我认为这意味着它会受到支持.

所以,我的问题是,我错过了什么或者这是否正确?

UPDATE

对于任何想看我怎么做的人;

https://github.com/tbd-develop/simpletypeprovider

c# reflection mono xamarin

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

HttpWebRequest WebException ProtocolError

我试图了解有关使用HttpWebRequest进行异常处理的知识。

我有一个客户端库,它正在向WebAPI控制器发出请求;

HttpWebRequest r = (HttpWebRequest)WebRequest.Create(url);

r.Method = "POST";
r.ContentType = "application/json";

foreach (var header in request.Headers)
{
     r.Headers.Add(header.Key, header.Value.ToString());
}

r.ContentLength = request.RequestBody.Length;

using (StreamWriter writer = new StreamWriter(r.GetRequestStream()))
    writer.Write(request.RequestBody);
Run Code Online (Sandbox Code Playgroud)

我知道请求将引发异常,并包含消息“实体已存在-1234”。

当我得到回应时;

using (HttpWebResponse response = (HttpWebResponse)r.GetResponse())
{
    if (response.StatusCode == HttpStatusCode.OK)
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            return reader.ReadToEnd();

     return "Invalid"; 
 }
Run Code Online (Sandbox Code Playgroud)

我抛出了WebException。因此,请求的调用者中有一个try..catch。我得到了WebException。我得到的是协议错误,而不是引发的500内部服务器错误(稍后使用正确的状态代码表示消息)。现在,如果我阅读了WebException的Response,它确实包含了我的消息和stacktrace。

问题

  • 为什么我的响应中没有得到状态码500,为什么会抛出协议错误?
  • 是否有更正确的方式处理请求?

我四处搜寻,发现有些人在使用不正确的标题等时遇到了这个问题。但是据我所知,我已经添加了所有可以并且仍然具有相同行为的标题。

c# httprequest asp.net-web-api

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

MySQL - 什么是正确的主键方法

我开始使用MySQL开发应用程序,虽然我在使用数据库之前已经开发了应用程序,但我通常会使用递增id方法.有一天,我正在某个地方阅读帖子,看到有人因为没有正确地"正常化数据库"而被分开.我不是一个大数据库人,但我想确保我做对了.

任何想法,帮助/指导?

mysql primary-key

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

多个长时间运行的并行任务

尝试创建一个服务来消费来自 Kafka 的许多主题。我想为每个消费者创建一个任务,这意味着这些是长时间运行的任务。

在每项任务中,如果我这样做;

while(!token.IsCancellationRequested)
{
 var result = await consumer.Consume(token);
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试启动多个任务,第一个任务会启动,但其他任务不会继续。

我以为我正在寻找关于如何正确管理任务的最佳实践(这不是我做过的很多事情)并发布在软件工程上,但有人告诉我有一个错误,我应该在这里发布。

看这部作品;

async Task Main()
{
    var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5));
    
    await Task.WhenAll(Consumer1(cancellationTokenSource.Token), Consumer2(cancellationTokenSource.Token));
    
    Console.WriteLine("Complete");
}

private async Task Consumer1(CancellationToken token)
{
    Console.WriteLine("Working on consumer 1");
    
    while (!token.IsCancellationRequested)
    {
        // Do a thing
        // await consumer.Consume() 
    }
    
    Console.WriteLine("Completed Consumer 1");

    await Task.CompletedTask;
}

private async Task Consumer2(CancellationToken token)
{
    Console.WriteLine("Completed consumer 2");
    
    await Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)

结果将是;

00:00:00: Working on consumer 1 
00:00:05: Completed Consumer 1 
00:00:05: Completed …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library

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