共用方式為


服務 Proxy

服務 Proxy 是服務的用戶端 Proxy。 服務 Proxy 可讓應用程式透過 通道 做為方法呼叫,透過 傳送和接收 訊息。

服務 Proxy 會視需要建立、開啟、用來呼叫服務,並在不再需要時關閉。 或者,應用程式可能會重複使用服務 Proxy 重複連線到相同的服務,而不需要花費一次以上的時間和資源來初始化服務 Proxy。 下圖說明服務 Proxy 可能狀態的流程,以及函式呼叫或從某個狀態導向到另一個狀態的事件。

圖表,其中顯示服務 Proxy 狀態,以及函式會呼叫或事件,從某個狀態導向另一個狀態。

這些服務 Proxy 狀態會在 WS_SERVICE_PROXY_STATE 列舉中列舉。

如上圖和下列程式代碼所示,服務 Proxy 是由呼叫 WsCreateServiceProxy 函式所建立。 作為此呼叫的參數,WWSAPI 提供下列列舉:

它也接受使用下列資料類型的選擇性參數:

建立服務 Proxy 之後,WsCreateServiceProxy 函式會透過 out 參數傳回服務 Proxy WS_SERVICE_PROXY的參考。

WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
    WS_TCP_CHANNEL_BINDING, 
    WS_CHANNEL_TYPE_DUPLEX_SESSION, 
    NULL, 
    NULL, 
    0, 
    NULL,
    0,
    &serviceProxy, 
    error);

建立服務 Proxy 之後,應用程式可以呼叫 WsOpenServiceProxy函式,傳遞包含服務端點網路位址的 結構,以開啟服務 Proxy 以與服務通訊。

WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);

開啟服務 Proxy 時,應用程式可以使用它來呼叫服務。

hr = Add(
    serviceProxy, 
    1, 
    2, 
    &result, 
    NULL, 
    0, 
    NULL, 
    error);

當應用程式不再需要服務 Proxy 時,它會呼叫 WsCloseServiceProxy 函式來關閉服務 Proxy。 它也會呼叫 WsFreeServiceProxy來釋放相關聯的記憶體。

hr = WsCloseServiceProxy(
    serviceProxy, 
    NULL, 
    error);
hr = WsFreeServiceProxy(
    serviceProxy, 
    error);

重複使用服務 Proxy

或者,呼叫 WsCloseServiceProxy 之後, 應用程式可以藉由呼叫 WsResetServiceProxy 函式來重複使用服務 Proxy。

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

如需如何在不同內容中使用服務 Proxy 的詳細資訊,請參閱下列主題:

安全

當您使用 WWSAPI 服務 Proxy API 時,應仔細注意下列應用程式設計考慮:

  • 服務 Proxy 不會執行基本配置檔 2.0 驗證和 XML 串行化以外的任何數據驗證。 應用程式有責任在呼叫中驗證其接收回的參數中包含的數據。
  • 使用 WS_PROXY_PROPERTY_ID 列舉 WS_PROXY_PROPERTY_MAX_PENDING_CALLS值來設定服務 Proxy 上擱置的呼叫數目上限,可保護執行緩慢的伺服器。 預設最大值為 100。 修改預設值時,應用程式必須小心。
  • 服務 Proxy 不提供與伺服器通訊之 WS_SECURITY_DESCRIPTION 結構中指定的安全性保證。
  • 在服務 Proxy 上修改 訊息通道 預設值時,請小心。 在您修改任何相關屬性之前,請先閱讀與訊息和通道相關聯的安全性考慮。
  • 服務 Proxy 會加密它保留在記憶體中的所有認證。

下列 API 元素與服務 Proxy 相關。

回調 描述
WS_PROXY_MESSAGE_CALLBACK 當輸入訊息的標頭即將透過或剛收到輸出訊息標頭時叫用。

 

列舉 描述
WS_CALL_PROPERTY_ID 列舉在客戶端服務作業上設定呼叫的選擇性參數。
WS_PROXY_PROPERTY_ID 列舉設定服務 Proxy 的選擇性參數。
WS_SERVICE_PROXY_STATE 服務 Proxy 的狀態。

 

功能 描述
WsAbandonCall 放棄指定服務 Proxy 上的指定呼叫。
WsAbortServiceProxy 取消指定服務 Proxy 上所有暫止的輸入和輸出。
WsCall 僅限內部。 將自變數串行化為訊息,並透過通道傳送。
WsCloseServiceProxy 關閉服務 Proxy 以進行通訊。
WsCreateServiceProxy 建立服務 Proxy。
WsFreeServiceProxy 釋放與服務 Proxy 相關聯的記憶體。
WsGetServiceProxyProperty 擷取指定的服務 Proxy 屬性。
WsOpenServiceProxy 開啟服務 Proxy 至服務端點。
WsResetServiceProxy 重設服務 Proxy。

 

處理 描述
WS_SERVICE_PROXY 用來參考服務 Proxy 的不透明類型。

 

結構 描述
WS_CALL_PROPERTY 指定呼叫屬性。
WS_PROXY_PROPERTY 指定 Proxy 屬性。