본문 바로가기

Dev/Windows

SWC (Services Without Components)

/////////////////////////////////////////////////////////////////////
// C#
using System.EnterpriseServices;

ServiceConfig sc = new ServiceConfig();
sc.TrackingEnabled = true;
sc.Transaction = TransactionOption.Required;
sc.TrackingAppName = "cdecl";
sc.TrackingComponentName = "cdeclcom";

ServiceDomain.Enter(sc);

try {
    Run();
    ContextUtil.SetComplete();
}
catch (Exception ex) {
    ContextUtil.SetAbort();
}

TransactionStatus st = ServiceDomain.Leave();


/////////////////////////////////////////////////////////////////////
// C++ (native)
#include <windows.h>
#include <comsvcs.h>

IUnknown *pUnknown;
HRESULT hr = CoCreateInstance(CLSID_CServiceConfig, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);

IServiceInheritanceConfig *pInher;
hr = pUnknown->QueryInterface(IID_IServiceInheritanceConfig, (void**)&pInher);
hr = pInher->ContainingContextTreatment(CSC_Inherit);

IServiceTrackerConfig *pTracker;
hr = pUnknown->QueryInterface(IID_IServiceTrackerConfig, (void**)&pTracker);
hr = pTracker->TrackerConfig(CSC_UseTracker, L"CDECL_APP", L"CDECL_COM");

IServiceTransactionConfig *pTran;
hr = pUnknown->QueryInterface(IID_IServiceTransactionConfig, (void**)&pTran);
hr = pTran->ConfigureTransaction(CSC_NewTransaction);
hr = pTran->IsolationLevel(COMAdminTxIsolationLevelReadUnCommitted);

CoEnterServiceDomain(pUnknown);

IObjectContext *ctx;
hr = GetObjectContext(&ctx);

try {
    Run();
    ctx->SetComplete();
}
catch (...) {
    ctx->SetAbort();
    cout << "Unknown Exception " << endl;
}

ctx->Release();

CoLeaveServiceDomain(pUnknown);

pTran->Release();
pTracker->Release();
pInher->Release();
pUnknown->Release();



'Dev > Windows' 카테고리의 다른 글

SQLOLEDB Provider 의 특이한 동작  (0) 2007.09.20
COM+ Queued Components  (0) 2007.08.09
SWC (Services Without Components)  (0) 2007.08.08
RestartService  (0) 2007.07.19
MultiMedia Timer  (0) 2007.05.14
.NET Enterprise Services 성능 ( vs COM+)  (0) 2007.05.14

태그