2010-07-20 8 views
12

मैं आईआईएस 7.5 पर डब्ल्यूसीएफ 4 का उपयोग कर रहा हूं और अपनी सभी रीस्टफुल सेवाओं के यूआरएल से डिफ़ॉल्ट। एसवीसी एक्सटेंशन को खत्म करना चाहता हूं। मैंने यूआरएल रीवाइट मॉड्यूल और आईएचटीपी मॉड्यूल का उपयोग करके दस्तावेज किए गए दृष्टिकोण देखे हैं लेकिन मैं उन दृष्टिकोणों को नहीं लेना चाहता हूं।रूट्स का उपयोग कर डब्ल्यूसीएफ 4 सेवा के यूआरएल में .svc को हटा दें?

मैं एएसपी.नेट एमवीसी में पेश किए गए रूट्स की अवधारणा से बेहद परिचित हूं और जैसा कि मैं समझता हूं कि अब वे नेट 4 में एमवीसी से सिस्टम.Web.Routing के रूप में बाहर निकले हैं। लेकिन यह प्रतीत होता है कि दस्तावेज़ों को देखने में मुझे अपनी परियोजना में ग्लोबल.एक्सएक्स फ़ाइल जोड़ने की ज़रूरत है, जिसे मैं वास्तव में उत्सुक नहीं हूं। क्या इसे संभालने का कोई और तरीका है?

मैंने कॉन्फ़िगरेशन-आधारित सक्रियण सुविधा भी देखी है, लेकिन यह केवल .svc फ़ाइल को खत्म करने के लिए प्रतीत होता है, लेकिन फिर भी मुझे अपनी सेवा के यूआरएल में .svc का उपयोग करने की आवश्यकता है।

क्या कोई मेरे यूआरएल में एसएससी की आवश्यकता नहीं के लिए यहां मेरे विकल्पों को सारांशित कर सकता है?

उत्तर

9

निश्चित रूप से, कोई समस्या नहीं: सबसे पहले, A Developer's Introduction to Windows Communication Foundation 4 में नई डब्ल्यूसीएफ 4 सुविधाओं के बारे में सब कुछ पढ़ें।

जो आप खोज रहे हैं उसे फ़ाइल-कम सेवा सक्रियण कहा जाता है। अब इस config अनुभाग में

<serviceHostingEnvironment> 
    <serviceActivations> 
     <add factory="System.ServiceModel.Activation.ServiceHostFactory" 
      relativeAddress="/YourService" 
      service="SomeNamespace.YourService"/> 
    </serviceActivations> 
</serviceHostingEnvironment> 

मूल रूप से, सभी जानकारी * .svc फ़ाइल में होगा (पथ, सेवा को कॉल करने के लिए) है: यह आपके <system.serviceModel> में नई सेटिंग है कि कुछ इस तरह दिखता है।

अब आप

http://yourserver/virtualdirectory/YourService 

पर इस सेवा को कॉल करने में सक्षम होना चाहिए रहे हों - * .svc, कोई गंदा यूआरएल आदि को फिर से लिखने - यह सिर्फ सादा काम करता है!

अद्यतन: यह तब तक अच्छा प्रतीत नहीं होता है जब तक कि आप अंदर नहीं जाते और अपने सापेक्ष पथ में * .svc एक्सटेंशन जोड़ते हैं - तरह पूरे उद्देश्य को हरा देता है!

यदि आप एएसपी.NET मार्ग का उपयोग करके पंजीकरण करना चाहते हैं, तो उस विषय पर MSDN docs देखें। यदि आप एक वेब अनुप्रयोग में अपने आवेदन स्टार्टअप में कुछ इस तरह, कि global.asax.cs हो जाएगा होगा:

void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
} 

private void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Add(new ServiceRoute("YourService", 
       new WebServiceHostFactory(), typeof(SomeNamespace.YourService))); 
} 

उम्मीद है कि उस के साथ, आप और चल रहा कोई भी बिना अपने सेवा प्राप्त करने में सक्षम हो जाएगा * एसएससीसी फ़ाइल एक्सटेंशन!

+0

