Web 服務編譯器工具
若要支援服務模型,wsutil.exe會產生要用於用戶端和服務端的標頭。 它會視需要產生用戶端的 C Proxy 檔案,以及服務端的 C 存根檔案。
為了支援 序列化,編譯器會產生全域專案定義之元素描述的標頭,以及序列化引擎要取用之 Proxy 檔案中的所有類型定義資訊。
使用方式
WsUtil.exe [命令列參數 [switch-options]:] < filename>
命令列參數
指定WsUtil.exe編譯器選項。 參數可以依任何順序顯示。 虛線 ('-') 和斜線 ('/') 會視為相同。
命令列選項清單
- @filename 指定應該將輸入檔視為回應檔。 此選項可以在引數清單中的任何位置多次使用。
- /wsdl: < filename > : < optional_url > 指定應該將輸入檔視為 wsdl 檔案。 允許多個 wsdl 輸入,並處理所有指定的 wsdl 檔案。 optional_url會指定從中擷取中繼資料的位置。 如果未指定任何optional_url,Wsutil 會在內部產生唯一的 URL。 另請參閱 原則支援。
- /xsd: < filename > 指定應該將輸入檔案名視為架構檔案。 允許多個 xsd 輸入,並處理所有指定的架構檔案。
- /wsp:filename > : << optional_url > 指定應將輸入檔案名視為原則中繼資料。 允許多個 wsp 輸入,並處理所有指定的原則檔案。 optional_url會指定從中擷取中繼資料的位置。 如果未指定任何optional_url,Wsutil 會在內部產生唯一的 URL。 如果指定 /nopolicy 旗標,則會忽略原則檔案。 另請參閱 原則支援。
- /nopolicy 停用原則處理。
- /out: < dirname > 指定輸出檔案的目錄名稱
- /noclient 請勿產生用戶端存根。
- /noservice 不要產生服務端存根。
- /prefix: < string > 在指定的字串前面加上所有產生的識別碼。
- /fullname 前面加上正規化檔案名以產生識別碼。 根據預設,只會使用 「name」 屬性中指定的名稱來產生相關描述的識別碼。
- /string: < WS_STRING > | <WCHAR* > 根據預設,wsutil 會針對 xsd:string 類型產生 WCHAR* 。 應用程式可以使用這個旗標覆寫該行為,並改為為 xsd:type 產生WS_STRING。
- /help 顯示說明訊息
- /? 與 /help 相同
- /W:x 錯誤處理選項。 可以是 W:0-W:4 |Wx
- /nologo 請勿在主控台輸出上產生編譯器特定資訊。
- /nostamp 請勿在產生的檔案上產生編譯器特定資訊。
根據預設,編譯器會針對 WSDL 檔案或從中繼資料交換傳回的 WSDL 產生下列檔案:
用戶端 Proxy ({inputfilename}.c)
服務 Stub ({inputfilename}.c)
標頭檔 ({inputfilename}.h)
所產生檔案名的根目錄是輸入檔名。 原始輸入副檔名會保留,以防止所產生檔案的檔案名衝突。 根據預設,用戶端和服務存根會在相同的檔案中產生,並在 Proxy 程式碼之後產生服務存根程式碼。
根據預設,編譯器會針對從中繼資料交換傳回的架構,為 XSD 檔案產生下列檔案:
序列化描述 ({inputfilename}.c)
標頭檔 ({inputfilename}.h)
檔案名的根目錄是服務名稱。
Wsutil.exe會在所有產生的檔案開頭產生「戳記」區段,指出編譯器選項、工具版本、命令列選項適用等。您可以使用 /nostamp 選項關閉此區段,以避免與比較產生的檔案產生雜訊。
Wsutil 不支援下載中繼資料
Wsutil 編譯器僅適用于本機中繼資料檔案。 此工具不支援從執行中的 Web 服務下載中繼資料。 開發人員可以使用 svcutil 等其他支援的 Web 服務工具,將中繼資料下載到本機電腦、檢查已儲存的檔案,然後將這些檔案傳遞至wsutil.exe以進行編譯。
多重輸入/輸出檔案支援
WSDL 和 XML 架構允許從其他位置/檔案中指定的其他名稱空間包含/匯入定義。 Wsutil 支援多個架構/wsdl/policy 輸入,並為每個輸入檔產生一組存根/標頭。 Wsutil 不會遵循 include 和 import 語句。 相反地,應用程式應該將包含所有必要命名空間的檔案傳入 wsutil,讓工具可以在編譯期間解析所有相依性。
WsUtil.exe /xsd:stockquote.xsd /wsdl:stockquote.wsdl /wsdl:stockquoteservice.wsdl
wsutil 會產生三組輸出檔案:
- stockquote.xsd.c stockquote.xsd.h
- stockquote.wsdl.c stockquote.wsdl.h
- stockquoteservice.wsdl.h stockquoteservices.wsdl.c
輸出檔案格式
針對每個輸出檔案,wsutil 會在標頭檔中產生外部可用的定義。 除了 C 結構定義和存根函式原型之外,所有其他 Web 服務相關定義都會封裝在名為 且具有標準化檔案名的全域結構中。
typedef struct _stockquote_wsdl {
struct {
... // list of WS_STRUCT_DESCRIPTION for all global complex types.
} globalTypes;
struct {
... // WS_ELEMENT_DESCRIPTION for all global elements.
} globalElements;
struct {
...
} messages;
struct {
...
} contracts;
} _stockquote_wsdl;
EXTERN_C _stockquote_wsdl stockquote_wsdl;
請注意,並非所有欄位都會針對全域結構產生。 只有在輸入檔中指定相關定義時,才會產生最上層欄位。 例如,不會為 xsd 檔案產生任何訊息、作業和合約欄位。
警告層級和錯誤層級
與 C 編譯器類似,WsUtil.exe支援四個警告層級和一個錯誤層級:
- WsUtil.exe會產生無法復原失敗的錯誤,例如不正確 wsdl 檔案、不正確編譯器選項等。
- WsUtil 會產生具有嚴重可復原問題的 W1 警告。 編譯器可以繼續進行,但使用者應該注意此問題。 例如,如果 wsdl 中有不支援的屬性,例如某些 WSDL Facet,且不會影響程式碼產生,就會產生 W1 警告。
- WsUtil 會產生較不嚴重問題的 W2 警告。 功能不會遺失,但應用程式開發人員可能想要知道。 就像與其他平臺不同的行為。
- WsUtil 會產生 W3 警告,對產生的程式碼的影響最小。 例如,當正規化字串與原始字串不同時,wsutil.exe會產生 W3 警告。
- W4 警告更像是「參考性」警告,而 WsUtil 問題 W4 在 WSDL 中忽略檔案屬性的情況則更像 W4。
- WX 表示編譯器會將警告視為錯誤。 例如,如果指定了 /W:1 /WX,wsutil 會產生所有 W1 警告的錯誤。
/W:{N} 會指定應該產生哪個層級的警告訊息。 /W:1 表示應該產生警告層級 1 警告,而且應該遮罩警告層級 2 和以下警告,而不會由工具產生。
/fullname
此選項表示WsUtil.exe產生識別碼的完整名稱,以避免潛在的名稱衝突。 例如,在 example.xsd 中,我們有:
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://Example.org"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" targetNamespace="http://Example.org"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xs:element name="SimpleStruct">
<xs:complexType>
<xs:sequence>
<xs:element name="a" type="xs:int" />
<xs:element name="b" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</wsdl:types>
</wsdl:definitions>
根據預設,WsUtil.exe會產生:
typedef struct SimpleStruct {
int a;
int b;
};
但是,如果已指定 /fullname 命令列選項,WsUtil.exe會產生下列結構定義:
typedef struct exmaple_xsd_SimpleStruct {
int a;
int b;
};
全球化
此工具是中性語言,而且可以當地語系化為不同的語言。 所有錯誤訊息/主控台輸出都可以當地語系化。 不過,命令列選項會保持英文。
環境變數
WsUtil.exe不會使用任何環境變數。
平台獨立
WsUtil.exe的輸出檔案與平臺無關。 存根中不會產生任何架構相依程式碼;C 編譯器將會處理任何特定架構。 存根可用於我們支援的所有平臺。
您可以在 WSDL 支援 和 架構支援 部分找到wsutil.exe輸出的描述。