如何在没有新类名的情况下扩展System.Web.Services.WebService?

时间:2011-08-19 14:42:25

标签: c# xml web-services asmx

我试图用几种不同的形式做到这一点,这只是最新的。我经常笨拙几个小时,从来没有到过任何地方,所以我想用现实世界的例子来提出这个问题。

我有Web服务,我从中编写XML,以便人们可以从我们的服务器中提取信息,所以我有:

(namespace)
public static class WebServices
{
    public static void WriteXML(this WebService svc, DataSet results)
    {
        if (results != null)
            HttpContext.Current.Response.Write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><xsl:stylesheet version=\"1.0\" " +
                "xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns=\"http://www.w3.org/1999/xhtml\">" + results.GetXml() + "</xsl:stylesheet>");
    }
}

不幸的是,这只是可以访问:

using (namespace)
....
this.WriteXML(DataSet);

我想要的时候

using (namespace)
....
WriteXML(DataSet);

我错过了什么?

3 个答案:

答案 0 :(得分:1)

您为WebService编写了一个扩展方法 - 您的第一个参数是this WebService svc,这反过来意味着您的扩展方法WriteXML只能在WebService的实例上调用

答案 1 :(得分:0)

如果它是一个部分类,你可以添加一个方法,但在MSDN文档中,它并没有说它是偏的。您必须使用扩展方法对其进行扩展,并且必须使用this关键字来访问它。五个额外的角色对我来说似乎并不太糟糕。还有其他原因导致您不想使用关键字吗?

答案 2 :(得分:0)

您可以将该方法放入基类,然后从基类派生所有Web服务。基类将派生自WebService。

除非你使用WebService类的成员,否则你根本不需要从中派生出来。您可以使用[WebService]简单地装饰您的Web服务类。

相关问题