ऐसा लगता है कि प्रयोग के बारे में विन्यास आधारित सक्रियण (http बात कर रहे हैं के लिए नया है के लिए मॉड्यूल ले जाकर उसे ठीक किया System.Web.Routing के बजाय .microsoft.com/en-us/library/ee358764.aspx)। समस्या यह है कि यह रिश्तेदार दिखाई देता है एड्रेस को डब्ल्यूसीएफ समर्थित एक्सटेंशन (जैसे .svc) का उपयोग करना चाहिए। मुझे काम करने के लिए आपका उदाहरण नहीं मिल रहा है, मुझे बस त्रुटि मिलती है: 'पंजीकृत सापेक्ष एड्रेस' आपकी सेवा 'सेक्शन' system.serviceModel/serviceHosting पर्यावरण/सेवा एक्टिवेशन 'में कॉन्फ़िगरेशन फ़ाइल में कोई एक्सटेंशन नहीं है' – BrettRobi

+0

@BrettRobi: मजेदार - एमएसडीएन लेख खुद के विपरीत है .... और यह सभी प्रस्तुतियों और वार्ता के विपरीत है जो मैंने फ़ाइल-कम सक्रियण पर अब तक देखा/सुना है ..... मैंने अपना जवाब अपडेट किया है –

+2

हाँ मुझे उम्मीद थी कि यह होगा चाल करें लेकिन यह वास्तव में .svc फ़ाइल को खत्म करने के लिए एक आसान तरीका जैसा दिखता है लेकिन यूआरएल में .svc की आवश्यकता नहीं है। हालांकि मदद के लिए धन्यवाद ... – BrettRobi

5

बस उत्तर लपेटने और वहां एक और बिंदु जोड़ने के लिए। आदेश में इस काम कर आप web.config के लिए कुछ और बातें जोड़ने के लिए लेकिन जरूरत है पाने के लिए

void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
} 

private void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Add(new ServiceRoute("YourService", 
       new WebServiceHostFactory(), typeof(SomeNamespace.YourService))); 
} 

: आप एक ही ASP.NET मार्ग पंजीकरण के रूप में ऊपर की आवश्यकता होगी। सेवा होस्टिंग को एएसपी.NET संगत होने के लिए कॉन्फ़िगर किया जाना चाहिए। यह aspNetCompatibiliyEnabled = serviceHostingEnvironment तत्व को "सही" जोड़कर किया जा सकता है:

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 

आशा इस स्पष्ट और एक को खोजने के लिए आसान समाधान देता है।

+1

यहां देखें कि आपको WebServiceHostFactory का उपयोग क्यों नहीं करना चाहिए, केवल ServiceHostFactory का उपयोग करें http://stackoverflow.com/questions/2921802/serviceroute-webservicehostfactory-kills-wsdl- जनरेशन-how-to-create-extens –

+0

@LuizFelipe, जिस प्रश्न का आप उल्लेख कर रहे हैं वह एक एसओएपी सेवा के लिए है, न कि एक आरईएसटी (वेबएचटीपी) सेवा। यह प्रश्न एक आरईएसटी सेवा के लिए है। WebServiceHostFactory इस मामले में सही कारखाना है। –

+0

हां, सर्विसहोस्ट फैक्टरी का उपयोग करने के लिए इसे बदलना रूटिंग समस्या हल करता है, लेकिन तो आपको एक एसओएपी सेवा मिलती है, आप सही हैं। मैं गलत था, अगर ऊपर दिया गया समाधान काम नहीं करता है, तो बस यूआरएल रूटिंग का उपयोग करें। –

1

आईआईएस 7.5 और फ्रेमवर्क 4 के लिए महत्वपूर्ण स्पष्टीकरण।0:

काम करने के लिए वेब रूटिंग मॉड्यूल के लिए, यह, अनुप्रयोग पूल करने के लिए "एकीकृत मोड" सेट की आवश्यकता है यह नहीं "क्लासिक मोड" में काम करता है

एक अतिरिक्त समस्या मैं के बाद पाया है कि करता है स्विचिंग यह है कि जब "एकीकृत मोड" में एप्लिकेशन स्टार्टअप पर क्रैश हो गया क्योंकि मेरे पास < सिस्टम में शामिल मॉड्यूल थे। वेब> अनुभाग। // MSDN:

मैं < system.webServer> विन्यास अनुभाग है कि आईआईएस 7

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