Visual Studio服务参考的自定义模板?

时间:2009-11-17 22:55:45

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

设置

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

问题

在“服务引用”对话框中,我选择“内部”作为“生成类的访问级别”。似乎将“internal”关键字放在WhateverSoapClient类的前面。 Groovy的。但是,生成的模型类前面都有“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”。我希望它是内部的。

以下是生成内容的一些片段:

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相关答案。不过,我可能会多挖一点。谢谢你的提示。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:0)

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

MSDN - Troubleshooting Service References

答案 2 :(得分:-1)

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