2010-01-06 9 views
10

मैं दो आधार पतों मेरी WCF सेवा कॉन्फ़िग फ़ाइल में परिभाषित किया गया है:WCF सेवा बेस पता Http और netTcp

<?xml version="1.0" encoding="utf-8" ?> 
<configuration>  
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" switchValue="Warning, ActivityTracing" 
     propagateActivity="true"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="ServiceModelTraceListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="C:\WCF Service Logs\app_tracelog.svclog" 
     type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     name="ServiceModelTraceListener" traceOutputOptions="DateTime, Timestamp"> 
     <filter type="" /> 
     </add> 
    </sharedListeners> 
    </system.diagnostics> 
    <system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
     <binding name="netTcp" maxBufferPoolSize="50000000" maxReceivedMessageSize="50000000"> 
      <readerQuotas maxDepth="500" maxStringContentLength="50000000" maxArrayLength="50000000" maxBytesPerRead="50000000" maxNameTableCharCount="50000000" /> 
      <security mode="None"></security> 
     </binding> 
     </netTcpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior" 
     name="ReportingComponentLibrary.TemplateReportService"> 
     <endpoint address="TemplateService" binding="netTcpBinding" bindingConfiguration="netTcp" 
      contract="ReportingComponentLibrary.ITemplateService"></endpoint> 
     <endpoint address="ReportService" binding="netTcpBinding" bindingConfiguration="netTcp" 
      contract="ReportingComponentLibrary.IReportService"/> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8001/TemplateReportService" /> 
      <add baseAddress="http://localhost:8181/TemplateReportService" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ReportingComponentLibrary.TemplateServiceBehavior"> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

और हालांकि मैं endpoint netTcpBinding के रूप में बाध्यकारी निर्धारित किया है,
मैं सिर्फ अपने WCF का उपयोग करने में सक्षम हूँ आधार पते के साथ सेवा:

http://localhost:8181/TemplateReportService 

और नहीं के साथ

net.tcp://localhost:8001/TemplateReportService 

मैं नेटटीसीपी पते के साथ अपनी सेवा कैसे पहुंच सकता हूं?

उत्तर

15

आप एक Net.TCP आधार पते परिभाषित होने के लिए:

net.tcp://localhost:8001/TemplateReportService 

आपका नेट टीसीपी के साथ अंतिम बिंदु इस प्रकार हैं:

<endpoint address="TemplateService" 

और

<endpoint address="ReportService" 

तो उनकी पूरी सेवा का पता होगा <endpoint> तत्व पर परिभाषित "netTcp आधार पता" + "सापेक्ष पता" - यह देता है:

net.tcp://localhost:8001/TemplateReportService/TemplateService 

और

net.tcp://localhost:8001/TemplateReportService/ReportService 

सम्मान से।

आप उन्हें इन पतों पर उपयोग कर सकते हैं ??

इसके अलावा - आप एक "MEX" (मेटाडाटा विनिमय) HTTP प्रोटोकॉल के लिए endpoint परिभाषित - कि जब आप HTTP पता करने के लिए नेविगेट कारण है कि आप कुछ देख सकता है। लेकिन आपने NetTcp के लिए एक एमएक्स एंडपॉइंट निर्दिष्ट नहीं किया है।

+0

आप मार्क धन्यवाद, तो इसका मतलब यह है कि भले ही मैं दोनों अंतिमबिंदुओं के लिए netTcpBinding निर्धारित किया है, लेकिन अगर मैं है मेटाडाटा HttpBinding के लिए अवगत कराया उसके HTTP पते पर सेवा सामने आ जाएगी। – iniki

+0

यह http पते पर सेवा के लिए मेटाडेटा का खुलासा करेगा - जिसका अर्थ है कि आप केवल अपने ब्राउज़र के साथ नेविगेट कर सकते हैं। नेटटीसीपी एंडपॉइंट्स सक्रिय हैं और उपयोग करने के लिए तैयार हैं - आप वहां जाकर ब्राउज़र में कोई भी संकेत नहीं प्राप्त कर सकते हैं .... –

1
कारण स्पष्ट पर्याप्त जवाब नहीं होने के लिए

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

  1. कॉन्फ़िगर WCF शुद्ध टीसीपी endpoint के लिए एक कॉन्फ़िग फ़ाइल शुद्ध टीसीपी

