2009-11-30 5 views
9

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

+0

WCF सेवा या साइट HttpContext का स्रोत है कि के लिए यूआरएल के लिए यूआरएल पर के बारे में WebOperationContext वर्ग मिल सकता है? डब्ल्यूसीएफ सेवा की मेजबानी करने वाली साइट के लिए – Russell

+0

यूआरएल ...उदाहरण के लिए: http: // localhost/वर्चुअल डायरेक्टरी http: //localhost/virtualDirectory/myService.svc –

+0

आईआईएस का कौन सा संस्करण? आईआईएस 6 या 7 या 7.5? क्या डब्ल्यूएएस लागू किया गया है? –

उत्तर

4

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

/// <summary> 
/// Extends ServiceHostFactory to allow ServiceHostFactory to be used. 
/// </summary> 
public class MyServiceHostFactory : ServiceHostFactory 
{ 
    /// <summary> 
    /// Creates a new ServiceHost using the specified service and base addresses. 
    /// </summary> 
    /// <param name="serviceType"></param> 
    /// <param name="baseAddresses"></param> 
    /// <returns></returns> 
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
    { 
     ServiceHost host; 
     host = new ServiceHost(serviceType, baseAddresses); 

     MyGlobalStaticClass.Address = baseAddresses[0]; // assuming you want the first endpoint address. 

     return host; 
    } 

(अपने MyGlobalStaticClass.cs में):

(अपने myService.svc में):

<% 
@ServiceHost 
Service="MyNamespace.MyService" 
Factory="MyNamespace.MyServiceHostFactory" 
    %> 

(अपने MyServiceHostFactory.cs में) यहाँ एक सरल उदाहरण है

public static string Address = ""; 
2

मैं डब्ल्यूसीएफ पर बहुत गर्म नहीं हूं क्योंकि मैं .NET 2.0 के लिए अधिक उपयोग करता हूं, लेकिन क्या ऐसा होगा?

HttpContext.Current.Request.Url.ToString() 

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

+1

यह भी मानता है कि डब्ल्यूसीएफ बाइंडिंग मूल है एचटीपी बाइंडिंग या प्रकार के HTTP बाध्यकारी (उदाहरण के लिए netTcp बाइंडिंग में एचटीपी कॉन्टैक्ट नहीं है)। – Russell

25

मैं यह मानकर शुरू करने जा रहा हूं कि आप HTTP का उपयोग कर रहे हैं - मुझे यकीन है कि आप दृष्टिकोण के आधार पर समायोजित कर सकते हैं आपकी विशिष्ट स्थितियों के बारे में क्या निर्देश है। मैंने HttpContext का उपयोग करके एक उत्तर प्राप्त करने का प्रयास किया और पाया कि कैसिनी के नीचे चलते समय मूल्य शून्य था इसलिए मैंने वैकल्पिक दृष्टिकोण की कोशिश की।

सिस्टम.ServiceModel.OperationContext में उचित अनुरोध संदर्भ शामिल है। आप वास्तविक अनुरोध संदेश पर अनुरोध का पालन कर सकते हैं और शीर्षलेख को साफ़ कर सकते हैं।

Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To; 
3

वर्तमान में मैं WCF बाकी सेवा पर काम कर रहा हूँ और मैं आवश्यकता का एक ही तरह की है। मुझे अपनी विधि में सेवा होस्ट यूआरएल की ज़रूरत है। कक्षा पुस्तकालय में डब्ल्यूसीएफ आरईएसटी सेवा होस्ट/यूआरएल प्राप्त करने के विभिन्न तरीके नीचे दिए गए हैं।

आप WebOperationContext कक्षा का उपयोग कर सकते हैं जो सेवा यूआरएल प्राप्त करने के लिए System.ServiceModel.Web नामस्थान में उपलब्ध है। कृपया ध्यान दें कि यह कक्षा केवल डब्ल्यूसीएफ आरईएसटी सेवा के लिए है।

  1. WebOperationContext.Current.IncomingRequest.Headers["host"] - देता है सेवा होस्ट नाम

  2. WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.Host - देता है सेवा होस्ट नाम

  3. WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.AbsoluteUri - सेवा पूर्ण यूआरएल

  4. WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.AbsoluteUri देता है - देता है सेवा पूर्ण यूआरएल

आप अधिक जानकारी के MSDN

+1

मेरे लिए, UriTemplateMatch हमेशा शून्य है, इसलिए मैं इन सुझावों में से 3/4 का उपयोग नहीं कर सकता। –

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