【问题标题】:Custom template for Visual Studio Service References?Visual Studio 服务引用的自定义模板?
【发布时间】:2009-11-17 22:55:45
【问题描述】:

设置

我想在 Visual Studio 中使用 Web 服务。我添加了一个服务引用,将它指向一个 WSDL 文档。我得到了一堆像冠军一样工作的生成代码。

问题

在“服务参考”对话框中,我选择“内部”作为“生成的类的访问级别”。看起来好像将“内部”关键字放在了 WhatSoapClient 类的前面。时髦的。但是,生成的模型类都以“public partial”关键字开头。 “部分”部分很好(甚至是需要的),但公众却不是这样。我希望这些类也是内部的。

解决方案?

Visual Studio (svcutil.exe?) 肯定是在使用模板来生成 Reference.cs,对吧?有没有办法改变那个模板,或者指定一个替代品?还是我找错树了?

谢谢!

我对此很陌生,所以我可能对这个问题的措辞很糟糕。


编辑:为了回应 Tuzo 的评论,我将 Visual Studio 连接到以下内容:

https://sebomarketing.worldsecuresystems.com/CatalystWebService/CatalystEcommerceWebservice.asmx?WSDL.

VS 生成一个名为 CatalystEcommerceWebserviceSoapClient 的内部类,它有一个名为 Catalogue_Retrieve() 的方法。 Catalogue_Retrieve() 返回一个 Catalog 对象,Visual Studio 将 Catalog 类生成为“public partial”。我希望它是内部的。

以下是生成的一些 sn-ps:

internal partial class CatalystEcommerceWebsierviceSoapClient : System.ServiceModel.ClientBase<BcApi.EcommerceApi.CatalystEcommerceWebserviceSoap>, BcApi.EcommerceApi.CatalystEcommerceWebserviceSoap {
    public BcApi.EcommerceApi.Catalogue Catalogue_Retrieve(...) {
        // ...
    }
}

public partial class Catalogue : object, System.ComponentModel.INotifyPropertyChanged {
    // ...
}

作为对 Jamie 的回应,感谢SubSonic,我对 T4 模板很熟悉。所以我确实已经为这个问题做了一些与 T4 相关的答案。不过,我可能可以再挖一点。感谢您的提示。

【问题讨论】:

  • Visual Studio 的很多(可能是全部?)代码生成都使用了一个名为“T4 模板”的系统。也许这可能是一个有用的术语,可以包含在谷歌搜索中。
  • 当我添加服务引用并选择访问级别为内部时,我在生成的文件中看不到任何“公共部分”。我的 ServiceClient 和我的 DataContract 类型都被标记为“内部部分”。如果您可以发布一些示例代码,也许会有所帮助?

标签: c# visual-studio web-services templates


【解决方案1】:

你没有包含任何装饰公共类的属性,但我猜如果你这样做了,其中一个属性应该是:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="blahblahblah")]

如果是这样,那么 svcutil 拒绝将这些类设为内部的原因是由于类数据序列化方式的限制; XmlSerializer 要求类是公共的。

因此,svcutil 唯一可以内部化的就是服务接口和服务实现类。

即使您要创建一个自定义 T4 模板来生成所有这些内部类,您也可能会发现您不再能够与该服务进行通信。

【讨论】:

    【解决方案2】:

    这不是解决您的问题的答案,但是,它可以解释为什么您(和我)在我们的数据合同类中看到这个:

    MSDN - Troubleshooting Service References

    【讨论】:

      【解决方案3】:

      如果您不打算更新服务参考,您可以手动编辑此文件。是的,如果您更新,更改将会丢失,但这不会自动更新,因此您不必担心这种随机发生。

      【讨论】:

      • -1:格雷厄姆,很高兴你参与其中,但我没有看到曾经告诉某人编辑生成的代码。无意中使用“更新服务参考”的人不是您正在与之交谈的人。将是一些可怜的开发人员无法知道生成的代码已被编辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      相关资源
      最近更新 更多