我的服务器上托管了一堆WCF服务。一个服务负责文件传输,并在用户尝试上传大文件时超时。
我想给用户一个选项,如果他愿意,可以增加这个特定服务的超时值。目前,我正在使用5分钟超时,但是当文件很大并且网络两侧的网络相对较慢时,会达到此限制。
有没有办法动态地这样做?我可以在不影响其他服务的情况下增加一项服务的超时值吗?
我理想的目标是从用户获取值并相应地设置clientTimeout和serverTimeout值。我已经能够设置客户端超时,但服务器超时是目前的限制。有什么想法吗?
我已阅读这些文章,但无法找到在运行时增加服务超时的方法
1. http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.executiontimeout.aspx
2。 WCF service timeout
3. http://blogs.msdn.com/b/wenlong/archive/2008/03/10/why-changing-sendtimeout-does-not-help-for-hosted-wcf-services.aspx
答案 0 :(得分:1)
您可以配置(通过XML或代码)具有特定超时的端点。这是在servicehost启动时设置的,运行时无法更改。
同样不,客户端无法设置服务超时,因为这会使拒绝服务攻击变得非常容易。
最好隔离“文件上传服务”并相应地配置其端点。
答案 1 :(得分:0)
通常,超时问题发生在客户端,而不是主机上。本质上,客户端发送请求但主机不及时返回响应,并且(我认为默认为2分钟)超时发生。
您可以在运行时为每项服务增加或减少超时设置,并将服务定义为唯一的URL:port / Class / Method,但要这样做,您必须在运行时定义服务,绑定等,而不是使用您经常看到的标准web.config。
在主机上,您可以这样设置:
Dim ServiceHostURI As New Uri(sURL)
Dim ServiceHost As New ServiceHost(GetType(YourClass), ServiceHostURI)
Dim sError As String = Nothing
Dim ServiceHostEndPoint As EndpointAddress = New EndpointAddress(ServiceHostURI)
Dim b As BasicHttpBinding
'binding timeoutsettings
b = New BasicHttpBinding(BasicHttpSecurityMode.None)
'thirty minutes
Dim specialTimeSpan = New TimeSpan(0, 30, 0)
b.CloseTimeout = specialTimeSpan
b.ReceiveTimeout = specialTimeSpan
b.SendTimeout = specialTimeSpan
b.OpenTimeout = specialTimeSpan
'other binding settings
b.TransferMode = TransferMode.Buffered
b.MaxReceivedMessageSize = Integer.MaxValue
b.MessageEncoding = WSMessageEncoding.Text
b.TextEncoding = System.Text.Encoding.UTF8
ServiceHost.AddServiceEndpoint(GetType(YourClass), binding, ServiceHostEndPoint.ToString)
ServiceHost.Open()
在客户端,您可以这样设置超时:
Dim hbe As New System.ServiceModel.Channels.HttpTransportBindingElement()
hbe.MaxBufferSize = Integer.MaxValue
hbe.MaxBufferPoolSize = Integer.MaxValue
hbe.MaxReceivedMessageSize = Integer.MaxValue
binding.Elements.Add(hbe)
binding.SendTimeout = New TimeSpan(0, 30, 0)
binding.ReceiveTimeout = New TimeSpan(0, 30, 0)
这个方法很好用的是你可以在代码中动态设置超时,但改变(显然)只发生在设置上。在服务运行时,您无法更改超时。 希望,这是一个帮助。