2009-11-17 47 views
4

設置Visual Studio服務引用的自定義模板?

我想在Visual Studio中使用Web服務。我添加了一個服務引用,將它指向一個WSDL文檔。我得到了一堆像冠軍一樣工作的生成代碼。

的問題

在服務引用對話框,我所選擇的「內部」作爲「爲生成的類訪問級別」。看起來好像將「internal」關鍵字放在WhateverSoapClient類的前面。 Groovy的。但是,生成的模型類都在「公開部分」關鍵字前面。 「部分」部分是好的(甚至是期望的),但不是公衆。我希望這些類也是內部的。

解決方案?

當然,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 { 
    // ... 
} 

而且響應傑米,我熟悉感謝SubSonic T4模板。所以我已經爲這個問題找到了一些與T4相關的答案。不過,我可能會多挖一點。謝謝你的提示。

+4

Visual Studio在其代碼生成中使用了一個稱爲「T4模板」的系統(可能全部是?)。也許這可能是一個有用的術語,包括在谷歌搜索。 – 2009-11-17 23:04:30

+0

當我添加服務引用並選擇訪問級別爲內部時,在生成的文件中看不到任何「公開部分」。我的ServiceClient和我的DataContract類型都被標記爲「內部部分」。如果你可以發佈一些示例代碼,這可能會有所幫助嗎? – 2009-11-18 03:37:15

回答

2

你不包括任何的屬性裝飾公共類,但我猜,如果你這樣做了,屬性之一將是:

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

如果是這樣,那麼SvcUtil工具被拒絕作出這些類內部的原因是由於類數據如何限制b eing序列化; XmlSerializer需要這些類是公共的。

因此,svcutil可以使內部唯一的東西是服務接口和服務實現類。

即使您要創建一個將所有這些類生成爲內部的自定義T4模板,您可能會發現您不再能夠與該服務進行通信。

-1

如果您不打算更新服務參考,您可以手動編輯此文件。是的,如果您更新,更改將會丟失,但不會自動更新,所以您不必擔心這種隨機發生。

+3

-1:格雷厄姆,很高興你參與,但我看不到_ever_告訴某人編輯生成的代碼。無意中使用「更新服務參考」的人不是您要與之交談的人。這將是一些貧窮的開發人員無法知道生成的代碼已被編輯。 – 2011-01-19 20:26:09

相關問題