Haga clic aquí para instalar Silverlight*
LatinoaméricaCambiar|Todos los sitios de Microsoft
Microsoft TechNet
|Suscríbase|Descarga|Contáctenos|Simplified

Extendiendo la Consola Administrativa en BizTalk Server 2006

Publicado: 19/01/2007
Carlos Medina

Contenido

• Introducción

• Consolas Administrativas en BTS2006 y MMC

• Extensiones para BTSMMC.msc

• Extensiones para ENTSSO.msc

• Recursos

• Conclusión

Introducción

Al utilizar la consola administrativa en BizTalk Server 2004 (BTS2004) es común encontrar esta pregunta ¿no tiene más funcionalidad, no puedo agregar más funciones?, la respuesta es NO. La Consola Administrativa en BTS2004 expone pocas opciones de administración a los procesos de BizTalk Server (BTS), además de no permite extender su funcionalidad.

Por su parte, BizTalk Server 2006 (BTS2006) provee nuevas consolas administrativas que ofrecen más opciones de administración que sus antecesoras en BTS2004, las cuales pueden ser extendidas para agregar nueva funcionalidad. Este artículo explicará los requisitos para extender estas consolas.

Consolas Administrativas en BTS2006 y MMC

En BTS2006 las consolas de administración para BTS y el manejo de identidades en Enterprise Single Sign-On (ENTSSO) ofrecen una mejor alternativa de configuración y manejo. La consola para BTS permite monitorizar, configurar y manipular los estados de los elementos del negocio y la consola para ENTSSO permite configurar y manipular las opciones de SSO relacionadas con el servidor.

Otro aspecto importante para las nuevas consolas es el soporte a MMC. MMC es una interfaz de usuario del tipo Multiple Document Interface (MDI) (ver Figura1) que permite la integración de varias herramientas de administración en un solo ambiente, dichas herramientas son llamadas Snap-in. Los Snap-in ejecutan un conjunto de tareas especificas y se cargan siempre en una interfaz MMC, de igual forma, un conjunto de Snap-in puede ser guardado como un archivo .MSC el cual se considera una Consola Administrativa, estos se representan como nodos ubicados al lado izquierdo de la Consola Administrativa. En BTS2006 la Consola Administrativa de BTS se llama “BTSMMS.msc” y la Consola Administrativa de ENTSSO “ENTSSO.msc”.

Otra característica importante de los Snap-in, es que permiten extender la funcionalidad inicial de la Consola Administrativa (por medio del SDK) adicionando nuevos Snap-in a la misma. Estos nuevos Snap-in se denominan “Extensions Snap-in”, los cuales son componentes que extienden la funcionalidad de otro Snap-in “Primary Snap-in”. Un “Extension Snap-in” debe cumplir los siguientes requisitos:

Implementar las interfaces necesarias para ser reconocido como un objeto en la consola MMC.

Registrar en el Registro de Windows (Windows Registry) todas las claves relacionadas.

Soportar toda la información publicada por el “Primary Snap-in”, esta información es expuesta por medio de “clipboard formats”.

Este artículo explica cómo cumplir los requisitos de un “Extension Snap-in” para agregar funcionalidad a las consolas administrativas de BTS2006, sin embargo, no pretende explicar el desarrollo de un “Snap-in” o un “Extension Snap-in” en términos generales. Más información puede encontrarse en MMC Programmer’s Guide con el SDK para MMC 2.0 y How-To Develop Snap-ins Using MMC con el SDK para MMC 3.0.

Extensiones para BTSMMC.msc

El primer requisito para crear un “Extension Snap-in” para la Consola Administrativa BTSMMC.msc es utilizar el SDK de MMC 2.0 (BTSMMC.msc no soporta el SDK de MMC 3.0), el cual define una serie de interfaces COM que deben implementar todos los objetos que pretendan estar expuestos y reconocidos en MMC. Los ejemplos de esta sección están en C++. A continuación trataremos las tres restricciones al desarrollar un “Extension Snap-in” con MMC 2.0.