1. कॉन्फ़िगर एक कॉन्फ़िग फ़ाइल के लिए

  • कॉन्फ़िगर आईआईएस:

    इस लक्ष्य को हासिल करने के लिए हम दो कदम की जरूरत है WCF शुद्ध टीसीपी endpoint के लिए

    नीचे एक ठेठ कॉन्फ़िग फ़ाइल है, ध्यान दें कि के लिए मूल्य "जोड़ने ress ", सेवा के अंत बिंदु में, खाली है।

    भी ध्यान दें कि नोड "मेजबान" अंदर इम 2 आधार पते, http और शुद्ध टीसीपी प्रोटोकॉल जोड़ने respectly। चूंकि सेवा आईआईएस में होस्ट की जाती है, इसलिए आपको एंडपॉइंट में पूर्ण पते के बारे में चिंता करने की ज़रूरत नहीं है, आईआईएस नोड "मेजबान" के अंदर परिभाषित आधार पते के आधार पर इसका आंकलन करता है।

    <system.serviceModel> 
        <behaviors> 
         <serviceBehaviors> 
         <behavior name="behaviorConfig"> 
          <!--your custom behavior here--> 
         </behavior> 
         </serviceBehaviors> 
        </behaviors> 
        <bindings> 
         <basicHttpBinding> 
         <binding name="basicHttpBindingConfig"/> 
         </basicHttpBinding> 
         <netTcpBinding> 
         <!--our netTcpBinding binding--> 
         <binding name="netTcpBindingConfig"/> 
         </netTcpBinding> 
        </bindings> 
        <services> 
         <service name="MyNamespace.ServiceLayer.MyService" behaviorConfiguration="behaviorConfig"> 
         <!--Endpoint for basicHttpBinding--> 
         <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.ServiceLayer.IMyService" bindingConfiguration="basicHttpBindingConfig"/> 
         <!--Endpoint for netTcpBindingConfig--> 
         <endpoint address="" binding="netTcpBinding" contract="MyNamespace.ServiceLayer.IMyService" bindingConfiguration="netTcpBindingConfig"> 
         <identity> 
          <dns value="localhost" /> 
         </identity> 
        </endpoint> 
        <!--Make sure you add a mexTcpBinding, without it you will receive an error when trying to resolve service's reference--> 
        <endpoint address="mex" 
           binding="mexTcpBinding" 
           bindingConfiguration="" 
           name="MyServiceMexTcpBidingEndpoint" 
           contract="IMetadataExchange" /> 
         <host> 
          <!--This part is important for IIS to determine the base addresses for your endpoints--> 
          <baseAddresses>    
           <!--Notice that baseAddress for net tcp is preceded by net.tcp --> 
           <!--then ://localhost:{port} --> 
           <!--Also the same for http, so you can figure out how to define a baseAddress for https--> 
           <add baseAddress="net.tcp://localhost:8090"/> 
           <add baseAddress="http://localhost:8080"/> 
          </baseAddresses> 
         </host> 
         </service> 
        </services>  
        </system.serviceModel> 
    

    2. कॉन्फ़िगर आईआईएस शुद्ध टीसीपी

    आईआईएस में के लिए, net.tcp प्रोटोकॉल सक्षम (बाद में नए विन्यास आपकी सेवा अद्यतन)। ये चरण हैं:

    • ओपन आईआईएस।
    • साइटों की सूची में, अपने "साइट" जहाँ आपके WCF होस्ट किया गया है लगता है, फिर उस पर
    • फिर राइट-क्लिक करें, "बाइंडिंग संपादित करें",
    • बाइंडिंग की एक सूची दिखाई देता है (सुनिश्चित हो कि net.tcp कोई है), तो आपके net.tcp विन्यास, जोड़ने
    • क्लिक "जोड़ें",
    • प्रकार net.tcp (या एक ड्रॉपडाउन सूची से net.tcp चयन अगर यह उपलब्ध हो)
    • सूचना प्रकार बंधन में : 80 9 0: * (सुनिश्चित करें कि यह मेजबान के समान पोर्ट है> मूल पता जिसे आपने जोड़ा था)
    • फिर बंद करें यह विंडो और अपनी सेवा को पुनरारंभ करें।

    यह करने के बाद, वहाँ भी एक और विन्यास है:

    • ओपन आईआईएस
    • साइटों सूची में, अपने "साइट" जहाँ आपके WCF होस्ट किया गया है लगता है, तो यह
    • पर राइट क्लिक करें
    • क्लिक करें "उन्नत सेटिंग"
    • का चयन सक्षम प्रोटोकॉल
    • सेट http, net.tcp के लिए मूल्य (यकीन है कि वहाँ http, net.tcp के बीच रिक्त स्थान नहीं हैं कि हो सकता है)
    • आपकी सेवा पुन: प्रारंभ करें

    इसके अलावा, अगर आप अभी भी सेवा का उपयोग नहीं कर सकते, आप अपने सर्वर में अपने Net.tcp श्रोता एडाप्टर शुरू करने की आवश्यकता हो सकती है। इसे प्राप्त करने के लिए, कृपया अगले चरणों का पालन करें:

    • सर्वर प्रबंधक पर जाएं -> कॉन्फ़िगरेशन -> सेवाएं, नेट टीसीपी श्रोता एडाप्टर और नेट टीसीपी पोर्ट शेयरिंग सेवा को रोकें। फिर उन्हें फिर से शुरू करें।

    आईआईएस में नेटटीसीपी डब्ल्यूसीएफ एंडपॉइंट सक्षम करने के लिए आपको बस इतना करना है।

    उम्मीद है कि इससे मदद मिलती है।

    सादर

  • +0

    http://stackoverflow.com/questions/18575496 में मेरे उत्तर के बारे में आपके संपादन को समझ में नहीं आया/नहीं-खोज-एक-आधार-पता-वह-मैचों-योजना-नेट-टीसीपी-के-द-एंडपॉइंट-के साथ/18575819 # 18575819 उन्हें प्रचारित करने से पहले अपने राज्यों की जांच करें। आईआईएस 6 नेट टीसीपी का समर्थन नहीं करता !!! Http://msdn.microsoft.com/en-us/library/ms730158.aspx देखें – Alex

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