2010-05-11 20 views
7

में एंडपॉइंट्स स्वयं की मेजबानी की सेवा करने के पहले कुछ प्रयास।डब्ल्यूसीएफ सेल्फ होस्ट सर्विस - सी #

  • सभी के बारे में अंतिम बिंदु प्रत्येक आधार पते के लिए स्वचालित रूप से बनाया जा रहा है प्रलेखन वार्ता अगर वे एक config में नहीं मिलते हैं: कुछ बनाने के लिए जो एक क्वेरी स्ट्रिंग को स्वीकार करेंगे और कुछ पाठ लौट लेकिन कुछ मुद्दों है की कोशिश कर रहा फ़ाइल। यह मेरे लिए मामला प्रतीत नहीं होता है, मुझे "सेवा शून्य अनुप्रयोग अंतराल ..." अपवाद मिलता है।

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.ServiceModel; 
    using System.ServiceModel.Description; 
    
    namespace TestService 
    { 
        [ServiceContract] 
        public interface IHelloWorldService 
        { 
         [OperationContract] 
         string SayHello(string name); 
        } 
    
        public class HelloWorldService : IHelloWorldService 
        { 
         public string SayHello(string name) 
         { 
          return string.Format("Hello, {0}", name); 
         } 
        } 
    
        class Program 
        { 
         static void Main(string[] args) 
         { 
          string baseaddr = "http://localhost:8080/HelloWorldService/"; 
          Uri baseAddress = new Uri(baseaddr); 
    
          // Create the ServiceHost. 
          using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress)) 
          { 
           // Enable metadata publishing. 
           ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
           smb.HttpGetEnabled = true; 
           smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
           host.Description.Behaviors.Add(smb); 
    
           host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr); 
           host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr + "SayHello"); 
    
           //for some reason a default endpoint does not get created here 
           host.Open(); 
    
           Console.WriteLine("The service is ready at {0}", baseAddress); 
           Console.WriteLine("Press <Enter> to stop the service."); 
           Console.ReadLine(); 
    
           // Close the ServiceHost. 
           host.Close(); 
          } 
         } 
        } 
    } 
    
  • जब अनुरोध मैं इस SayHello (स्ट्रिंग नाम) में नाम का मान देने के लिए स्थापित करने के बारे जाना होगा thusly: स्थानीय होस्ट: 8080/HelloWorldService/मैन्युअल रूप से नीचे के रूप में एक आधार के अंत बिंदु को निर्दिष्ट इसके समाधान के लिए लगता है SayHello? नाम = केली

मैं चलाने से पहले चलने के लिए कोशिश कर रहा हूँ, लेकिन यह सिर्फ रेंगने की तरह लगता है ...

+0

क्या आप .NET 3.5 या .NET 4 का उपयोग कर रहे हैं ?? "बेस एड्रेस के लिए डिफ़ॉल्ट एंडपॉइंट्स बनाएं" सुविधा .NET 4 में एक नई बात है - 3.5 –

उत्तर

10

डिफ़ॉल्ट अंतिम बिंदुओं के बारे में अपने प्रश्न नहीं जोड़ा जा रहा है के लिए: सभी के

  • पहले, कि एक WCF 4 विशेषता है - यह .NET 4 केवल
  • अगले, डिफ़ॉल्ट पर काम करेंगे एंडपॉइंट्स केवल आपके सेवा होस्ट में जोड़े जाते हैं यदि आपके पास कॉन्फ़िगरेशन में परिभाषित कोई स्पष्ट अंतराल नहीं है, और यदि आप कोड में एंडपॉइंट्स को स्वयं नहीं जोड़ते हैं! कोड में उन दो समाप्ति बिंदुओं को जोड़कर, आप प्रभारी ले जा रहे हैं और WCF 4 क्रम अपने config

What's new in WCF 4 for developers के बारे में अधिक जानकारी के लिए इस MSDN लाइब्रेरी लेख चेक आउट के साथ बेला नहीं होंगे। यह अन्य चीजों के साथ, डिफॉल्ट एंडपॉइंट्स का उपयोग कैसे करें - आप मूल रूप से अपनी सेवा के लिए आधार पता परिभाषित करते हैं और सर्विसहोस्ट खोलते हैं - बस इतना ही!

string baseaddr = "http://localhost:8080/HelloWorldService/"; 
Uri baseAddress = new Uri(baseaddr); 

