2009-08-19 16 views
7

मुझे नेटटीसीपी बाइंडिंग के साथ कठिन समय है।नेटसीसीपी बाइंडिंग के साथ डब्ल्यूसीएफ सेवा लाइब्रेरी

System.InvalidOperationException: Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http]. 
    at System.ServiceModel.ServiceHostBase.MakeAbsoluteUri(Uri relativeOrAbsoluteUri, Binding binding, UriSchemeKeyedCollection baseAddresses) 
    at System.ServiceModel.Description.ConfigLoader.LoadServiceDescription(ServiceHostBase host, ServiceDescription description, ServiceElement serviceElement, Action`1 addBaseAddress) 
    at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, ServiceElement serviceSection) 
    at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, String configurationName) 
    at System.ServiceModel.ServiceHostBase.ApplyConfiguration() 
    at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses) 
    at System.ServiceModel.ServiceHost.InitializeDescription(Type serviceType, UriSchemeKeyedCollection baseAddresses) 
    at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses) 
    at Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(Type type, ServiceKind kind) 
    at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info) 

जब मैं WCFSvcHost का उपयोग कर डिफ़ॉल्ट रूप से एप्लिकेशन को चलाने मैं इस हो रही है:

जब मैं अपने WCFservice चलाने के लिए, मैं इस मिलता है। कोई अतिरिक्त कोड नहीं है। बस किसी भी नई डब्ल्यूसीएफ सेवा का डिफ़ॉल्ट कोड। मैं बस इतना करना चाहता था कि टीसीपी को बाध्यकारी बदल दें।

मैं इस समस्या को कैसे हल करूं?

संपादित करें: // आधार पता: यहाँ मेरी WCF के App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
     <binding name="tcpBinding" transferMode="Streamed" portSharingEnabled="false"> 
      <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/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="WcfServiceLibrary1.Service1Behavior"> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 
+0

आप अनुप्रयोग/web.config से अपने WCF विन्यास पोस्ट कर सकते हैं? – jrista

+0

अगर यह इसे जोड़ने के बाद – Josh

+0

पोस्ट करता है तो भी यह दिखाई नहीं दे रहा है, कोड बटन दबाएं (प्रत्येक पंक्ति 4 रिक्त स्थान इंडेंट करने और xml की व्याख्या नहीं करने के लिए) – Brian

उत्तर

7

इस खंड

<host>   
    <baseAddresses>    
    <add baseAddress="http://localhost:8731/.../" /> 
    </baseAddresses>   
</host> 

में एक net.tcp जोड़ने है।

<host> 
    <baseAddresses> 
    <add baseAddress="http://localhost:8732/" /> 
    <add baseAddress="net.tcp://localhost"/> 
    </baseAddresses> 
</host> 
+0

जोड़ना जो काम नहीं करता है। यह कहता है कि बंदरगाह उपयोग में है। क्या आप कृपया मेरे लिए उस लाइन को पूरा कर सकते हैं? धन्यवाद – Josh

+0

सिस्टम.ServiceModel.AddressAlreadyInUseException: TransportManager NetTcpPortSharing सेवा का उपयोग कर आपूर्ति किए गए यूआरआई पर सुनने में विफल रहा: सेवा सुनने में विफल रही। – Josh

+0

एक अलग पोर्ट का उपयोग करना सुनिश्चित करें (उदा। यदि http 8731 पर है, तो 8732: नेट का उपयोग करें।tcp: // localhost: 8732/yadda/blah /) – Brian

18

मैं इस मुद्दे अब आप ठीक करने के बाद से यकीन है, लेकिन यह वास्तव में baseAddresses है जो सभी bullentin बोर्डों आप का नेतृत्व के साथ कुछ नहीं है। मुझे http://social.msdn.microsoft.com/forums/en-US/wcf/thread/c9f8d99d-89ee-4573-8528-a21b047bad11 पर उत्तर मिला। मान लें कि आप आईआईएस 7.x का उपयोग कर रहे हैं: आईआईएस में वर्चुअल निर्देशिका/एप्लिकेशन पर राइट क्लिक करें, एप्लिकेशन प्रबंधित करें -> उन्नत सेटिंग्स का चयन करें। 'सक्षम प्रोटोकॉल' अनुभाग में net.tcp जोड़ें, उदा .: http, net.tcp। यह आवश्यक है भले ही आपने साइट प्रोटोकॉल पर पहले से ही इस प्रोटोकॉल को जोड़ा हो।

+0

मुझे लगता है कि आपके पास बाइंडिंग में कोई भी सुरक्षा मोड सेट नहीं है , जो मैंने पहली बार उपयोग करना शुरू किया, हालांकि, मैं जो कर रहा हूं उसके लिए मुझे प्रमाणित कॉलर को जानने की आवश्यकता है। मैं आमतौर पर इसे ऑपरेशनकॉन्टेक्स्ट से प्राप्त करता हूं। वर्तमान। सेवा सुरक्षा सुरक्षा। कॉपीराइट Identity.Name (http://www.leastprivilege.com/HostingWCFServicesInASPNETTheSurvivalGuide.aspx)। तो इसके बजाय मैंने http://msdn.microsoft.com/en-us/library/ms733089.aspx (विंडोज प्रमाणीकरण के साथ परिवहन सुरक्षा) के अनुसार * दोनों * क्लाइंट और सर्वर पर विंडोज़ को बाइंडिंग बदल दी। – Helder

+0

आईआईएस 6 में यह कैसे करें? कोई विचार? – NLV

+0

धन्यवाद ... मैं इस कॉन्फ़िगरेशन फ़ाइल पर लगभग 2 घंटे के लिए देख रहा हूं और मुझे पता नहीं चल रहा था कि क्या हो रहा था ... – SoftwareSavant

1
  1. Net.Tcp पोर्ट शेयरिंग सेवा सत्यापित करें मशीन
  2. विन्यास netTcpBinding portSharingEnabled विशेषता सच है सत्यापित करें पर शुरू कर दिया है। (डब्ल्यूसीएफ 4 में आपको बाध्यकारी तत्व पर एक नाम प्रदान करने की आवश्यकता नहीं है यदि आप यह बाध्यकारी विनिर्देश net.tcp के लिए डिफ़ॉल्ट होना चाहते हैं)
2

अपनी आईआईएस साइट में net.tcp बाध्यकारी कॉन्फ़िगर करें और सक्षम प्रोटोकॉल सेट करें "http: net.tcp उन्नत सेटिंग का उपयोग करके"।

3

काम करना चाहिए आप पोर्ट साझा कर सकते हैं, यह बहुत कठिन नहीं है।

आईआईएस में सक्षम प्रोटोकॉल का चयन करते समय सुनिश्चित करें (साइट पर राइट क्लिक करें -> वेब साइट प्रबंधित करें -> उन्नत सेटिंग्स) कि आप स्पेस का उपयोग नहीं करते हैं। यदि आपके पास "http, net.tcp" के बजाय "http, net.tcp" है, तो यह काम नहीं करेगा, और इसके बजाय आपको यह सटीक त्रुटि देगी।

अधिक यहाँ जानकारी: http://www.weeksofprogramming.com/post/Could-not-find-a-base-address-Check-for-spaces-in-IIS7.aspx

संबंधित मुद्दे