2008-12-16 17 views
10

में रिश्तेदार यूआरएल मेरे पास चांदी की रोशनी नियंत्रण है जिसमें चांदी की रोशनी सक्षम डब्ल्यूसीएफ सेवा का संदर्भ है।डब्ल्यूसीएफ सेवा बाध्यकारी

जब मैं अपने Silverlight नियंत्रण में सेवा के लिए एक संदर्भ जोड़ने के लिए, यह मेरे clientconfig फ़ाइल में निम्न जोड़ता है:

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_DataAccess" maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647"> 
        <security mode="None" /> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:3097/MyApp/DataAccess.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DataAccess" 
       contract="svcMyService.DataAccess" name="BasicHttpBinding_DataAccess" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

मैं endpoint पते के बजाय संपूर्ण url में एक रिश्तेदार यूआरएल कैसे निर्दिष्ट करूँ? मैं इसे काम करना चाहता हूं इससे कोई फर्क नहीं पड़ता कि मैं क्लाइंट कॉन्फिग फ़ाइल को संपादित किए बिना वेब ऐप को तैनात करता हूं, क्योंकि चांदी की रोशनी घटक और वेब ऐप हमेशा एक साथ तैनात किया जाएगा। मैंने सोचा कि मैं सिर्फ "DataAccess.svc" निर्दिष्ट करने में सक्षम हूं लेकिन ऐसा लगता है कि ऐसा नहीं लगता है।

उत्तर

4

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

+0

यदि मैं यह दृष्टिकोण लेना चाहता हूं, तो मैं अपना सापेक्ष यूआरएल पैरामीटर कहां रखूंगा? मैं ServiceReferences.ClientConfig को देख रहा हूं और मुझे इसे रखने के लिए कोई स्थान नहीं दिख रहा है - ऐसा लगता है कि वही तत्व वेब.कॉन्फिग फ़ाइल का उत्तर नहीं देते हैं। – Jeremy

14

मेरे समाधान:

svcMyService.DataAccessClient svcProxy_m; 

System.ServiceModel.BasicHttpBinding binding = new System.ServiceModel.BasicHttpBinding(); 

/* 
Create an end point, build a an absolute uri reference by specifing the host address and a relative referece to the service page. 
Application.Current.Host.Source will be something like Http://server/app/ClientBin/SilverlightApp.xap"<br/><br/> 
Specifying Uri(Application.Current.Host.Source, "../DataAccess.svc")); will return "Http://server/app/DataAccess.svc" 
*/ 

System.ServiceModel.EndpointAddress address = new System.ServiceModel.EndpointAddress(new Uri(Application.Current.Host.Source, "../DataAccess.svc")); 

svcProxy_m = new svcMyService.DataAccessClient(binding, address); 
+0

+1 ने सिर्फ मेरी सिल्वरलाइट तैनाती की समस्या हल की। – geofftnz

+0

मुझे लगता है कि यहां वर्णित व्यवहार डिफ़ॉल्ट चांदी की रोशनी व्यवहार होगा। मुझे परेशान है कि हमें हर परियोजना के लिए ऐसा करने की आवश्यकता होगी। :( – Jeremy

1

मैं में सापेक्ष URI का इस्तेमाल किया है:

के बजाय मेरी प्रॉक्सी वर्ग का दृष्टांत को Devault निर्माता (जो ServiceReferences.ClientConfig फ़ाइल का उपयोग करता है) का उपयोग कर, मैं निम्नलिखित का उपयोग विन्यास और मेरा एसएल 4 ऐप काम करता है।

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_ICorrectionService" maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647" textEncoding="utf-8" transferMode="Buffered"> 
        <security mode="None" /> 
       </binding> 
      </basicHttpBinding> 
     </bindings>   
     <client> 
      <endpoint address="/CorrectionService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICorrectionService" 
      contract="CorrectionService.ICorrectionService" name="BasicHttpBinding_ICorrectionService" /> 
     </client>   
    </system.serviceModel> 
</configuration> 
संबंधित मुद्दे