// Create the ServiceHost. 
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress)) 
{ 
    //for some reason a default endpoint does not get created here 
    host.Open(); 

    // here, you should now have one endpoint for each contract and binding 
} 

यदि आप ऐसा करना चाहते हैं तो आप डिफ़ॉल्ट रूप से डिफ़ॉल्ट अंतराल जोड़ सकते हैं। तो अगर आप अपने खुद के अंतिम बिंदु जोड़ने की जरूरत है, लेकिन फिर आप सिस्टम डिफ़ॉल्ट अंतिम बिंदुओं को जोड़ना चाहते हैं, तो आप उपयोग कर सकते हैं:

// define and add your own endpoints here 

// Create the ServiceHost. 
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress)) 
{ 
    // add all the system default endpoints to your host 
    host.AddDefaultEndpoints(); 

    //for some reason a default endpoint does not get created here 
    host.Open(); 

    // here, you should now have your own endpoints, plus 
    // one endpoint for each contract and binding 
} 

मैं भी fonud this blog post here काफी रोशन होने के लिए - क्रिस्टोफर के ब्लॉग अच्छा है और बहुत उपयोगी WCF से भरा हुआ है पदों - अत्यधिक अनुशंसित।

+0

धन्यवाद मार्क, मैं निश्चित रूप से उन पुस्तकों की जांच करूँगा। मैं अभी तक .NET4 का उपयोग करने में सक्षम नहीं होने की दुर्भाग्यपूर्ण स्थिति में हूं, लेकिन क्रिस ब्लॉग के लिंक के लिए भी धन्यवाद, ऐसा लगता है कि मेरे पास कुछ अच्छी पढ़ाई है। मैं इसके बजाय WebServiceHost का उपयोग कर रहा हूं क्योंकि मुझे वास्तव में करने की ज़रूरत है, एक HTTP GET अनुरोध के माध्यम से अनुरोध की गई कार्रवाई करें और डेटा के कुछ छोटे माउंट को वापस करें। – Kyle

0

आईआईएस अपने वेब सेवा को होस्ट करता है, तो आप दोस्ताना 'आपने बनाया है मिल एक वेब सेवा "पृष्ठ, कुछ और नहीं मानना ​​गलत है। आप कुछ त्वरित डब्ल्यूसीएफ ट्यूटोरियल आज़मा सकते हैं, जैसा कि बस्टैमेन्ट लर्निंग डब्ल्यूसीएफ बुक में पाया जा सकता है, वे तेजी से जाते हैं और बहुत कुछ समझाते हैं।

संपादित करें: Here's an MSDN page जो आपके अनुरोधित सेवा कॉल, अच्छा उदाहरण से क्वेरी स्ट्रिंग पैरामीटर प्राप्त करने का एक तरीका दिखाता है। यह [वेबगेट] विशेषता का उपयोग दिखाता है। यदि आप इसका उपयोग नहीं करना चाहते थे, तो आप आने वाले अनुरोध के आंतरिक भाग प्राप्त करने के लिए OperationContext का उपयोग करने का प्रयास कर सकते हैं।

+0

में काम नहीं करेगी धन्यवाद, मैं सभ्य किताबों की तलाश में हूं, मैं इसे देख लूंगा। – Kyle

3

पुस्तकों के लिए के रूप में - यहाँ मेरी सिफारिश है: पुस्तक मैं हमेशा उठना की सलाह देते हैं और WCF में चल जल्दी से Learning WCF मिशेल लेरोक्स बस्टामेंटे कर रहा है। वह सभी आवश्यक विषयों को कवर करती है, और एक बहुत समझने योग्य और पहुंचने योग्य तरीके से। यह आपको सबकुछ सिखाएगा - मूल बातें, मध्यवर्ती विषयों, सुरक्षा, लेनदेन नियंत्रण और आगे - आपको उच्च गुणवत्ता, उपयोगी डब्ल्यूसीएफ सेवाओं को लिखने के लिए जानना होगा। WCF पर

Learning WCF http://ecx.images-amazon.com/images/I/41wYa%2BNiPML._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

अधिक उन्नत विषयों और में गहराई से अधिक नज़र युवल लोवी द्वारा Programming WCF Services में शामिल किया जाएगा। वह वास्तव में सभी तकनीकी विवरणों और विषयों में डाइव करता है और डब्ल्यूसीएफ प्रोग्रामिंग के लिए "बाइबल" प्रस्तुत करता है।

Programming WCF Services http://ecx.images-amazon.com/images/I/41H2u13a9bL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg