this और बाद में this के लिए धन्यवाद, मैंने पाया कि मैं क्या देख रहा था।
IParameterInspector
IOperationBehavior
स्तर पर होने की आवश्यकता नहीं है। वे IServiceBehavior
स्तर पर हो सकते हैं। सेवा स्तर ApplyDispatchBehavior
विधि में आपको अपने सभी परिचालनों के माध्यम से लूप करने और इंस्पेक्टर व्यवहार असाइन करने की आवश्यकता है।
पूर्ण में मेरी कक्षा ...
[AttributeUsage(AttributeTargets.Class)]
public class ServiceLevelParameterInspectorAttribute : Attribute, IParameterInspector, IServiceBehavior
{
public object BeforeCall(string operationName, object[] inputs)
{
// Inspect the parameters.
return null;
}
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers)
{
if (channelDispatcher == null)
{
continue;
}
foreach(var endPoint in channelDispatcher.Endpoints)
{
if (endPoint == null)
{
continue;
}
foreach(var opertaion in endPoint.DispatchRuntime.Operations)
{
opertaion.ParameterInspectors.Add(this);
}
}
}
}
}
स्रोत
2010-11-10 11:51:20
थोड़ा पुराने, लेकिन क्यों अपने कोड में कॉल जारी रखें? – itchi
@itchi अब भी पुराना है, लेकिन मैं अनुमान लगा रहा हूं क्योंकि "संग्रह में चैनलडिस्परचरबेस ऑब्जेक्ट्स (और केवल चैनल डिस्पैचर के उदाहरण नहीं हैं) क्योंकि यह उन डेवलपर्स द्वारा भी उपयोग किया जाता है जो विंडोज संचार फाउंडेशन (डब्ल्यूसीएफ) प्रोग्रामिंग मॉडल रखना चाहते हैं लेकिन प्रतिस्थापित करें सिस्टम-प्रदत्त रनटाइम "। ऐसा लगता है कि कोड एक अवैध कास्ट अपवाद ट्रिगर कर सकता है। ChannelDispatcherBase को रखने और "as" ऑपरेटर का उपयोग करने के लिए बेहतर होगा। – trydis