2010-01-21 12 views
23

डब्लूसीएफ प्रोजेक्ट बनाते समय, डिफ़ॉल्ट सदस्य फाइलें केवल सामान्य सीएसआरपी फाइल फाइलें हैं, बजाय एसवीसी फाइलों की बजाय। क्या डब्ल्यूसीएफ परियोजना के साथ एसवीसी फाइलों की आवश्यकता है? उनका उपयोग कब किया जाना चाहिए?एसवीसी फाइलों और डब्ल्यूसीएफ परियोजनाओं के बीच संबंध?

उत्तर

32

.svc फ़ाइलों का उपयोग तब किया जाता है जब आप आईआईएस में अपनी डब्ल्यूसीएफ सेवा होस्ट करते हैं।

माइक्रोसॉफ्ट के दस्तावेज़ here और here देखें।

आईआईएस के भीतर एक मॉड्यूल है जो .svc फ़ाइल को संभालता है। वास्तव में, यह इस मामले में ASPNET ISAPI मॉड्यूल है, जो हैंडलर कारखाने प्रकार है कि ASPNET के लिए कॉन्फ़िगर किया गया है में से एक को .svc फ़ाइल के लिए अनुरोध को वापस ले हाथ है,

System.ServiceModel.Activation.HttpHandler, System.ServiceModel, संस्करण = 3.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089


आप आईआईएस के अलावा कुछ में अपने WCF सेवा होस्ट कर रहे हैं, तो आप .svc फ़ाइल जरूरत नहीं है।

+0

मैं अपनी सेवा को और कैसे होस्ट कर सकता हूं? –

+3

जो तीन दिमाग में आते हैं वे हैं: आपके द्वारा लिखे गए एक कस्टम होस्ट, एक तृतीय-पक्ष प्रदान किया गया होस्ट जो आप खरीदते हैं, या एक Windows सेवा। http://msdn.microsoft.com/en-us/library/bb332338.aspx – Cheeso

15

एक पुराने सवाल का प्रकार, लेकिन Googler के लिए ..

वास्तव में, यह एक WCF परियोजना बना सकते हैं और एक .svc फ़ाइल का उपयोग किए बिना IIS में यह की मेजबानी के लिए संभव है।

इसके बजाय कोड-पीछे अपने एसवीसी में अपने DataContract को लागू करने के लिए, आप इसे एक सामान्य .cs फ़ाइल में लागू (यानी कोई कोड के पीछे।)

तो, आप इस प्रकार का MyService.cs होगा:

public class MyService: IMyService //IMyService defines the contract 
{ 
    [WebGet(UriTemplate = "resource/{externalResourceId}")] 
    public Resource GetResource(string externalResourceId) 
    { 
     int resourceId = 0; 
     if (!Int32.TryParse(externalResourceId, out resourceId) || externalResourceId == 0) // No ID or 0 provided 
     { 
      WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.NotFound; 
      return null; 
     } 
     var resource = GetResource(resourceId); 
     return resource; 
    } 
} 

तब यह संभव है कि यह संभव हो। अब आप कोड-पीछे के साथ एक Global.asax बनाने के लिए जहां एक Application_Start घटना हुक जोड़ने की जरूरत है: इस बारे में

public class Global : HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     // Edit the base address of MyService by replacing the "MyService" string below 
     RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), typeof(MyService))); 
    } 
} 

एक अच्छी बात यह है कि आप अपने संसाधन यूआरएल में .svc संभाल करने की जरूरत नहीं है कि है। एक बहुत अच्छी बात यह नहीं है कि अब आपके पास ग्लोबल.एक्सएक्स फ़ाइल है।

18

आप .net 4.0 का उपयोग कर या बाद में कर रहे हैं, तो आप अब .svc config के माध्यम से निम्नलिखित के साथ "अनुकरण" कर सकते हैं:

<system.serviceModel> 
    <!-- bindings, endpoints, behaviors --> 
    <serviceHostingEnvironment > 
     <serviceActivations> 
     <add relativeAddress="MyService.svc" service="MyAssembly.MyService"/> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

तो फिर तुम एक शारीरिक .svc फ़ाइल है और न ही एक वैश्विक की जरूरत नहीं है .asax

+1

इस मामले में .svc और global.asax फ़ाइलों को "बहिष्कृत" के रूप में देखा जा सकता है? –

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