【发布时间】:2009-11-17 22:55:45
【问题描述】:
设置
我想在 Visual Studio 中使用 Web 服务。我添加了一个服务引用,将它指向一个 WSDL 文档。我得到了一堆像冠军一样工作的生成代码。
问题
在“服务参考”对话框中,我选择“内部”作为“生成的类的访问级别”。看起来好像将“内部”关键字放在了 WhatSoapClient 类的前面。时髦的。但是,生成的模型类都以“public partial”关键字开头。 “部分”部分很好(甚至是需要的),但公众却不是这样。我希望这些类也是内部的。
解决方案?
Visual Studio (svcutil.exe?) 肯定是在使用模板来生成 Reference.cs,对吧?有没有办法改变那个模板,或者指定一个替代品?还是我找错树了?
谢谢!
我对此很陌生,所以我可能对这个问题的措辞很糟糕。
编辑:为了回应 Tuzo 的评论,我将 Visual Studio 连接到以下内容:
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