代码之家  ›  专栏  ›  技术社区  ›  Stephen

Visual Studio服务引用的自定义模板?

  •  4
  • Stephen  · 技术社区  · 16 年前

    设置

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

    问题

    在“服务引用”对话框中,我选择了“内部”作为“生成类的访问级别”。它看起来好像将“内部”关键字放在了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()返回catalogue对象,Visual Studio正在将catalogue类生成为“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相关答案。不过,我可能会再挖一点。谢谢你的小费。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Omar    14 年前

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

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

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

    因此,svcutil唯一可以使其成为内部的东西就是服务接口和服务实现类。

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

        2
  •  0
  •   CodeMonkeyKing    14 年前

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

    MSDN - Troubleshooting Service References

        3
  •  -1
  •   Graham    15 年前

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