设置
我想在Visual Studio中使用Web服务。我添加了一个服务引用,将其指向WSDL文档。我得到了一堆生成的代码,就像一个冠军。
问题
在“服务引用”对话框中,我选择“内部”作为“生成类的访问级别”。似乎将“internal”关键字放在WhateverSoapClient类的前面。 Groovy的。但是,生成的模型类前面都有“public partial”关键字。 “部分”部分很好(甚至是期望的),但不是公众。我希望这些课程也是内部的。
解决方案?
当然Visual Studio(svcutil.exe?)正在使用模板来生成Reference.cs,对吧?有没有办法更改该模板,或指定备用模板?还是我在错误的树上吠叫?
谢谢!
我对此很陌生,所以我可能会严肃地说出这个问题。
编辑: 为了回应Tuzo的评论,我将Visual Studio连接到以下内容:
VS生成一个名为CatalystEcommerceWebserviceSoapClient的内部类,它有一个名为Catalogue_Retrieve()的方法。 Catalogue_Retrieve()返回一个Catalog对象,Visual Studio将Catalog类生成为“public partial”。我希望它是内部的。
以下是生成内容的一些片段:
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相关答案。不过,我可能会多挖一点。谢谢你的提示。
答案 0 :(得分:2)
你没有包含任何装饰公共类的属性,但我猜你是否这样做,其中一个属性就是:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="blahblahblah")]
如果是这样,那么svcutil拒绝将这些类设为内部的原因是由于类数据序列化的限制; XmlSerializer要求类是公共的。
因此,svcutil可以使内部的唯一内容是服务接口和服务实现类。
即使您要创建一个自定义T4模板,将所有这些类生成为内部,您可能会发现您无法再与该服务进行通信。
答案 1 :(得分:0)
这不是解决问题的答案,但是,它可以解释为什么你(和我)在我们的数据合同类中看到了这一点:
答案 2 :(得分:-1)
如果您不打算更新服务参考,则可以手动编辑此文件。是的,如果您更新,更改将会丢失,但这不会自动更新,因此您不必担心这种情况会随机发生。