प्रारंभ करने में मैं कोड जो गतिशील SoapHttpClientProtocol
वस्तु (प्रॉक्सी वर्ग) को दर्शाता है और WS-बेसिक मैं वेब सेवा के लिए कॉल करने के लिए इस वस्तु का उपयोग करता है के साथ काम कर रहा हूँ। यहाँ मेरी कोड का सरलीकृत संस्करण है:उपयोग संकलित लैम्ब्डा Activator.CreateInstance के बजाय अभिव्यक्ति SoapHttpClientProtocol वस्तु
public override object Call(Type callingObject,
string method, object[] methodParams, string URL)
{
MethodInfo requestMethod = callingObject.GetMethod(method);
//creates an instance of SoapHttpClientProtocol
object instance = Activator.CreateInstance(callingObject);
//sets the URL for the object that was just created
instance.GetType().InvokeMember("Url",
BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty, null,
instance,
new object[1] {URL});
return requestMethod.Invoke(instance, methodParams);
}
मैंने देखा है कि कुछ मामलों में Activator.CreateInstance()
कॉल समय की महत्वपूर्ण राशि ले जा सकते हैं, तो मैं कोड by using a lambda expression अनुकूलन करने के लिए कोशिश कर रहा हूँ:
public override object Call(Type callingObject,
string method, object[] methodParams, string URL)
{
MethodInfo requestMethod = callingObject.GetMethod(method);
//creates an instance of SoapHttpClientProtocol using compiled Lambda Expression
ConstructorInfo constructorInfo = callingObject.GetConstructor(new Type[0]);
object instance = Expression.Lambda(Expression.New(constructorInfo)).Compile();
//sets the URL for the object that was just created
instance.GetType().InvokeMember("Url",
BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty, null,
instance,
new object[1] {URL});
//calls the web service
return requestMethod.Invoke(instance, methodParams);
}
दुर्भाग्य से, इस कोड callingObject
प्रकार का ऑब्जेक्ट का निर्माण नहीं करता (बजाय इसे एक Func<T>
प्रतिनिधि ऑब्जेक्ट) और इसलिए जब यह अगली पंक्ति में Url
सेट करने का प्रयास यह एक अपवाद फेंकता है:
सिस्टम। MissingMethodException: अनुपलब्ध सदस्य तक पहुंचने का प्रयास किया गया।
क्या मुझे अपने कोड में कुछ याद आ रही है?
धन्यवाद!
लिंक – NStuke