gpt4 book ai didi

c# - WCF netTcpBinding 异步调用

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:03 25 4
gpt4 key购买 nike

我在使用 netTcpBinding 时异步执行对 WCF 服务的调用时遇到问题。

例如。我有一个简单的服务,方法如下:

 public class Service1 : IService1
{
public string Calculate(int value)
{
Thread.Sleep(1000);
return value.ToString();
}
}

在客户端,我正在通过异步调用该方法两次并检查总时间来对其进行测试。总时间应 > 1 秒且 < 2 秒

static void Main(string[] args)
{
var svc = new Service1Client();

var dt = DateTime.Now;
Console.WriteLine("Calculating 10..");
var tsk1 = svc.CalculateAsync(10).ContinueWith(c=> Console.WriteLine ("Result of 10:.." + c.Result.ToString()));

Console.WriteLine("Calculating 20..");
var tsk2 = svc.CalculateAsync(20).ContinueWith(c => Console.WriteLine("Result of 20:.." + c.Result.ToString()));

Task.WaitAll(tsk1, tsk2);
Console.WriteLine("Total Time: " + (DateTime.Now - dt).TotalMilliseconds.ToString());
}

好的。当我使用 basicHttpBinding 对其进行测试时,一切都很顺利:

<endpoint address="" binding="basicHttpBinding" name="svcEndpoint" contract="ServiceTest.IService1"/>

Result using basicHttpBinding

但是当使用netTcpBinding时,客户端会等待第一次调用的结果来执行第二次,使其同步

<endpoint address="" binding="netTcpBinding" name="svcEndpoint" contract="ServiceTest.IService1"/>

enter image description here

有人遇到过这样的问题吗?这是 netTcp 的限制吗?有解决方法吗?

最佳答案

终于明白了!

我需要通过属性 ServiceBehaviour 明确告诉服务是并发的,如下所示:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service1 : IService1
{
public string Calculate(int value)
{
Thread.Sleep(1000);
return value.ToString();
}
}

现在它工作正常。

关于c# - WCF netTcpBinding 异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28117322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com