C# - 增加目录中的Web服务列表并列出可用的Webmethods

时间:2009-09-15 15:22:28

标签: c# web-services

我正在构建的C#Web应用程序中有许多不同的Web服务,并且希望创建一个快速文档页面,其中列出了每个Web服务和可用的Web方法。每当我更改/添加web方法时,不必让文档页面保持最新,如果文档是动态的,那将是件好事。

对于每个web方法,我想从Web方法减速和(如果可能的话)每个方法的参数列表中获取Description属性。

我知道我可以从.NET服务于.asmx页面的Web服务摘要页面获得大量此信息,但我不想强迫用户不得不继续点击主文档页面。

提前致谢。

1 个答案:

答案 0 :(得分:3)

快速解决方案是编写自定义Http Handler:

public class InformationHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // Select the assembly that contains the web service classes
        var assemblyThatContainsTheWebService = Assembly.GetExecutingAssembly();

        // Select all types in this assembly deriving from WebService
        var webServiceTypes = 
            from type in assemblyThatContainsTheWebService.GetTypes()
            where type.BaseType == typeof(WebService)
            select type;

        context.Response.ContentType = "text/plain";

        foreach (var type in webServiceTypes)
        {
            context.Response.Write(string.Format("Methods for web service {0}:{1}", type, Environment.NewLine));
            // Select all methods marked with the WebMethodAttribute
            var methods = 
                from method in type.GetMethods()
                where method.GetCustomAttributes(typeof(WebMethodAttribute), false).Count() > 0
                select method;

            foreach (var method in methods)
            {
                context.Response.Write(method);
            }
            context.Response.Write(Environment.NewLine);
        }

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}