WCF Plusieurs Liaisons
J'obtiens le message d'erreur suivant lorsque j'essaie de multiples points de fin..
System.ServiceModel.AddressAlreadyInUseException: The TransportManager failed to listen on the supplied URI using the NetTcpPortSharing service: the service failed to listen.
at System.ServiceModel.Channels.SharedConnectionListener.SharedListenerProxy.Register()
at System.ServiceModel.Channels.SharedConnectionListener.SharedListenerProxy.Open(Boolean isReconnecting)
at System.ServiceModel.Channels.SharedConnectionListener.StartListen(Boolean isReconnecting)
at System.ServiceModel.Channels.SharedConnectionListener..ctor(BaseUriWithWildcard baseAddress, Int32 queueId, Guid token, OnDuplicatedViaDelegate onDuplicatedViaCallback)
at System.ServiceModel.Channels.SharedTcpTransportManager.OnOpenInternal(Int32 queueId, Guid token)
at System.ServiceModel.Channels.SharedTcpTransportManager.OnOpen()
at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener)
at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback)
at System.ServiceModel.Channels.TransportChannelListener.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.ConnectionOrientedTransportChannelListener.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.TcpChannelListener`2.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ReliableChannelListenerBase`1.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open()
at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)
Voici mon Application.Config contenu
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="tcpBinding" transferMode="Buffered" portSharingEnabled="true">
<reliableSession enabled="true" />
<security mode="None">
<transport clientCredentialType="None" protectionLevel="None" />
<message clientCredentialType="None" />
</security>
</binding>
</netTcpBinding>
</bindings>
<services>
<service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
name="WcfServiceLibrary1.Service1">
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="Service" binding="netTcpBinding" bindingConfiguration="tcpBinding"
name="testTcp" contract="WcfServiceLibrary1.IService1" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
<add baseAddress="net.tcp://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfServiceLibrary1.Service1Behavior">
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Serait génial si quelqu'un pouvait me guider où je me trompe.
Net de port TCP service de partage est activée à la fois dans l'App.De configuration et de Service Windows.C'est aussi loin que je puisse vérifier.
Êtes-vous de l'auto-hébergement, ou de l'hébergement dans IIS? IIS6 ou IIS7 ?
OriginalL'auteur Josh | 2009-08-19
Vous devez vous connecter pour publier un commentaire.
Il se pourrait que vous êtes en utilisant le même port pour le HTTP et TCP liaisons. Essayez de changer le port sur le port TCP de la liaison à 8732 ou quoi que ce soit d'autre que 8731.
OriginalL'auteur Andy White
Vous ne pouvez pas partager le même port entre deux liaisons, qui est basée sur la configuration que vous avez posté ci-dessus, vous êtes en train de faire. Vous devez avoir votre wsHttp de liaison sur un autre port que le net.tcp de liaison. Le but de net.partage de port tcp est de permettre à plusieurs processus utilisent le même port pour plusieurs net.tcp liaisons...de ne pas partager un port unique à travers de multiples liaisons et des protocoles.
D'utiliser avec succès WCF net.partage de port tcp, vous avez besoin pour commencer sur le Net".Le Port Tcp Service de Partage' (notez qu'il est dit explicitement Net.Tcp dans le nom). Vous voudrez probablement pour le mettre en démarrage Automatique, de sorte que vous n'avez pas à garder de départ si vous le redémarrez. Une fois le partage de port de service windows est démarré, vous pouvez partager un seul port pour toute net.tcp de liaison, dans le même processus, à travers de multiples processus, sur la même machine physique. Chaque net.tcp liaison qui doit partager un port aura besoin de l'portSharingEnabled propriété est définie sur true. Si vous le faites ci-dessus, alors vous devriez être en mesure de réutiliser le même port pour toute net.point de terminaison tcp qui a port le partage est activé, dans n'importe quel processus.
Ce ne sera pas vous permettre de partager le même port avec les wsHttp liaisons, le basicHttp de liaison, tout MSMQ de liaison, ni les tiers de liaison. C'est une caractéristique qui est spécifique à la netTcpBinding qui vient avec WCF.
Pour référence:
http://msdn.microsoft.com/en-us/library/ms734772.aspx
Mais alors...ce N'est pas HTTP aussi une sorte de TCP? Serait-il possible de le faire fonctionner sur le même port?
HTTP est un protocole d'application qui fonctionne sur le transport TCP/IP. La WCF Tcp.Net est également un protocole d'application, mais un propriétaire, qui opère sur le transport TCP/IP. Les deux utilisent le réseau tcp couche de transport, cependant ils n'ont aucun rapport les uns aux autres.
Je l'ai eu.... 🙂
En regardant les protocoles, http.sys pourrait, en théorie, multiplex à la fois net.tcp et http sur le même port que les requêtes HTTP de toujours commencer par un caractère alphabétique, comme le
G
dansGET / HTTP/1.1
, tandis que net.tcp commence par un zéro binaire comme son premier octet. Mais http.sys ne pas le faire pour nous.OriginalL'auteur jrista
Id vous suggérons d'activer traçage afin d'obtenir une meilleure compréhension du problème. WCF pourrait être une b*tch quand il s'agit de montrer les messages d'erreur.
OriginalL'auteur sebagomez
Il peut être un problème avec la liaison tcp /configuration plutôt que d'un problème avec plusieurs liaisons.
À tester de supprimer la référence à la liaison http et voir si le protocole tcp liaison va travailler seul.
OriginalL'auteur Shiraz Bhaiji