我之所以发布此消息,是因为我无法在Stack Overflow上找到任何位置来解决该问题,因为该问题通过使用Connected Services添加服务引用来解决了使用WCF的.Net-Core项目。
我的问题是,由于长时间运行的操作请求,我面临客户端超时。
因此,由于.Net-Core不再使用Web配置存储WCF服务引用的配置值了,因此如何增加wcf客户端对象的超时值? (请参阅我提供的答案)
答案 0 :(得分:2)
在解决方案资源管理器中的“已连接的服务”下,添加WCF服务后,将为该服务生成一些文件。您应该看到一个文件夹,该文件夹的名称是您给WCF服务引用的名称,并在其下有一个Getting Started
,ConnectedService.json
和一个Reference.cs
文件。
要增加任何客户端服务对象的超时值,请打开Reference.cs
并找到方法:GetBindingForEndpoint
在此方法中,您应该看到类似以下内容的
:if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_IYourService))
{
System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
result.MaxBufferSize = int.MaxValue;
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
result.MaxReceivedMessageSize = int.MaxValue;
result.AllowCookies = true;
//Here's where you can set the timeout values
result.SendTimeout = new System.TimeSpan(0, 5, 0);
result.ReceiveTimeout = new System.TimeSpan(0, 5, 0);
return result;
}
只需使用result.
和您要增加的超时,例如SendTimeout
,ReceiveTimeout
等,然后将其设置为具有所需超时值的新TimeSpan。
我希望这对某人来说是有用的帖子。
答案 1 :(得分:2)
只需在生成的代理类中实现以下部分方法即可配置服务端点。将部分方法放在您自己的文件中以确保它不会被覆盖。
static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials);
答案 2 :(得分:1)
Ryan Wilson的回答将起作用,但仅在您尝试更新服务之前。 Reference.cs将被覆盖。 在.NET Core 3.1中,您可以在语法上修改绑定超时:
public MemoqTMServiceClass(string api_key)
{
client = new TMServiceClient();
var eab = new EndpointAddressBuilder(client.Endpoint.Address);
eab.Headers.Add(
AddressHeader.CreateAddressHeader("ApiKey", // Header Name
string.Empty, // Namespace
api_key)); // Header Value
client.Endpoint.Address = eab.ToEndpointAddress();
client.Endpoint.Binding.CloseTimeout = new TimeSpan(2, 0, 0);
client.Endpoint.Binding.OpenTimeout = new TimeSpan(2, 0, 0);
client.Endpoint.Binding.ReceiveTimeout = new TimeSpan(0, 10, 0);
client.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0);
}