2011-06-08 14 views
5

मैं सर्वर कॉन्फ़िगरेशन फ़ाइल में maxItemsInObjectGraph निर्दिष्ट कर रहा हूं लेकिन क्लाइंट कॉन्फ़िगरेशन फ़ाइल बनाते समय, यह विशेषता अनदेखा कर दी गई है और मुझे मैन्युअल रूप से एंडपॉइंट Behaviors अनुभाग में इसे जोड़ना होगा।क्लाइंट कॉन्फ़िगरेशन में maxItemsInObjectGraph सेट करें

क्या कोई तरीका है कि मैं कॉन्फ़िगरेशन फ़ाइल में कुछ बदलाव कर सकता हूं ताकि जब भी मैं Svcutil.exe के माध्यम से क्लाइंट कॉन्फ़िगरेशन और प्रॉक्सी उत्पन्न करता हूं, तो यह व्यवहार क्लाइंट कॉन्फ़िगरेशन फ़ाइल में स्वचालित रूप से शामिल होता है?

मैं सेवा इंटरफ़ेस करने के लिए [ServiceBehavior(MaxItemsInObjectGraph = 2147483647)] ading की कोशिश की लेकिन यह मुझे कह Attribute 'ServiceBehavior' is not valid on this declaration type. It is only valid on 'class' declarations.

उत्तर

7

कोई एक त्रुटि देता है, कि एक और व्यवहार जो प्रतिभागी प्रति कॉन्फ़िगर किया गया है है। प्रत्येक ग्राहक का इस संपत्ति पर नियंत्रण होता है और सेवा इस संपत्ति का पर्दाफाश नहीं करती है क्योंकि इसे सुरक्षा समस्या माना जा सकता है।

तो आपकी समस्या को विकास आप commonBehaviors अनुभाग जो केवल machine.config में परिभाषित किया जा सकता का उपयोग कर सकते हैं (आपके द्वारा अपने व्यवहार आप संदर्भ ताज़ा हर बार संशोधित करने के लिए नहीं करना चाहते हैं) के बारे में मुख्य रूप से है:

<commonBehaviors> 
    <behaviors> 
    <endpointBehaviors> 
     <dataContractSerializer maxItemsInObjectGraph="..." /> 
    </endpointBehaviors> 
    </behaviors> 
</commonBehaviors> 

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

+0

मेरी मुख्य समस्या प्रत्येक क्लाइंट कॉन्फ़िगरेशन फ़ाइल में विशेषता जोड़ रही है। ऐसा लगता है कि मुझे इसके साथ रहना है। – Asdfg

8

व्यवहार आमतौर पर स्थानीय सेटिंग्स होते हैं (आपके पास क्लाइंट और सर्वर के लिए अलग-अलग मान हो सकते हैं, और संचार अभी भी ठीक काम कर सकता है), इसलिए वे डब्लूएसडीएल में प्रकट नहीं हुए हैं (और इसलिए svcutil उस मान को नहीं ढूंढ पाएगा)।

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

ServiceClient client = new ServiceClient(); 
foreach (var operationDescription in client.Endpoint.Contract.Operations) 
{ 
    DataContractSerializerOperationBehavior dcsob = 
     operationDescription.Behaviors.Find<DataContractSerializerOperationBehavior>(); 
    if (dcsob != null) 
    { 
     dcsob.MaxItemsInObjectGraph = int.MaxValue; 
    } 
} 

ध्यान दें कि अगर आप के बजाय स्वत: जनरेट स्टब्स का उपयोग करने का ग्राहक कार्यान्वयन लिखावट कर रहे हैं, Endpoint उपलब्ध है के माध्यम से ChannelFactory सेवा इंटरफेस के लिए चैनल बनाने के लिए इस्तेमाल किया।

+0

यह एक अच्छा कामकाज था, किसी कारण से मेरा app.config मेरे एक्सएमएल दिशानिर्देशों को नहीं सुन रहा है, इसलिए यह मेरा सबसे अच्छा विकल्प है। –

+0

मैं पूरे दिन इस पर संघर्ष कर रहा हूं, और यह एकमात्र समाधान है जिसने समस्या को हल किया है। हार्दिक धन्यवाद! – KenD

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