小编dya*_*nko的帖子

ASP.NET控制器:在异步操作仍处于挂起状态时完成的异步模块或处理程序

我有一个非常简单的ASP.NET MVC 4控制器:

public class HomeController : Controller
{
    private const string MY_URL = "http://smthing";
    private readonly Task<string> task;

    public HomeController() { task = DownloadAsync(); }

    public ActionResult Index() { return View(); }

    private async Task<string> DownloadAsync()
    {
        using (WebClient myWebClient = new WebClient())
            return await myWebClient.DownloadStringTaskAsync(MY_URL)
                                    .ConfigureAwait(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我启动项目时,我看到了我的视图,它看起来很好,但是当我更新页面时,我收到以下错误:

[InvalidOperationException:在异步操作仍处于挂起状态时完成异步模块或处理程序.

为什么会这样?我做了几个测试:

  1. 如果我们task = DownloadAsync();从构造函数中删除并将其放入Index方法中它将正常工作而没有错误.
  2. 如果我们使用另一个DownloadAsync()身体return await Task.Factory.StartNew(() => { Thread.Sleep(3000); return "Give me an error"; });它将正常工作.

为什么不可能WebClient.DownloadStringTaskAsync在控制器的构造函数中使用该方法?

.net c# webclient async-await asp.net-mvc-4

43
推荐指数
3
解决办法
5万
查看次数

如何从SQL Server内存中清除SqlDependency?

如何清理SQL Server以清除过期的SqlDependency对象?从SqlDepedency对象收到事件后,我需要创建一个新事件才能获得新事件.但是,SQL Server进程的内存使用量会增加,直到超出允许的内存(SQL Server Express).如何摆脱旧查询?

码:

// Func: RegisterTableListener
using (SqlConnection cn = new SqlConnection(Properties.Settings.Default.DatabseEventConnectionString))
{
if (cmd == null)
{
    cmd = cn.CreateCommand();

    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT HostName, LastStatus, LastDetails, xml FROM dbo.[SystemTable]";
}

lock (cmd)
{
    cmd.Connection = cn;
    cn.Open();
    cmd.Notification = null;

    //  creates a new dependency for the SqlCommand
    if (dep == null)
        dep = new SqlDependency(cmd);
    //  creates an event handler for the notification of data
    //      changes in …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server-2008 sqldependency

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

如何为 IQueryable 应用表达式树?

有没有办法将手动创建的表达式树从一个 IQueryable 应用到另一个?例如:

IQueryable<string> p = Enumerable.Empty<string>().AsQueryable();
p = p.Where(pp => pp[0] == 'A');
p = p.Skip(2).Take(4);
p = p.OrderBy(pp => pp.Length);

var vv = new[] {"Afss", "Acv", "Adfv", "Bcvx", "Ng"}.AsQueryable();

// Filtering of the vv collection with expression from p 
var filteredResult = vv.Filter(p.Expression);
Run Code Online (Sandbox Code Playgroud)

或者我们必须单独应用WhereOrderBy表达式?

c# entity-framework iqueryable expression-trees linq-to-sql

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

Sql Server Service Broker

目前我们正在使用服务代理来回发送消息,这是正常的.但我们希望使用RELATED_CONVERSATION_GROUP对这些消息进行分组.我们希望用我们自己的数据库,从我们的数据库坚持UUID作为RELATED_CONVERSATION_GROUP = @uuid,但即使我们使用相同的UUID每次conversion_group_id每次我们收到的排队时间来不同.

你们知道我创建经纪人或接听电话的方式有什么问题,我提供了下面的经纪人创建代码和接收电话代码.谢谢

下面是代码"Service Broker创建代码"

CREATE PROCEDURE dbo.OnDataInserted

@EntityType NVARCHAR(100),
@MessageID BIGINT,
@uuid uniqueidentifier,
@message_body nvarchar(max)
AS

BEGIN

SET NOCOUNT ON;

 DECLARE @conversation UNIQUEIDENTIFIER

BEGIN DIALOG CONVERSATION @conversation
FROM SERVICE DataInsertSndService
TO SERVICE 'DataInsertRcvService'
ON CONTRACT DataInsertContract
WITH RELATED_CONVERSATION_GROUP = @uuid;

SEND ON CONVERSATION @conversation
MESSAGE TYPE DataInserted
(CAST(@message_body))
Run Code Online (Sandbox Code Playgroud)

下面是代码"接收代码"

WHILE 0 < @@TRANCOUNT ROLLBACK; SET NOCOUNT ON

BEGIN TRANSACTION;

DECLARE 
@cID as uniqueidentifier, 
@conversationHandle as uniqueidentifier,
@conversationGroupId as uniqueidentifier,
@tempConversationGroupId as uniqueidentifier,
@message_body VARBINARY(MAX)

RAISERROR ('Awaiting Message ...', …
Run Code Online (Sandbox Code Playgroud)

sql database sql-server service-broker

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

SQL Server Service Broker-消息超时

我正在研究sql服务器服务代理作为我们应用程序的消息处理技术。

在我们的方案中,从一个客户端应用程序(WPF)发送的消息需要在服务代理中排队,其他客户端应用程序(android)会接收它们。消息是时间敏感的,接收者需要在消息被发送到队列后的“ X”分钟(例如2分钟)之内接收,如果到那时仍无法接收,则消息必须过期并从接收者中删除。队列。

有没有办法告诉服务代理在“ x”分钟后使消息超时?

编辑:添加了我用来测试此脚本。

CREATE DATABASE ServiceBrokerTest
GO

ALTER DATABASE ServiceBrokerTest SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE 
GO

/****** Object:  MessageType [SampleMsgType] ***/
CREATE MESSAGE TYPE [SampleMsgType] AUTHORIZATION [dbo] VALIDATION = NONE
GO

/****** Object:  ServiceContract [MsgContract]    ******/
CREATE CONTRACT [MsgContract] AUTHORIZATION [dbo] ([SampleMsgType] SENT BY INITIATOR)
GO

/****** Object:  ServiceQueue [dbo].[Queue1]    ******/
CREATE QUEUE [dbo].[Queue1] WITH STATUS = ON , RETENTION = OFF , POISON_MESSAGE_HANDLING (STATUS = ON)  ON [PRIMARY] 
GO

/****** Object:  BrokerService [MsgService]    ******/
CREATE …
Run Code Online (Sandbox Code Playgroud)

sql sql-server message-queue service-broker

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