Primera restricción: Interfaces MMC

Todo Snap-in para comunicarse con la consola MMC debe implementar todos los métodos de la interfaz IComponentData, la cual define los siguientes métodos: Initialize, CreateComponent, Notify, Destroy, QueryDataObject, GetDisplayInfo y CompareObjects.

#include <mmc.h>

class CCustomSnapin : public IComponentData
{
public:
    ///////////////////////////////
    // Interface IComponentData
    ///////////////////////////////
    virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Initialize(
        /* [in] */ LPUNKNOWN pUnknown);

    virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreateComponent(
        /* [out] */ LPCOMPONENT __RPC_FAR *ppComponent);

     virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Notify(
        /* [in] */ LPDATAOBJECT lpDataObject,
        /* [in] */ MMC_NOTIFY_TYPE event,
        /* [in] */ LPARAM arg,
        /* [in] */ LPARAM param);

    virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Destroy( void);

    virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryDataObject(
        /* [in] */ MMC_COOKIE cookie,
        /* [in] */ DATA_OBJECT_TYPES type,
        /* [out] */ LPDATAOBJECT __RPC_FAR *ppDataObject);

    virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetDisplayInfo(
        /* [out][in] */ SCOPEDATAITEM __RPC_FAR *pScopeDataItem);

    virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CompareObjects(
        /* [in] */ LPDATAOBJECT lpDataObjectA,
        /* [in] */ LPDATAOBJECT lpDataObjectB);

...
}

A continuación se explican cada uno de estos metodos:

MetodoDescripcion

Initialize

Inicializa el objeto

CreateComponent

Crea una instancia de un componente IComponent asociado a la interfaz IComponentData.

Notify

Este método es invocado cuando el “Extension Snap-in” es seleccionado. Desde este método el desarrollador debe invocar el código necesario para personalizar la ejecución del componente.

Destroy

En este método se debe de liberar todos los recursos utilizados por el “Extension Snap-in”.

QueryDataObject

Este método retorna un objeto que puede ser utilizado para obtener información de un “clipboard format” del “Primary Snap-in”.

GetDisplayInfo

Obtiene información que se despliega en el “Extension Snap-in”.

CompareObjects

Este método permite comparar dos objetos obtenidos con el método QueryDataObject de dos “Snap-in” diferentes, el “Extension Snap-in” y el “Primary Snap-in”.

Existen otras interfaces en el SDK como IExtendContextMenu, IExtendControlbar, IExtendTaskPad y ISnapinAbout que pueden ser utilizadas de acuerdo a las necesidades de funcionalidad del nuevo “Extension Snap-in” frente al “Primary Snap-in”. Estas necesidades se dividen en 6 grupos llamados “Extension Types”: NameSpace, ContextMenu, ToolBar, PropertySheet, Task y View. Para más información visitar MMC-Related COM Interfaces.

Segunda restricción: registro en el Windows Registry

El primer registro del Snap-in debe ser en la llave HKEY_CLASSES_ROOT\CLSID\{CLSID}, donde {CLSID} es el identificador del componente y debe estar marcada como una librería in-process server; así mismo, la librería deberá registrar el modelo de hilos a utilizar. Ver código a continuación:

HRESULT RegisterServer(HMODULE hModule,            // DLL module handle
                       const CLSID& clsid,         // Class ID
                       const _TCHAR* szFriendlyName)       //   IDs
{
    // Get server location.
    _TCHAR szModule[512] ;
    DWORD dwResult =
        ::GetModuleFileName(hModule, szModule, sizeof(szModule)/sizeof(_TCHAR)) ;
    
    assert(dwResult != 0) ;
    
    // Get CLSID
    LPOLESTR wszCLSID = NULL ;
    HRESULT hr = StringFromCLSID(clsid, &wszCLSID) ;
    
    assert(SUCCEEDED(hr)) ;

    MAKE_TSTRPTR_FROMWIDE(pszCLSID, wszCLSID);

    // Build the key CLSID\\{...}
    _TCHAR szKey[64] ;
    _tcscpy_s(szKey, _T("CLSID\\")) ;
    _tcscat_s(szKey, pszCLSID) ;
    
    // Add the CLSID to the registry.
    setKeyAndValue(szKey, NULL, szFriendlyName) ;
    
    // Add the server filename subkey under the CLSID key.
    setKeyAndValue(szKey, _T("InprocServer32"), szModule) ;

    // set the threading model
    _tcscat_s(szKey, _T("\\InprocServer32"));
    setValue(szKey, _T("ThreadingModel"), _T("Apartment"));
    
    // Free memory.
    CoTaskMemFree(wszCLSID) ;
    
    return S_OK ;
}

Todos los nuevos Snap-in (extensiones o simples) deberán registrarse en la clave HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\SnapIns\{snapinCLSID}, donde {snapinCLSID} es el identificador que representa el Snap-in. Por último se debe generar un registro en la clave que define las extensiones del “Primary Snap-in” extendido en la clave HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\SnapIns\{primaryCLSID}\NodeTypes\Extensions\{ExtensionType}\{ snapinCLSID } donde {primaryCLSID} identifica al “Primary Snap-in”, {snapinCLSID} identifica al “Extension Snap-in” y {ExtensionType} es el tipo de extensión al cual pertenece el “Exntesion Snap-in”.

HRESULT RegisterSnapin(const CLSID& clsid,         // Class ID
                       const _TCHAR* szNameString,   // NameString
                       const CLSID& clsidAbout,		// Class Id for About Class
                       const BOOL fSupportExtensions)
{
    // Get CLSID
    LPOLESTR wszCLSID = NULL ;
    LPOLESTR wszAboutCLSID = NULL;
    LPOLESTR wszExtendCLSID = NULL;
    LPOLESTR wszNodeCLSID = NULL;
    EXTENDER_NODE *pNodeExtension;
    _TCHAR szKeyBuf[1024] ;
    HKEY hKey;


    HRESULT hr = StringFromCLSID(clsid, &wszCLSID) ;
    
    if (IID_NULL != clsidAbout)
        hr = StringFromCLSID(clsidAbout, &wszAboutCLSID);

    MAKE_TSTRPTR_FROMWIDE(pszCLSID, wszCLSID);
    MAKE_TSTRPTR_FROMWIDE(pszAboutCLSID, wszAboutCLSID);

   
    // Add the CLSID to the registry.
    setSnapInKeyAndValue(pszCLSID, NULL, _T("NameString"), szNameString) ;
    if (IID_NULL != clsidAbout)
        setSnapInKeyAndValue(pszCLSID, NULL, _T("About"), pszAboutCLSID);
    
    if (fSupportExtensions) {
        // Build the key NodeType 
        setSnapInKeyAndValue(pszCLSID, _T("NodeTypes"), NULL, NULL);
        
        _TCHAR szKey[64] ;
        _tcscpy_s(szKey, pszCLSID) ;
        _tcscat_s(szKey, _T("\\NodeTypes")) ;
        setSnapInKeyAndValue(szKey, pszCLSID, NULL, NULL);
    }

    // register each of the node extensions
    for (pNodeExtension = &(_NodeExtensions[0]);*pNodeExtension->szDescription;pNodeExtension++)
    {
        hr = StringFromCLSID(pNodeExtension->guidNode, &wszExtendCLSID);
        MAKE_TSTRPTR_FROMWIDE(pszExtendCLSID, wszExtendCLSID);
        _tcscpy_s(szKeyBuf, _T("SOFTWARE\\Microsoft\\MMC\\NodeTypes\\"));
        _tcscat_s(szKeyBuf, pszExtendCLSID);
		
        switch (pNodeExtension->eType) {
        case NameSpaceExtension:
            _tcscat_s(szKeyBuf, _T("\\Extensions\\NameSpace"));
            break;
        case ContextMenuExtension:
            _tcscat_s(szKeyBuf, _T("\\Extensions\\ContextMenu"));
            break;
        case ToolBarExtension:
            _tcscat_s(szKeyBuf, _T("\\Extensions\\ToolBar"));
            break;
        case PropertySheetExtension:
            _tcscat_s(szKeyBuf, _T("\\Extensions\\PropertySheet"));
            break;
        case TaskExtension:
            _tcscat_s(szKeyBuf, _T("\\Extensions\\Task"));
            break;
        case ViewExtension:
            _tcscat_s(szKeyBuf, _T("\\Extensions\\View"));
            break;
        default:
            break;
        }

        // Create and open key and subkey.
        long lResult = RegCreateKeyEx(HKEY_LOCAL_MACHINE ,
            szKeyBuf,
            0, NULL, REG_OPTION_NON_VOLATILE,
            KEY_ALL_ACCESS, NULL,
            &hKey, NULL) ;

        if (lResult != ERROR_SUCCESS)
        {
            return FALSE ;
        }

        hr = StringFromCLSID(pNodeExtension->guidExtension, &wszNodeCLSID);
        assert(SUCCEEDED(hr));

        MAKE_TSTRPTR_FROMWIDE(pszNodeCLSID, wszNodeCLSID);
        // Set the Value.
        if (pNodeExtension->szDescription != NULL)
        {
            RegSetValueEx(hKey, pszNodeCLSID, 0, REG_SZ,
                (BYTE *)pNodeExtension->szDescription,
                (_tcslen(pNodeExtension->szDescription)+1)*sizeof(_TCHAR)) ;
        }

        RegCloseKey(hKey) ;

        CoTaskMemFree(wszExtendCLSID);
        CoTaskMemFree(wszNodeCLSID);
    }


    // Free memory.
    CoTaskMemFree(wszCLSID) ;
    if (IID_NULL != clsidAbout)
        CoTaskMemFree(wszAboutCLSID);
    
    return S_OK ;
}

Los {primaryCLSID} disponibles para extender la Consola Administrativa de BTS son:

SnapInClassId

AdapterHandlerNodeClassId

8EE13346-80CB-48e1-BED9-3026D8BDEE19

AdapterHandlersFolderClassId

C5D66CB0-3BD9-48c4-9CF3-3E43DF4EEF0C

AdapterNodeClassId

06D98E3D-69FD-4b2e-8541-5B7A6CB2BC75

AdaptersFolderClassId

AE9A9BFE-F256-463b-B243-157ED849865F

AllArtifactsNodeClassId

A8475A0D-1250-42e6-9BBA-14EB826B1639

ApplicationNodeClassId

44D88BF2-88D1-46e0-93EB-5BD842FDED31

ApplicationsFolderClassId

5D1D43A2-4F97-42BE-815C-85AD543D5A39

BrandingFormViewClassId

776EFDEF-8A6D-42c6-BEB7-97244EC59C11

BrandingNodeClassId

1731A110-6B5E-42a8-88D6-28EEAADFAB00

ComponentDataClassId

9A77C670-2FFD-4ab4-8F20-169C08FB8320

DeploymentManagerNodeClassId

A83A6BCE-1F2B-46b7-BF68-32FCDCAC8234

FileNodeClassId

E736A57A-043D-4fb7-8126-3A84A8006435

FilesFolderClassId

4715E8CB-EC2C-448c-B36B-1963C8945CED

GroupHubViewClassId

91F7842E-7098-4907-A659-B7435A861F20

GroupNodeClassId

DF0E5E6E-5CE1-4f37-8E70-1880C799D924

HostInstanceNodeClassId

18935880-8812-4764-A2C0-2F0A56B12D10

HostInstancesFolderClassId

E1787F0E-FAC0-462a-A332-1B2BD4E5A0FE

HostNodeClassId

E6698C2E-F40B-44b9-B457-31B3277C17E8

HostsFolderClassId

275C61CA-C99D-4ef0-90D1-88D3A1036BEE

MapNodeClassId

216E2A9D-4BE1-4e3e-A3F6-38094D2D0F07

MapsFolderClassId

CF50E70D-8DC4-48c1-AB77-81BD3632304C

MessageBoxesFolderClassId

6FE3712E-1BC7-4b5b-B72D-A0A2342CB713

MessageBoxNodeClassId

00FCDED7-199B-4475-A4BD-6FB1A2AE0FE3

OrchestrationNodeClassId

8B9F9182-9089-45e7-BE0D-A00AAD57E168

OrchestrationsFolderClassId

86DFE3A8-A8EC-41cc-B242-440A96024723

PartiesFolderClassId

670FB05E-7AE8-48b4-BEEE-357193C20B13

PartyNodeClassId

B77986C5-5D69-47e6-994D-943DD2EB3BD5

PipelineNodeClassId

3F5C2406-E59D-40ca-9965-B6BE3C9AA6D8

PipelinesFolderClassId

FFB91936-34D6-40bd-AC09-33A60DE5F8A8

PlatformSettingsNodeClassId

C5F60214-BD1B-478a-9BD1-66DFEB20F37D

PoliciesFolderClassId

F7582181-F89D-4c8b-A64A-C47354515BB2

PolicyNodeClassId

BC1553E5-A0FC-432e-A6EF-C6275CDB6ED8

ReceiveLocationNodeClassId

0DCB6337-8321-4e78-8CD0-A113F5B93513

ReceiveLocationsFolderClassId

6E857B73-FACE-4e48-B1C4-48BB2BC6ED55

ReceivePortNodeClassId

6830BA45-5693-4670-868C-E359AD7C41C0

ReceivePortsFolderClassId

1F15B489-D2E5-4b85-88C3-1C2C795BE198

ReferenceNodeClassId

81374D02-8276-49d4-A060-7FC6C65C13D2

ReferencesFolderClassId

ACC6C245-BA0E-4685-B2D9-0A32C1AC2DCE

SchemaNodeClassId

1E03C8A9-1D67-4e7f-A394-436B3D274292

SchemasFolderClassId

6F1668A0-63F1-45a0-AD0D-EC8D736EDB60

SecurityRoleNodeClassId

1EDDAD60-5536-4cd9-8DE1-F2837FC56C27

SecurityRolesFolderClassId

92D4A52B-36D3-4e03-8174-EB0CBDFAC0AD

SendPortGroupNodeClassId

4F1F38C6-6D01-4cf2-B411-A52078A403C5

SendPortGroupsFolderClassId

DC862FAA-0F1C-4aa3-BD70-5C5149D5FB6B

SendPortNodeClassId

3659D58F-3568-4836-8900-00E450F9C585

SendPortsFolderClassId

DE86A2A2-4D49-454d-996E-87BCE5B4E530

ServerNodeClassId

335EE879-18F8-4107-BB25-B7AB780A4349

ServersFolderClassId

1BBBB023-8F3F-4dbc-801B-8D337EF1ADA2

ServiceLinkRoleNodeClassId

B283314F-100B-41eb-9C9A-D715F1B5F1B3

ServiceLinkRolesFolderClassId

4737E823-3ABD-4c9b-8A48-8A22F749F9C3

SnapInAboutClassId

B3B98980-D5B5-47e5-AEC1-05E3B1A9D40E

(Tabla de {primaryCLSID} BTS)

Una vez realizados estos registros, el nuevo “Extension Snap-in” podrá ser visualizado en la consola MMC.

Tercera restricción: clipboard formats

La Consola Administrativa de BTS usa clipboard format especiales que deben ser declarados y manejados por nuevos “Extension Snap-in”.

ClipboardFormatClipboardFormat

AdapterName

{3963A4BF-0182-47bc-B24C-7334FD0DE485}

ApplicationName

{913A464C-3F88-482c-946B-77C1E9F3C95F}

MgmtDBName

{BD0C1230-A9F1-4CD4-A45F-C07CA81844F0}

MgmtDBServer

{410C1FBB-6611-4692-8C1B-AEBA2FE22A40}

ColumnSetId

CCF_COLUMN_SET_ID

Description

CCF_DESCRIPTION

DisplayName

CCF_DISPLAY_NAME

HtmlDetails

CCF_HTML_DETAILS

MmcDynamic

CCF_MMC_DYNAMIC_EXTENSIONS

NodeType

CCF_NODETYPE

NodeTypeName

CCF_SZNODETYPE

Preloads

CCF_SNAPIN_PRELOADS

SnapInClsId

CCF_SNAPIN_CLASSID

WindowTitle

CCF_WINDOW_TITLE

Estos “clipboard formats” deben ser registrados usando la función RegisterClipboardFormat de Win32 tal como se muestra a continuación:

#define _T_CCF_NODETYPE _T("CCF_NODETYPE")
#define _T_CCF_SERVER_NAME _T("{410C1FBB-6611-4692-8C1B-AEBA2FE22A40}")

UINT CCustomSnapin::s_cfNodeType    = RegisterClipboardFormat(_T_CCF_NODETYPE);
UINT CCustomSnapin::s_cfServerName  = RegisterClipboardFormat(_T_CCF_SERVER_NAME);

Una vez registrados, su valor puede ser extraído usando el siguiente código:

HRESULT CCustomSnapin::ExtractObjectTypeGUID( IDataObject* piDataObject, GUID* pguidObjectType )
{
    return ExtractData( piDataObject, s_cfNodeType, (PBYTE)pguidObjectType, sizeof(GUID) );
}

HRESULT CCustomSnapin::ExtractData( IDataObject* piDataObject,  // 
                                           CLIPFORMAT   cfClipFormat,  // clipboard format name
                                           BYTE*        pbData,  //
                                           DWORD        cbData ) // 
{
    HRESULT hr = S_OK;
    
    FORMATETC formatetc = {cfClipFormat, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
    STGMEDIUM stgmedium = {TYMED_HGLOBAL, NULL};
    
    stgmedium.hGlobal = ::GlobalAlloc(GPTR, cbData);
    do // false loop
    {
        if (NULL == stgmedium.hGlobal)
        {
            hr = E_OUTOFMEMORY;
            break;
        }
        hr = piDataObject->GetDataHere( &formatetc, &stgmedium );
        if ( FAILED(hr) )
        {
            break;
        }
        
        BYTE* pbNewData = reinterpret_cast<BYTE*>(stgmedium.hGlobal);
        if (NULL == pbNewData)
        {
            hr = E_UNEXPECTED;
            break;
        }
        ::memcpy( pbData, pbNewData, cbData );
    } while (FALSE); // false loop
    
    if (NULL != stgmedium.hGlobal)
    {
        ::GlobalFree(stgmedium.hGlobal);
    }
    return hr;
} 

Extensiones para ENTSSO.msc

La Consola Administrativa para ENTSSO (ENTSSO.msc) soporta nuevos “Extension Snap-in” desarrollados con el SDK de MMC 3.0. Este SDK está escrito en .Net 2.0, y simplifica la construcción de “Extension Snap-in” debido al modelo de código manejado.

Primera restricción: Interfaces MMC

El SDK de MMC 3.0 provee dos clases que permiten extender un “Primary Snap-in”, estas son NamespaceExtension y PropertySheetExtension. La clase NamespaceExtension es utilizada para crear nuevos nodos y compartir información con el “Primary Snap-in”, mientras que la clase PropertySheetExtension puede adicionar nuevas ventadas con propiedades o nuevos nodos de resultados relacionados con el “Primary Snap-in”.

[SnapInSettings("{8cfb61db-1e85-4d96-ac13-7011a2085aad}", // snapin CLSID
    DisplayName = "ENTSSOSnapInSample",
    Description = "Simple ENTSSO SnapIn")]
public class ExtendedSnapIn : NamespaceExtension
{
}

Segunda restricción: registro en el Windows Registry

A diferencia del MMC 2.0, registrar un “Extension Snap-in” es más fácil ya que la utilidad de línea de comando InstallUtil.exe generará las claves en el Windows Registry automáticamente. Para esto es necesario declarar una clase que derive de SnapInInstaller y soporte el atribute RunInstallerAttribute en la misma librería del “Extension Snap-in”.

[RunInstaller(true)]
public class InstallUtilSupport : SnapInInstaller
{
}

La utilidad se ejecuta de forma sencilla por medio de la línea de comando.

C:\Windows\Microsoft.Net\Framework\v2.0.50727>InstallUtil.exe ENTSSOSimpleSnapin.dll

Para que esta utilidad funcione correctamente se deben declarar los identificadores que representan el “Extension Snap-in” y el “Primary Snap-in”. Para esto se deben implementar las clases SnapInSettingsAttribute y ExtendsNodeTypeAttribute a la clase que establece el “Extension Snap-in”, estas clases establecerán los identificadores para el “Extension Snap-in” y el “Primary Snap-in” respectivamente.

[ExtendsNodeType("{5D1D43A2-4F97-42BE-815C-85AD543D5A39}")] // primary CLSID
[SnapInSettings("{8cfb61db-1e85-4d96-ac13-7011a2085aad}", // snapin CLSID
    DisplayName = "ENTSSOSnapInSample",
    Description = "Simple ENTSSO SnapIn")]
public class ExtendedSnapIn : NamespaceExtension
{
}

Los identificadores de “Primary Snap-in” disponible para extender la Consola Administrativa de ENTSSO son:

SnapInClassId

SSOAdminMMCClassId

6C4E1E81-EC07-44ef-B19C-47BD7378324F

(Tabla {primaryCLSID} ENTSSO)

Una vez ejecutada la utilidad, el nuevo “Extension Snap-in” podrá ser visualizado en la consola MMC.

Tercera restricción: clipboard formats

La Consola Administrativa de ENTSSO no expone información pública que un “Extesion Snap-in” deba soportar por medio de los “clipboard formats”.

Recursos

BizTalk 2004 Management Tool: herramienta administrativa con más opciones que la tradicional consola administrativa de BizTalk Server 2004.

BizTalk Explorer: otra herramienta administrativa con más opciones que la tradicional consola administrativa de BizTalk Server 2004.

MMC 2.0 Samples: ejemplos en VC++ con implementaciones de Snap-in usando el SDK de MMC 2.0.

MMC 3.0 Samples: ejemplos en VC# de programación de nuevos Snap-in usando el SDK de MMC 3.0.

MMC .Net Library: esta es una librería de .Net que soporta el desarrollo de Snap-in en MMC 2.0.

Extending the BizTalk Server Administration Console: ejemplo de BTS2006 que extiende la funcionalidad de la Consola Administrativa usando VC++ y el SDK de MMC 2.0.

Conclusión

En BizTalk Server 2006 se puede extender la funcionalidad actual de las consolas administrativas utilizando el SDK de MMC 2.0 y MMC 3.0, logrando enriquecer de esta forma la administración, monitoreo y manejo de identidades (entre otras características) por parte de los administradores y desarrolladores.



©2017 Microsoft Corporation. Todos los derechos reservados. Póngase en contacto con nosotros |Aviso Legal |Marcas registradas |Privacidad
Microsoft