2009-07-22 19 views
14

का कारण बनता है मैं एक व्यवहार एक्सटेंशन जोड़ना चाहता हूं ताकि मेरी सेवा कक्षाएं निंजेक्ट के साथ तुरंत हो जाएंगी। मैंने एक वर्ग बनाया जो व्यवहार एक्सटेन्शन एलिमेंट से विरासत में मिला और इसे मेरे App.config में पंजीकृत किया। मैं स्पष्ट कुछ भी मैं याद कर रहा हूँ नहीं देख सकते हैं, फिर भी स्टार्टअप पर इस फेंक दिया जाता है:कस्टम डब्ल्यूसीएफ व्यवहार एक्सटेंशन जोड़ने से कॉन्फ़िगरेशन एरर एक्सेप्शन

System.Configuration.ConfigurationErrorsException: An error occurred creating the configuration section handler for system.serviceModel/behaviors: Extension element TestExtension cannot be added to this element. Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions. 
Parameter name: element (...\MyAssembly.dll.config line 42) ---> 
System.ArgumentException: Extension element TestExtension cannot be added to this element. 
Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions. 
Parameter name: element 

यहाँ मेरी App.config है:

public class DependencyInjectionServiceBehavior : BehaviorExtensionElement, IServiceBehavior 
{ 
    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
    { 
     foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers) 
     { 
      ChannelDispatcher cd = cdb as ChannelDispatcher; 
      if (cd != null) 
      { 
       foreach (EndpointDispatcher ed in cd.Endpoints) 
       { 
        ed.DispatchRuntime.InstanceProvider = 
         new DependencyInjectionInstanceProvider(serviceDescription.ServiceType); 
       } 
      } 
     } 
    } 

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
    { 
    } 

    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, 
     Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters) 
    { 
    } 

    public override Type BehaviorType 
    { 
     get { return this.GetType(); } 
    } 

    protected override object CreateBehavior() 
    { 
     return new DependencyInjectionServiceBehavior(); 
    } 

} 

उत्तर

20
:

<system.serviceModel> 
<extensions> 
    <behaviorExtensions> 
    <add name="TestExtension" type="Mynamespace.DependencyInjectionServiceBehavior,MyAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" /> 
    </behaviorExtensions> 
</extensions> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyServiceBehavior"> 
     <TestExtension/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

यहाँ मेरी व्यवहार वर्ग है

टाइप नाम को बदलता है typeof(DependencyInjectionServiceBehavior).AssemblyQualifiedName के बराबर बराबर होना चाहिए। मेरी पिछली समझ यह थी कि पूरी तरह से योग्य प्रकार के नाम में कोई स्थान नहीं होना चाहिए था, जो गलत साबित हुआ।

+0

कोई समाधान ?? – Kiquenet

+0

मेरी समस्या को ठीक करने के लिए मुझे वास्तव में क्या जानने की आवश्यकता है - धन्यवाद – stuartd

+9

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

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