Benutzer mit den meisten Antworten
WCF Timeout

Frage
-
Hallo zusammen
Ich habe folgendes netTCPBinding:
<binding name="UnReliableBufferedTCP" transferMode="Buffered" listenBacklog="254" maxBufferPoolSize="524288" maxBufferSize="2147483647" maxConnections="254" maxReceivedMessageSize="2147483647" portSharingEnabled="true"> <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <security mode="None" /> </binding>
Nun möchte ich den Timeout auf den maximalen Wert stellen. Kann mir jemand einen Hinweis geben, wie ich das anzugeben habe?
Besten Dank.
Viele Grüsse, Thomas
Antworten
-
Hallo Thomas,
siehe dazu:
How to set infinite activity timeout on netTcpBinding?
Playing with WCF netTcpBinding timeouts
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Kehl Thomas Donnerstag, 27. Januar 2011 15:20
-
Hallo Thomas,
Was genau möchtest Du mit dem Setzen eines Zeitüberschreitungslimits erreichen?
Könntest Du dein Szenario etwas detaillierter darstellen?
Welchen Timeout genau möchtest Du setzen (z.B. Attribute für Binding: closeTimeout, openTimeout, receiveTimeout, sendTimeout)?
Auf dem Client und/oder auf dem Server und/oder Host?
Du scheinst keine Sessions zu verwenden?
Wie sieht Dein InstanceContextMode aus?
Warum streamst Du die Daten nicht?
Ein guter Startpunkt - System.ServiceModel.Channels.Binding-Klasse:
http://msdn.microsoft.com/de-de/library/system.servicemodel.channels.binding.aspx<netTcpBinding>
http://msdn.microsoft.com/en-us/library/ms731343.aspxGruß
Marcel- Bearbeitet Marcel RomaModerator Montag, 24. Januar 2011 20:48
- Als Antwort markiert Kehl Thomas Donnerstag, 27. Januar 2011 15:20
-
Hallo Thomas,
der maximale Wert für die Timeouts sollte hier normal "23:59:59" nicht überschreiten,
bzw. im Code: new TimeSpan(23,59,59). Realer Maximalwert ist aber Timespan.MaxValue ("10675199.02:48:05").
Hinweise dazu auch hier: [WCF-NetTcp Transport Properties Dialog Box, Receive, Binding Tab]____________________________
BTW: bei solch großen Datenmengen wäre natürlich (wenn es nicht nur ein Test wäre) Chunking oder Streaming angesagt.
Ggf. solltest Du auch noch die ReaderQuotas Deines Binding erhöhen .......
[<<netTcpBinding>>]
[Int32.MaxValue-Feld (System)] (->2147483647)
[ServiceBehaviorAttribute.MaxItemsInObjectGraph-Eigenschaft (System.ServiceModel)]
[Umfangreiche Daten und Streaming]
[Segmentierungskanal] (Chunking)
[Lanit-Tercom]
[XmlDictionaryReaderQuotas-Eigenschaften (System.Xml)]
[NetTcpBinding.MaxBufferSize-Eigenschaft (System.ServiceModel)]
[(WCF) Problem mit Nachrichtengröße]
ciao Frank- Als Antwort markiert Kehl Thomas Donnerstag, 27. Januar 2011 15:20
Alle Antworten
-
Hallo Thomas,
siehe dazu:
How to set infinite activity timeout on netTcpBinding?
Playing with WCF netTcpBinding timeouts
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Kehl Thomas Donnerstag, 27. Januar 2011 15:20
-
Hallo Thomas,
Was genau möchtest Du mit dem Setzen eines Zeitüberschreitungslimits erreichen?
Könntest Du dein Szenario etwas detaillierter darstellen?
Welchen Timeout genau möchtest Du setzen (z.B. Attribute für Binding: closeTimeout, openTimeout, receiveTimeout, sendTimeout)?
Auf dem Client und/oder auf dem Server und/oder Host?
Du scheinst keine Sessions zu verwenden?
Wie sieht Dein InstanceContextMode aus?
Warum streamst Du die Daten nicht?
Ein guter Startpunkt - System.ServiceModel.Channels.Binding-Klasse:
http://msdn.microsoft.com/de-de/library/system.servicemodel.channels.binding.aspx<netTcpBinding>
http://msdn.microsoft.com/en-us/library/ms731343.aspxGruß
Marcel- Bearbeitet Marcel RomaModerator Montag, 24. Januar 2011 20:48
- Als Antwort markiert Kehl Thomas Donnerstag, 27. Januar 2011 15:20
-
Hallo Marcel,
Konkret geht es um folgendes: Ich bin an der Entwicklung einer Client-Server-Anwendung. D.h. der Client fordert über WCF beim Server Daten an, der diese aus einer SQL-Server-Datenbank liest und dann zum Client zurückgibt. Nun bin ich in der Testphase und möchte mal testen, wie lange es geht, 1000, 10'000, 100'000 Datensätze zu lesen und zurückzugeben. Dafür möchte ich nun den Timout auf maximal setzen, damit ich während den Tests nicht immer in eine Timeout-exception laufe. Ich habe nun nach der Antwort von Stefan recherchiert und bin nun genau bei der Frage stehen geblieben, welche Timeouts ich dafür nun genau setzen muss. Ich denke, receiveTimeout und sendTimeout müssten eigentlich reichen, oder?
Den max-Wert setze ich nun folgendermassen:
receiveTimeout="infinite" sendTimeout="infinite"
Danke für deine/eure Unterstützung.
Viele Grüsse, Thomas
-
Hallo Thomas,
Ich habe nun nach der Antwort von Stefan recherchiert und bin nun genau bei der Frage stehen geblieben, welche Timeouts ich dafür nun genau setzen muss. Ich denke, receiveTimeout und sendTimeout müssten eigentlich reichen, oder?
würde ich auch so sehen. Daher auch die beiden Links :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Thomas,
[Ich] bin nun genau bei der Frage stehen geblieben, welche Timeouts ich dafür nun genau setzen muss. Ich denke, receiveTimeout und sendTimeout müssten eigentlich reichen, oder?
Mit dem Transfermodus Buffered wirst Du bei großen Datenmengen nicht sehr weit kommen. Ich würde an Deiner Stelle streamen. Ja, die wichtigsten Timeouts sind receiveTimeout und sendTimeout, und du mußt sie auf beiden Seiten der Kommunikation setzen. In Datenportal-Szenarien wird oft mit Sessions (reliableSession-Tag) gearbeitet. So hast Du auch die Möglichkeit ein InactivityTimeout anzugeben. Nur aus Neugier: Welchen InstanceContextMode verwendest Du ?(P.S. Wenn Du receiveTimeout auf "Infinite" setzt, wird Dich Visual Studio warnen, intern wird dieser Wert jedoch zu TimeSpan.MaxValue umgesetzt.)
Gruß
Marcel -
Hallo Thomas,
der maximale Wert für die Timeouts sollte hier normal "23:59:59" nicht überschreiten,
bzw. im Code: new TimeSpan(23,59,59). Realer Maximalwert ist aber Timespan.MaxValue ("10675199.02:48:05").
Hinweise dazu auch hier: [WCF-NetTcp Transport Properties Dialog Box, Receive, Binding Tab]____________________________
BTW: bei solch großen Datenmengen wäre natürlich (wenn es nicht nur ein Test wäre) Chunking oder Streaming angesagt.
Ggf. solltest Du auch noch die ReaderQuotas Deines Binding erhöhen .......
[<<netTcpBinding>>]
[Int32.MaxValue-Feld (System)] (->2147483647)
[ServiceBehaviorAttribute.MaxItemsInObjectGraph-Eigenschaft (System.ServiceModel)]
[Umfangreiche Daten und Streaming]
[Segmentierungskanal] (Chunking)
[Lanit-Tercom]
[XmlDictionaryReaderQuotas-Eigenschaften (System.Xml)]
[NetTcpBinding.MaxBufferSize-Eigenschaft (System.ServiceModel)]
[(WCF) Problem mit Nachrichtengröße]
ciao Frank- Als Antwort markiert Kehl Thomas Donnerstag, 27. Januar 2011 15:20