2008-10-14 6 views
20

Ich habe einen WCF-Dienst auf dem IIS mit einer ServiceHostFactory ausgeführt. Es läuft gut mit der WSHttpBinding, aber wegen der Geschwindigkeit und alles im selben Netzwerk (keine Firewalls) Ich möchte die Dinge ein wenig beschleunigen mit dem NetTcpBinding stattdessen.Warum kann ich keine Verbindung zu einem WCF-Dienst mit net.tcp herstellen, aber ich kann mit http?

Wenn ich versuche zu tun, dass ich diesen Fehler:

Could not connect to net.tcp://zzz.xxx.yyy/MyService.svc. The connection attempt lasted for a time span of 00:00:01.0464395. TCP error code 10061: No connection could be made because the target machine actively refused it x.x.x.x:808.

Ich verwende SecurityMode.None nur um sicher zu stellen, dass schraubt mich nicht auch habe ich versucht, eine dieser auf zwei verschiedenen Versuchen:

binding.Security.Message.ClientCredentialType = MessageCredentialType.None; 
binding.Security.Message.ClientCredentialType = TcpClientCredentialType.Windows;, 

auch sollte ich darauf hinweisen, dass ich von einem der Service-Anrufe ziemlich lof Daten bin ziehen, so dass ich diese auch (auf der http beide und die tCP-Versuche - Einstellung MaxMessageSize zu 1000000) setzen

binding.MaxReceivedMessageSize = maxMessageSize; 
binding.ReaderQuotas.MaxArrayLength = maxMessageSize; 

Es sollte ziemlich einfach sein, es zur Arbeit zu bekommen, also was fehlt mir?

UPDATE: Ich habe den TCP-Port 808 der Identität der Website hinzugefügt und es erneut versucht. Jetzt erhalte ich diesen Fehler:

Antwort

14

Überprüfen Sie this post beim Aktivieren von Nicht-HTTP-Bindungen in IIS 7.0. Standardmäßig müssen Sie net.tcp explizit in IIS 7.0 aktivieren.

Hoffe, das hilft.

UPDATE:

Ihren Kommentar Saw - leider ist net.tcp nicht in IIS 6.0 unterstützt. Weitere Informationen finden Sie unter this link, in der die unterstützten WCF-Bindungen für verschiedene Hosts (einschließlich Self-Hosting, WAS und IIS) aufgeführt sind. Sieht aus, als ob nur HTTP-Bindungen in IIS 6.0 funktionieren.

+0

Der Dienst wird jedoch auf IIS6 gehostet :( –

+0

Überarbeitete meine Antwort ... sieht so aus, als ob IIS6 nichts außer HTTP unterstützt. Ich bin im selben Boot hier bei der Arbeit - wir stecken auf Win2003 für jetzt fest :( –

1

Könnte es etwas sein, das so einfach ist, wie Ihre Firewallregeln auf dem Service-Host, der Anschluss 808 verbietet?

+0

Ich habe nur überprüft, und es gibt keine Firewalls blockieren den internen Verkehr, aber danke. –

23

Wenn Sie Vista verwenden, vergewissern Sie sich, dass die Dienste WAS und Net.Tcp Listener Adapter ausgeführt werden.

+2

+1, dass Net.Tcp Listener Adapter Service aus irgendeinem Grund ausgeschaltet wurde:/Prost. –

+1

Ich musste auch starten Net.Tcp Port Sharing Service als abhängiger Dienst .. Beide wurden deaktiviert .. – RandomEngy

+4

WAS steht für Window Process Activation Service –

7

Sobald ich Net.Tcp Listener Adapter Service starte, funktioniert Service für mich gut.

+0

Das war mein Problem.Thanks für die heads-up ..... – tsells

1

überprüfen, ob IIS beide Protokolle auf die gleiche Portnummer zeigt, ich habe gerade gefunden, wenn das der Fall ist, wird es nicht funktionieren.

15

Für alle, die quer durch das stolpert, mein Führer auf Fehlersuche net.tcp WCF Fragen wie diese:

  1. Überprüfen Sie, ob net.tcp ein aktiviertes Protokoll für die Website ist (in IIS, rechts- Klicken Sie auf die Site, gehen Sie zu den erweiterten Einstellungen und stellen Sie sicher, dass Enabled Protocols "net.tcp" enthält.
  2. Ich bin mir nicht sicher, ob dies eine Paranoia Sache ist, ich musste auch immer net.tcp für die Site über den Befehl aktivieren Linie sowie Schritt 1. Öffnen Sie eine Eingabeaufforderung, und geben Sie appcmd.exe set app "NameOfWebsite/" /enabledProtocols:http,net.tcp
  3. Überprüfen Sie, dass die Bindungen für Die Website in IIS hat einen Eintrag für net.tcp, und Sie haben es an die richtige Portnummer gebunden (für mich verwende ich 9000: * als meine Bindung an Port 9000). Stellen Sie außerdem sicher, dass keine anderen Websites in IIS dasselbe Netz verwenden.tcp Bindung an diesen Port
  4. Überprüfen Sie, ob der Dienst "Net.TCP Listener Adapter" ausgeführt wird.

Fertig.

+1

Danke! 1,2 & 3 waren an Ort und Stelle, aber nicht 4. Es war der Net TCP Listener Adapter (und abhängige Dienste) nicht für mich laufen! Windows Process Activation Services, NET TCP Port Sharing und Net TCP Listener Adapter sind alle gestartet –

+1

# 3 Arbeitete für mich.Ich hatte zwei Websites teilen net.tcp: 808. Sogar though h die zweite Seite war komplett deaktiviert, es hat nicht funktioniert !! Dies ist der einzige Ort, an dem ich gesehen habe, dass der net.tcp-Port nicht seitenübergreifend geteilt werden kann. Tolle Infos! –

+0

Es war für mich offensichtlich, aber um "net.tcp" hinzuzufügen, geben Sie es einfach in das Textfeld ein (durch Kommas getrennte Liste). – Jess

1

Ich war auch dieses Problem, auf Windows Server 2008 R2

Einfach sicher, dass der Net.Tcp Portfreigabedienst wird auch gestartet, da es eine Abhängigkeit des Net.Tcp Listener-Adapters ist.