2012-03-16 7 views
15

मैं यह पता लगाने की कोशिश कर रहा हूं कि कंप्यूटर को पुनरारंभ करने के बाद भी पोर्ट का उपयोग क्यों किया जा रहा है!आईपी एंडपॉइंट 0.0.0.0:13000 पर पहले से ही एक श्रोता है। ?? (डब्ल्यूसीएफ का उपयोग कर टीसीपी)

सिस्टम.ServiceModel.AddressAlreadyInUseException: आईपी एंडपॉइंट 0.0.0.0:13000 पर पहले से ही एक श्रोता है। ऐसा तब हो सकता है जब कोई अन्य एप्लिकेशन पहले से ही इस एंडपॉइंट पर सुन रहा हो या यदि आपके पास एक ही आईपी एंडपॉइंट के साथ आपके सेवा होस्ट में एकाधिक सेवा अंतराल हैं लेकिन असंगत बाध्यकारी कॉन्फ़िगरेशन के साथ। ---> System.Net.Sockets.SocketException: प्रत्येक सॉकेट पते (प्रोटोकॉल/नेटवर्क पता/पोर्ट) का केवल एक ही उपयोग सामान्यतः को System.Net.Sockets.Socket.DoBind (एंडपॉइंट एंडपॉइंट स्नैपशॉट, सॉकेट एड्रेस सॉकेट एड्रेस) पर पर अनुमति देता है सिस्टम.Net.Sockets.Socket.Bind (EndPoint localEP) System.ServiceModel.Channels.SocketConnectionListener.Listen() --- आंतरिक अपवाद स्टैक ट्रेस का अंत --- System.ServiceModel.Channels.SocketConnectionListener.Listen पर() System.ServiceModel.Channels.TracingConnectionListener.Listen() पर System.ServiceModel.Channels.ConnectionAcceptor.StartAccepting() पर System.ServiceModel.Channels.ExclusiveTcpTransportManager.OnOpen() पर System.ServiceModel.Channels.Trans पर System.ServiceModel.Channels.TcpChannelListener`2.OnOpen (TimeSpan का समय समाप्त) पर portManager.Open (TransportChannelListener channelListener) System.ServiceModel.Channels.TransportManagerContainer.Open (SelectTransportManagersCallback selectTransportManagerCallback) पर System.ServiceModel.Channels.CommunicationObject.Open पर (TimeSpan का समय समाप्त) System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen (TimeSpan का समय समाप्त) पर System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan का समय समाप्त) पर System.ServiceModel.ServiceHostBase.OnOpen (TimeSpan का समय समाप्त) पर सिस्टम पर .ServiceModel.Channels.CommunicationObject.Open (टाइमस्पेन टाइमआउट) माइक्रोसॉफ्ट.Tools.SvcHost.ServiceHostHelper.OpenService (ServiceInfo जानकारी)परSystem.Net.Sockets.SocketException (0x80004005): प्रत्येक सॉकेट पते (प्रोटोकॉल/नेटवर्क पता/पोर्ट) का केवल एक ही उपयोग सामान्यतः को System.Net.Sockets.Socket.DoBind (एंडपॉइंट एंडपॉइंट स्नैपशॉट, सॉकेट एड्रेस सॉकेट एड्रेस) पर पर अनुमति देता है System.ServiceModel.Channels.SocketConnectionListener.Listen पर System.Net.Sockets.Socket.Bind (EndPoint localEP) ()

कैसे आप यह पता लगाने की जो प्रक्रिया है कि बंदरगाह (13000) को सुन रहा है? नेटस्टैट उस बंदरगाह पर कुछ भी नहीं दिखाता है।

यहाँ मेरी App.config है:

<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> 
    <services> 
     <service name="SomeTarget.SomeTargetService"> 
     <endpoint address="" binding="customBinding" bindingConfiguration="NetTcpBinding" 
      contract="SomeTarget.ISomeTargetService"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:13000" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 

    <bindings> 
     <customBinding> 
     <binding name="NetTcpBinding" sendTimeout="00:05:00" closeTimeout="00:00:30" openTimeout="00:00:30" receiveTimeout="00:05:00"> 
      <transactionFlow /> 
      <binaryMessageEncoding /> 
      <windowsStreamSecurity protectionLevel="None" /> 
      <tcpTransport maxBufferPoolSize="524288" 
         maxReceivedMessageSize="1024" 
         maxBufferSize="1024" > 
      <connectionPoolSettings groupName="default" leaseTimeout="00:05:00" 
            idleTimeout="00:02:00" maxOutboundConnectionsPerEndpoint="20" /> 
      </tcpTransport> 
     </binding> 
     </customBinding> 
    </bindings> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

</configuration> 
+1

फ़ायरवॉल मुद्दा? –

+0

फ़ायरवॉल आपको एक पता नहीं देना चाहिए पहले से ही अपवाद अपवाद। – Yaur

+0

कुछ भी नहीं मिला ... –

उत्तर

4

netsat -anb (व्यवस्थापक विशेषाधिकारों की आवश्यकता है) आपको बता देंगे क्या सभी बंदरगाहों पर सुन रहा है ... यह है कि अगर कुछ भी नहीं पता चलता कि आप शायद एक बग जहां बनाने का प्रयास कर रहे हैं एंडपॉइंट एक से अधिक बार।

+0

नहीं, इसने कोई परिणाम नहीं दिखाया –

+1

फिर सभी अपवादों को तोड़ने के लिए वीएस स्टूडियो सेट अप करें और जब आप उपयोग अपवाद में पता देखते हैं तो आदेश चलाएं। – Yaur

5

क्या आप सुनिश्चित हैं कि आपकी सेवा केवल 13000 पोर्ट को सुन रही है?

अपने प्रोग्राम को शुरू करने से पहले netstat -noa | find "13000" चलाएं कि किस प्रक्रिया में पोर्ट 13000 खुला है। दूर दाएं हाथ कॉलम में संख्या प्रक्रिया आईडी होगी।

फिर tasklist | find "<pid>" चलाएं पिछली कमांड से प्रक्रिया की आईडी कहां है। यह आपको बताएगा कि किस प्रक्रिया में 13000 खुले हैं।

+0

कुछ भी नहीं मिला ... –

2

क्या आपके पास .Net Framework 4.5 बीटा स्थापित है?4.5 के साथ मशीनों पर चलते समय मैंने वही त्रुटि देखी है जबकि यह 4.0 पर पूरी तरह से चल रहा है। लेकिन अगर मैं मेक्सिको एंडपॉइंट को हटा देता हूं तो यह फिर से काम करता है।

मेरे मामले में 4.5 परिवर्तनों में से कुछ ने एक ही त्रुटि संदेश का कारण बना दिया। शायद एक स्वचालित मैक्स एंडपॉइंट बनाया गया था या कुछ।

पोर्ट का उपयोग करके कोई अन्य ऐप नहीं देखा, नेटस्टैट ने कुछ भी नहीं दिखाया। तो यह किसी प्रकार का आत्म-अस्वीकार था ...

+0

अब मुझे यह समस्या है, क्या आपको कोई समाधान मिला? – Vasea

+0

केवल app.config में मेटाडेटा एंडपॉइंट कॉन्फ़िगरेशन को हटाने में मदद मिली। –

+0

मुझे .NET 4.5 में समस्या थी - समाधान के लिए इस धागे में मेरी पोस्ट देखें। – dugas

14

मुझे विजुअल स्टूडियो 2012 का मूल्यांकन करने के बाद एक ही समस्या है। ऐसा लगता है कि सामान्य सेवा और मेक्स सेवा उसी बंदरगाह को साझा नहीं कर सकती क्योंकि यह उसी कॉन्फ़िगरेशन फ़ाइल के साथ .NET 4.0 में होती थी (मुझे नहीं पता कि क्यों, एक कारण होना चाहिए)। संक्षेप में मेरे पास एक अलग असेंबली पर एक अलग असेंबली और डब्ल्यूपीएफ आवेदन पर मेरा सेवा ग्राहक संदर्भ है। मैं इस

<service name="X.XService.XService" behaviorConfiguration="myServiceBehavior"> 
      <endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IXService" contract="X.XService.IXService"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
      <endpoint address="net.tcp://localhost:9103/XService/mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="net.tcp://localhost:9102/XService" /> 
       </baseAddresses> 
      </host> 
     </service> 

के रूप में विभिन्न पोर्ट के साथ MEX प्रकाशित मेरी सेवा संदर्भ विधानसभा config

<endpoint address="net.tcp://localhost:9103/XService/mex" 
      binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IXService" 
      contract="XService.IXService" name="NetTcpBinding_IXService"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 

अंत में मेरे मुवक्किल एप्लिकेशन config

<endpoint address="net.tcp://localhost:9102/XService" binding="netTcpBinding" 
      bindingConfiguration="NetTcpBinding_IXService" contract="XService.IXService" 
      name="NetTcpBinding_IXService" behaviorConfiguration="endPointBehavior"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
+0

मेरे लिए काम किया। धन्यवाद – sura2k

24

मैं नेट 4.5 स्थापित करने के बाद इस मुद्दे का अनुभव किया और कर रहा हूँ अगर वे इसमें ठोकर खाए तो दूसरों की मदद करने के लिए यहां एक समाधान पोस्ट करना। @ बर्ककेक का जवाब ऊपर काम करता है (एक अलग बंदरगाह पर मेक्सिको को उजागर करता है), लेकिन मुझे उसी पोर्ट के माध्यम से दोनों एंडपॉइंट्स का पर्दाफाश करने की आवश्यकता थी।

मान लें कि आपके पास दो एंडपॉइंट हैं, एक netTcp बाइंडिंग का उपयोग कर रहा है और एक mexTcp बाइंडिंग का उपयोग कर रहा है। डिफ़ॉल्ट बाइंडिंग का उपयोग करते समय, कुछ डिफ़ॉल्टों को हार्ड कोडित मानों के बजाय OSEnvironmentHelper.ProcessorCount का उपयोग करके गणना की जाती है क्योंकि वे .NET 4.0 में थे।

मेरे मामले में, जब एक नामित netTcpBinding bindingConfiguration, मूल्य MaxConnections संपत्ति के लिए आपूर्ति का उपयोग कर 20 NetTcpBinding पर MaxConnections गुण को सेट भी सेट यह TcpTransportBindingElement के MaxPendingConnections संपत्ति और उसी मूल्य का TcpTransport के ConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint संपत्ति है था।

जब एक नामित netTcpBinding bindingConfiguration का उपयोग नहीं है, और केवल डिफ़ॉल्ट का उपयोग कर, MaxPendingConnections संपत्ति निम्नलिखित कलन विधि का उपयोग द्वारा गणना की गई:

return (12 * OSEnvironmentHelper.ProcessorCount); 

mexTcpBinding के परिवहन की भी गणना की यह MaxPendingConnections संपत्ति ऊपर कलन विधि का उपयोग है, तो जब न तो नामित बाध्यकारी कॉन्फ़िगरेशन का उपयोग कर रहा है तो डिफ़ॉल्ट मान मेल खाते हैं और कोई समस्या नहीं है।

एक नामित netTcpBinding bindingConfiguration का उपयोग कर, परिवहन के MaxPendingConnections 20 था, और mexTcpBinding के परिवहन के MaxPendingConnections थी, मेरे मशीन पर, इन दो समाप्ति बिंदुओं के बीच MaxPendingConnections ही बंदरगाह साझा करने के लिए मूल्यों में 96 अंतर असंगत है।

मुझे यह भी पता चला कि यह समस्या सुनोबैकलॉग सेट के साथ भी हुई है। (मैं सभी संभव परस्पर विरोधी मूल्यों कि मौजूद हो सकता का पता नहीं है।)

समस्या को हल करने, आप एक कस्टम MEX कि netTcpBinding के लिए नामित किया गया bindingConfiguration मैच के लिए बाध्यकारी बना सकते हैं।उदाहरण नीचे:

<endpoint binding="netTcpBinding" bindingConfiguration="TestNetTcpBinding" 
     contract="YourContract" /> 
<endpoint address="mex" binding="customBinding" bindingConfiguration="TestMexBinding" 
     contract="IMetadataExchange" /> 

<bindings> 
<customBinding> 
<binding name="TestMexBinding"> 
<tcpTransport maxPendingConnections="20" listenBacklog="20">     
<connectionPoolSettings groupName="default" maxOutboundConnectionsPerEndpoint="20" /> 
</tcpTransport> 
</binding> 
</customBinding> 
<netTcpBinding> 
<binding name="TestNetTcpBinding" listenBacklog="20" maxConnections="20"/> 
</netTcpBinding> 
</bindings> 

या, आप किसी भी मान गणना कर रहे हैं कि (MaxConnections और listenBacklog की तरह) निर्दिष्ट नहीं कर सकते और चूक स्वीकार (ध्यान दें कि MaxOutboundConnectionsPerEndpoint अभी भी 10 का डिफ़ॉल्ट मान के रूप में यह गणना नहीं है बनी रहेगी एक ही तरीका है कि MaxPendingConnections संपत्ति है):

<binding name="TestNetTcpBinding" ...someOtherProperties except listenBacklog and maxConnections/> 

नोट: यहां मुद्दा यह वर्णित है: http://msdn.microsoft.com/en-us/library/aa702636.aspx, लेकिन केवल समाधान दिया एक अलग बंदरगाह पर MEX बेनकाब करने के लिए है। नीचे परावर्तक में कुछ स्क्रीनशॉट कि .net 4.0 और 4.5 के बीच अंतर दिखाने जब MaxPendingConnections चूक की गणना कर रहे हैं:

.Net 4.0 ConnectionOrientedTransportBindingElement Calculating default MaxPendingConnections

.Net 4.5 ConnectionOrientedTransportBindingElement Calculating default MaxPendingConnections

.Net 4.5 GetMaxPendingConnections method

+5

आप एक जीवन बचाओ हैं! इस पर 2 दिन बिताए लेकिन इसे काम पर नहीं मिला। बस 'बाध्यकारी' टैग से 'listenBacklog' और 'maxConnections' हटा दिया गया है और अभी यह ठीक काम कर रहा है! धन्यवाद एक मिल! – 1nfected

+1

इससे मुझे भी मदद मिली, धन्यवाद !!! – Francisco

+1

मेरा दिन बचाया !!! – Gandarez

-1

खैर ... मेरा काम किया जब मैं बदल नेट फ्रेमवर्क 4 क्लाइंट प्रोफाइल के लिए लक्ष्य ढांचा।

इसे आज़माएं ... उम्मीद है कि यह आपके लिए भी काम करेगा!