使用可序列化資料型別的服務與用戶端應用程式,會在執行時產生 XmlSerializer 並編譯這些資料型別的序列化程式碼,這可能導致啟動效能緩慢。
備註
預先產生的序列化程式碼只能用於用戶端應用程式,無法用於服務中。
ServiceModel Metadata Utility Tool(Svcutil.exe)可透過從已編譯的組件產生所需的序列化程式碼,提升這些應用程式的啟動效能。 Svcutil.exe 為編譯後應用程式組合中服務合約中使用的所有資料型態產生可使用 XmlSerializer 序列化的程式碼。 使用 XmlSerializer 的服務與營運合約被標示為 XmlSerializerFormatAttribute。
產生 XmlSerializer 序列化程式碼
將你的服務或客戶程式碼編譯成一個或多個組件。
開啟 SDK 命令提示字元。
在命令提示字元,請以以下格式啟動 Svcutil.exe 工具。
svcutil.exe /t:xmlSerializer <assemblyPath>*該
assemblyPath參數指定了通往包含服務合約類型的組裝的路徑。 Svcutil.exe 會為編譯後應用程式組合中用于服務合約的所有資料型態生成序列化程式碼,這些資料型態皆可使用 XmlSerializer 進行序列化。Svcutil.exe 只能產生 C# 序列化程式碼。 每個輸入組件會產生一個原始碼檔案。 你不能用 /language switch 來更改產生程式碼的語言。
若要指定相依組件的路徑,請使用 /reference 選項。
請透過以下選項之一,將產生的序列化程式碼提供給您的應用程式:
將產生的序列化程式碼編譯成一個名為[原始組合].XmlSerializers.dll 的獨立組合語言(例如,MyApp.XmlSerializers.dll)。 你的應用程式必須能夠載入該組合,且該組合必須以與原始組合相同的金鑰簽名。 如果你重新編譯原始組語言,必須重新生成序列化組件。
將產生的序列化程式碼編譯成獨立的程式集,並在使用XmlSerializerFormatAttribute的服務合約上使用 XmlSerializerAssemblyAttribute。 將 AssemblyName 或 CodeBase 屬性設定為指向已編譯的序列化組件。
將產生的序列化程式碼編譯到您的應用程式組件中,並將XmlSerializerAssemblyAttribute新增至使用XmlSerializerFormatAttribute的服務合約中。 不要設定 AssemblyName OR CodeBase 屬性。 預設的序列化組件假設為目前的組件。
在 Visual Studio 中產生 XmlSerializer 序列化程式碼
在 Visual Studio 建立 WCF 服務與客戶專案。 接著,為客戶專案新增一個服務參考。
在客戶端應用程式專案中,reference.cs 檔案的 serviceReference ->reference.svcmap 下新增 XmlSerializerFormatAttribute 到服務合約。 請注意,你需要在 解決方案總管 中顯示所有檔案才能看到這些檔案。
先建立客戶端應用程式。
使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 透過以下指令建立預先產生的序列化的 .cs 檔案:
svcutil.exe /t:xmlSerializer <assemblyPath>*assemblyPath 參數指定了 WCF 用戶端組裝的路徑。
例如:
svcutil.exe /t:xmlSerializer wcfclient.exeWCFClient.XmlSerializers.dll.cs 檔案會被產生。
編譯預先產生的序列化組合。
根據前一步驟的範例,編譯指令會是:
csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs確保產生的 WCFClient.XmlSerializers.dll 和客戶端應用程式 WCFClient.exe 在同一個目錄裡,這裡的客戶端應用程式為 WCFClient.exe。
照常執行客戶端應用程式。 將使用預先產生的序列化組件。
Example
以下指令會產生組合 XmlSerializer 中任何服務合約所使用的序列化類型。
svcutil /t:xmlserializer myContractLibrary.exe