3

我正在尝试将 IntelliSense 和 SandCastle 兼容文档添加到通过 svcutil 生成的 WCF 代理类中。有没有办法在不直接编辑生成的代码的情况下做到这一点(因为如果重新生成它会丢失)?

4

5 回答 5

3

在 WCFExtras 项目中,您可以找到您正在寻找的功能;一个 WSDL 导出器和导入器,它获取 XML 代码文档并将其嵌入 WSDL + 将其拉出并再次将其作为 XML 文档添加到生成的客户端代理上。

WCFExtras 可以在这里找到:http ://wcfextras.codeplex.com/(或作为 Nuget 包)。

--larsw

于 2011-04-28T17:47:29.463 回答
1

我认为您可以覆盖使用模板生成这些类的方式。这是一篇文章的链接。他们专注于silverlight,但我认为代码上下文仍然适用。

http://www.silverlightshow.net/items/ADO.NET-Data-Services-Advanced-Topics-Custom-proxy-based-on-T4-templates.aspx

于 2011-05-02T07:23:20.203 回答
1

一个有限的解决方案可能是只创建文档的部分类来镜像 SvcUtil 生成的类。由于 SvcUtil 类是作为分部类创建的,因此您可以利用它来记录类,但这可能不适用于方法或属性。IntelliSense 将显示注释。我相信 SandCastle 也会合并评论但还没有尝试过。如果你想走这条路,让这些类与服务更改保持同步可能会很痛苦。

下面是文档类的样子:

/// <summary>
/// This is a comment
/// </summary>
public partial class YourSvcUtilGenerateClientClass { }
于 2011-04-13T18:01:31.470 回答
0

就个人而言,我从不使用生成的 WCF 代理类。滚动自己的代理类太容易了。这就是它所需要的(当您在代理类上添加 ServiceContract 接口时,Visual Studio 可以为您添加方法):

using System.ServiceModel;

namespace My.Namespace
{
    public class MyServiceContractProxy : ClientBase<IMyServiceContract>, IMyServiceContract
    {
        public MyServiceContractProxy() { }
        public MyServiceContractProxy(string endpointName) : base(endpointName) { }

        #region IMyServiceContract Members

        public int AddValues(int val1, int val2)
        {
            return Channel.AddValues(val1, val2);
        }

        #endregion
    }
}

如果您的 ServiceContract 发生更改,它将引发编译错误,因为您的代理将不再与接口匹配,但通常不会超过 10 秒对您的代理类进行编辑。

于 2011-04-13T17:02:52.380 回答
0

由于 XML 注释路由无法满足您的需求,因此Document! X 2011产品将是一个选择。它不是免费的,但它会做你需要的。

于 2011-04-25T15:45:32.203 回答