Метод GetMethods () поддерживает флаги привязки, которые можно использовать для более точного выбора методов, которые вы хотите вернуть.Посмотрите здесь:
http://msdn.microsoft.com/en-us/library/4d848zkb.aspx
Кроме того, вы можете использовать некоторые linq, чтобы дополнительно указать, что вы ищете:
MethodInfo[] methods = myService.GetType().GetMethods();
MethodInfo[] methodsOfWebservice = methods.Where(m => m.whatever == whatever && m.anothercondition == true); // etc.
Последний вариант у вас естьдобавить Атрибут для каждого метода, который вы хотите, чтобы он возвратил, и затем проверить наличие Атрибута.Посмотрите здесь:
http://www.codeproject.com/KB/cs/attributes.aspx
Обновление 2011-01-18
Я просмотрел базу знаний Microsoft и обнаружил, что [WebMethod] является атрибутом.http://support.microsoft.com/kb/308359 и http://msdn.microsoft.com/en-us/library/28a537td.aspx. При получении всех методов вы можете проверить наличие этого атрибута, чтобы определить, является ли метод WebMethod или нет.
List<MethodInfo> methodsOfWebservice = new List<MethodInfo>();
MethodInfo[] methods = myService.GetType().GetMethods();
foreach(MethodInfo method in methods)
{
foreach (Attribute attribute in method.GetCustomAttributes(true))
{
if (attribute is WebMethodAttribute)
methodsOfWebservice.Add(method);
}
}
Обновить2011-01-20
Я только что протестировал следующий код, и он действительно дает мне WebMethodAttribute
в переменной attribute
:
Type type = obj.GetType();
var method = type.GetMethod("methodname");
var attribute = method.GetCustomAttributes(typeof(WebMethodAttribute), true);
I 'Я уверен, что вы сможете сделать то же самое с вашим кодом и проверить наличие WebMethodAttribute