Megosztás a következőn keresztül:


Ügyféloldali szolgáltatásműveletek

Az ügyféloldali szolgáltatásművelet elrendezése a következő:

Ügyféloldali szolgáltatásműveletek aláírása

typedef HRESULT(CALLBACK *ICalculator_Add)(WS_SERVICE_PROXY* serviceProxy, 
                                           WS_HEAP* heap, 
                                           ULONG a, ULONG b, ULONG* result, 
                                           const WS_CALL_PROPERTY* callProperties, 
                                           const ULONG callPropertyCount, 
                                           const WS_ASYNC_CONTEXT* asyncContext, 
                                           WS_ERROR* error);

Az ügyféloldali szolgáltatásműveletek memóriahasználati szempontjai

A szolgáltatásművelet hívása egy WS_HEAP* paramétert vesz igénybe. Ez az üzenettörzsek paraméterekhez való szerializálásához/deszerializálásához szükséges paraméter.

Az alkalmazásnak meg kell hívnia WsResetHeap, hogy a hívás sikeres volt-e. Ha a hívás sikeres volt, és kimenő paraméterekkel rendelkezik, az alkalmazásnak közvetlenül azután kell meghívnia WsResetHeap, hogy a kimenő paraméterekkel végzett.

Az alkalmazásnak memóriát kell lefoglalnia a WsAllocparaméterhez. Előfordulhat, hogy a szolgáltatásproxynak újra kell helyeznie őket, hogy a megadott mutatók felülírva legyenek. Az ilyen memória felszabadítására tett kísérlet miatt az alkalmazás összeomlik.

Ügyféloldali szolgáltatásművelet és WS_HEAP

HRESULT hr = IProcessOrder_ProcessOrder(serviceProxy, heap, orderNumber, &orderReceipt, NULL, 0, NULL, error);
if(FAILED(hr))
    goto error;
hr = ProcessReceipt(orderReceipt);
WsResetHeap(heap);
if(FAILED(hr))
    goto error;
hr = IProcessOrder_CompleteOrder(serviceProxy, heap, orderNumber, &orderMemo, NULL, 0, NULL, error);
if(FAILED(hr))
    goto error;
hr = ProcessMemo(orderMemo);
WsResetHeap(heap);
if(FAILED(hr))
    goto error;

Hibaparaméter

Az alkalmazásnak mindig át kell adnia a hibaparamétert a következőnek:

  • Részletes hibainformációk lekérése, ha hiba történik a szolgáltatásműveleti hívás során.
  • Kérje le a hibaobjektumot, ha a szolgáltatás hibát adott vissza. A hiba a hibaobjektumban található. Ebben az esetben a szolgáltatásműveletből visszaadott HRESULT érték WS_E_ENDPOINT_FAULT_RECEIVED (lásd Windows Web Services Visszatérési értékek).

Ügyféloldali szolgáltatásműveletek hívási tulajdonságai

A hívás tulajdonságai lehetővé teszik, hogy az alkalmazások egyéni beállításokat adjanak meg egy adott híváshoz. Jelenleg csak egy hívástulajdonság érhető el a szolgáltatásmodellben, WS_CALL_PROPERTY_CALL_ID.

WS_CALL_PROPERTY callProperties[1] = {0};
callProperties[0].id = WS_CALL_PROPERTY_CALL_ID;
callProperties[0].value = 5;

HRESULT hr = IProcessOrder_ProcessOrder(serviceProxy, heap, orderNumber, &orderReceipt,  callProperties, WsCountOf(callProperties), NULL, error);
if(FAILED(hr))
    goto error;
//:
//:
hr = IProcessOrder_CompleteOrder(serviceProxy, heap, orderNumber, &orderReceipt, callProperties, WsCountOf(callProperties), NULL, error);
if(FAILED(hr))
    goto error;

//:
//:
//:
// On a separate thread 
// In this case both the calls belong to call group 5, and will abandon as a result of the call to WsAbandonCall. 
hr = WsAbandonCall(serviceProxy, 5, error);

Hívás megszakítása

Gyakran kívánatos a hívás eredményeinek elhagyása annak érdekében, hogy a vezérlőt vissza lehessen adni az alkalmazásnak, hogy a tényleges hívásvégzítést az infrastruktúra kezelje. A szolgáltatásproxy ezt a létesítményt WsAbandonCallkeresztül biztosítja.

Vegye figyelembe, hogy előfordulhat, hogy a hívó vezérlőjét nem adja vissza azonnal, az egyetlen garancia, hogy a szolgáltatásproxy-futtatókörnyezet biztosítja, hogy nem várja meg, amíg egy I/O-hez kötött művelet befejeződik, mielőtt visszaadhatja az irányítást a hívónak.

A WsAbandonCallhívásával megszakítható az ügyféloldali szolgáltatásművelet hívása. Szolgáltatásproxyt és hívásazonosítót igényel. A hívásazonosító egy szolgáltatásművelet hívástulajdonságainak részeként van megadva.

Ha a hívásazonosító 0, akkor a szolgáltatásproxy az adott példány összes függőben lévő hívását megszakítja.

Hívás időtúllépései

Alapértelmezés szerint egy szolgáltatásproxy 30 másodperces időtúllépést biztosít minden híváshoz. A hívás időtúllépését módosíthatja WS_PROXY_PROPERTY_CALL_TIMEOUT szolgáltatásproxy tulajdonság, amikor szolgáltatásproxyt hoz létre WsCreateServiceProxy.

Az időtúllépés elérése után a hívás el lesz hagyva.

Értékek visszaadva

Minden sikeres HRESULT értéket sikerként kell kezelni, és minden hibaértéket hibaként kell kezelni. Az alábbiakban néhányat a HRESULT értékek közül, amelyekre az alkalmazás számíthat:

  • WS_S_ASYNC: A hívás aszinkron módon fejeződik be.
  • NOERROR: A hívás sikeresen befejeződött.
  • WS_E_OPERATION_ABANDONED: A hívás megszakadt. A hibaobjektum tartalmazza a megszakítás okát.
  • WS_E_INVALID_OPERATION: A szolgáltatásproxy nincs megfelelő állapotban a híváshoz, ellenőrizze a szolgáltatásproxy állapotát a szolgáltatásproxy állapotának megállapításához.

A visszatérési értékek teljes listáját a Windows Web Services Visszatérési értékekcímű témakörben találja.

Példakódok

Példakódokért tekintse meg a következőket: