C# 服务总线:Can';在最初的15-20秒内,你不会收到任何消息,然后它就会工作
我通过服务总线发送guidC# 服务总线:Can';在最初的15-20秒内,你不会收到任何消息,然后它就会工作,c#,jquery,asp.net-mvc,azure,azureservicebus,C#,Jquery,Asp.net Mvc,Azure,Azureservicebus,我通过服务总线发送guidId。一切正常,我的页面会自动添加新的Id。但是,无论何时加载或刷新页面,我都会暂时无法收到任何消息。他们不知何故不知从哪里消失了。我检查了azures队列中的消息,但它显示为零,所以这意味着在这段时间内消息不知何故从我下面的代码中泄漏出去 “死区时间”持续大约15-20秒,然后它工作得非常好,直到我再次加载页面 发件人: public void Post(Guid id) { var connectionString = "X";
Id
。一切正常,我的页面会自动添加新的Id
。但是,无论何时加载或刷新页面,我都会暂时无法收到任何消息。他们不知何故不知从哪里消失了。我检查了azures队列中的消息,但它显示为零,所以这意味着在这段时间内消息不知何故从我下面的代码中泄漏出去
“死区时间”持续大约15-20秒,然后它工作得非常好,直到我再次加载页面
发件人:
public void Post(Guid id) {
var connectionString = "X";
var queueName = "Send";
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
var message = new BrokeredMessage(id);
client.Send(message);
}
接收人:
public string GetMessage() {
var connectionString = "X";
var queueName = "Send";
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
var message = client.Receive(TimeSpan.FromMinutes(1));
var getId = message?.GetBody<string>();
if (getId == null) { return null; }
message.Complete();
return getId;
}
公共字符串GetMessage(){
var connectionString=“X”;
var queueName=“发送”;
var client=QueueClient.CreateFromConnectionString(connectionString,queueName);
var message=client.Receive(TimeSpan.frommins(1));
var getId=message?.GetBody();
如果(getId==null){returnnull;}
message.Complete();
返回getId;
}
Ajax/JQuery:
<script type="text/jscript">
var url = "/Home/GetMessage";
function getData () {
$.get(url, function (data) {
var div = $("<div>");
div.html(data);
$("#content").append(div);
getData();
});
}
getData();
</script>
var url=“/Home/GetMessage”;
函数getData(){
$.get(url、函数(数据){
var div=$(“”);
div.html(数据);
$(“#内容”)。追加(div);
getData();
});
}
getData();
知道如何解决这个问题吗?我遇到了一个听起来很像这样的问题,我的解决方案是确保在调用QueueClient.CreateFromConnectionString(…)之前将ConnectionMode设置为HTTPS。您的问题可能是它正在尝试通过TCP进行连接,这20秒可能是因为它在尝试HTTP/HTTPS之前等待TCP连接失败。在连续的调用中,它将使用HTTP/HTTPS,但在最初创建客户端时,您会感到这种痛苦 试试这个:
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Https;
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
如果有效,请确保将设置SystemConnectivity.Mode的代码放在一个更仔细的位置,并以某种形式创建客户机。您不想一直创建新客户端。我遇到了一个听起来很像这样的问题,我的解决方案是确保在调用QueueClient.CreateFromConnectionString(…)之前将ConnectionMode设置为HTTPS。您的问题可能是它正在尝试通过TCP进行连接,这20秒可能是因为它在尝试HTTP/HTTPS之前等待TCP连接失败。在连续的调用中,它将使用HTTP/HTTPS,但在最初创建客户端时,您会感到这种痛苦 试试这个:
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Https;
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
如果有效,请确保将设置SystemConnectivity.Mode的代码放在一个更仔细的位置,并以某种形式创建客户机。您不想一直创建新客户端。以上代码是否完整?我不明白您的
GetMessage
实现如何工作var getId=new StreamReader(string)
没有从消息本身获取任何内容。无论如何,我的建议是在一个独立的控制台应用程序中运行经过提炼的发送/接收代码,而不使用任何AJAX/web容器。根据我的经验,通过ASB发送/接收几乎是即时的。@SlavaAsipenko哦,你是对的,我不小心选择了旧的/不正确的代码。现在更正了。所以你的意思是ASB不能像我打算的MVC那样工作?这是我第一次使用ASB。原则上,它在MVC中应该可以正常工作。只是说,首先单独调试可能更容易。我不认为延误是由于ASB。特别是因为它在页面加载之前工作正常。由于视图的呈现方式或Web请求的处理方式,可能存在固有的延迟。另一个半相关的观察结果是,每次从头开始创建队列客户机是一个相对昂贵的操作,尽管它不应该花费10秒。对于原型开发很好,但是考虑到在最终实现中重用客户端。我感兴趣的是将一个RePro代码看作是GITHUB或BITKUB上的一个项目。接收器旋转和托管的方式也可能导致延迟。上面的代码是否完整?我不明白您的GetMessage
实现如何工作var getId=new StreamReader(string)
没有从消息本身获取任何内容。无论如何,我的建议是在一个独立的控制台应用程序中运行经过提炼的发送/接收代码,而不使用任何AJAX/web容器。根据我的经验,通过ASB发送/接收几乎是即时的。@SlavaAsipenko哦,你是对的,我不小心选择了旧的/不正确的代码。现在更正了。所以你的意思是ASB不能像我打算的MVC那样工作?这是我第一次使用ASB。原则上,它在MVC中应该可以正常工作。只是说,首先单独调试可能更容易。我不认为延误是由于ASB。特别是因为它在页面加载之前工作正常。由于视图的呈现方式或Web请求的处理方式,可能存在固有的延迟。另一个半相关的观察结果是,每次从头开始创建队列客户机是一个相对昂贵的操作,尽管它不应该花费10秒。对于原型开发很好,但是考虑到在最终实现中重用客户端。我感兴趣的是将一个RePro代码看作是GITHUB或BITKUB上的一个项目。接收器的旋转和托管方式也可能导致延迟。