共用方式為


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輸出的描述。