Översikt över integrering med COM+-program
Windows Communication Foundation (WCF) ger en omfattande miljö för att skapa distribuerade program. Om du redan använder komponentbaserad programlogik i COM+, kan du använda WCF för att utöka din befintliga logik i stället för att behöva skriva om den. Ett vanligt scenario är när du vill exponera befintlig AFFÄRSlogik för COM+ eller Enterprise Services via Webbtjänster.
När ett gränssnitt på en COM+-komponent exponeras som en webbtjänst bestäms specifikationen och kontraktet för dessa tjänster av en automatisk mappning som utförs vid initieringstiden för programmet. I följande lista visas den konceptuella modellen för den här mappningen:
En tjänst definieras för varje exponerad COM-klass.
Kontraktet för tjänsten härleds direkt från den valda komponentens gränssnittsdefinition med möjlighet till metodundantag som definierats i konfigurationen.
Åtgärderna i kontraktet härleds direkt från metoderna i komponentens gränssnittsdefinition.
Parametrarna för dessa åtgärder härleds direkt från COM-samverkanstypen som motsvarar komponentens metodparametrar.
Standardadresser och transportbindningar för tjänsten tillhandahålls i en tjänstkonfigurationsfil, men dessa kan konfigureras om efter behov.
Kommentar
Kontrakten för de exponerade webbtjänsterna förblir konstanta så länge COM+-gränssnitten och konfigurationen förblir oförändrade. En ändring av flera gränssnitt uppdaterar inte automatiskt de tillgängliga tjänsterna och kräver att verktyget COM+ Service Model Configuration (ComSvcConfig.exe) körs igen.
Autentiserings- och auktoriseringskraven för COM+-programmet och dess komponenter fortsätter att tillämpas när de används som en webbtjänst.
Om anroparen initierar en webbtjänsttransaktion markeras komponenter som transaktionslista inom transaktionsomfånget.
Följande steg krävs för att exponera en COM+-komponents gränssnitt som en webbtjänst utan att ändra komponenten:
Avgör om COM+-komponentens gränssnitt kan exponeras som en webbtjänst.
Välj ett lämpligt värdläge.
Använd konfigurationsverktyget för COM+ Service Model (ComSvcConfig.exe) för att lägga till en webbtjänst för gränssnittet. Mer information om hur du använder ComSvcConfig.exe finns i How to: Use the COM+ Service Model Configuration Tool.
Konfigurera eventuella ytterligare tjänstinställningar i programkonfigurationsfilen. Mer information om hur du konfigurerar en komponent finns i Så här konfigurerar du COM+-tjänstinställningar.
Gränssnitt som stöds
Det finns vissa begränsningar för vilken typ av gränssnitt som kan exponeras som en webbtjänst. Följande typer av gränssnitt stöds inte:
Gränssnitt som skickar objektreferenser som parametrar – följande begränsade objektreferensmetod beskrivs i avsnittet Stöd för begränsad objektreferens.
Gränssnitt som skickar typer som inte är kompatibla med .NET Framework COM-samverkanskonverteringar.
Gränssnitt för program som har programpooler aktiverade när de hanteras av COM+.
Gränssnitt för komponenter som har markerats som privata för programmet.
COM+-infrastrukturgränssnitt.
Gränssnitt från systemprogrammet.
Gränssnitt från Enterprise Services-komponenter som inte har lagts till i den globala sammansättningscacheminnet.
Stöd för begränsad objektreferens
Eftersom ett antal distribuerade COM+-komponenter använder objekt efter referensparametrar, som att returnera ett ADO Recordset-objekt, innehåller COM+-integrering begränsat stöd för objektreferensparametrar. Stödet är begränsat till objekt som implementerar IPersistStream
COM-gränssnittet. Detta inkluderar ADO Recordset-objekt och kan implementeras för programspecifika COM-objekt.
För att aktivera det här stödet tillhandahåller verktyget ComSvcConfig.exe växeln allowreferences som inaktiverar den vanliga metodens signaturparameter och kontrollerar att verktyget körs för att säkerställa att objektreferensparametrarna inte används. Dessutom måste de objekttyper som du skickar som parametrar namnges och identifieras i <persistableTypes>
det konfigurationselement som är underordnat elementet <comContract>
.
När den här funktionen används använder IPersistStream
COM+-integreringstjänsten gränssnittet för att serialisera eller deserialisera objektinstansen. Om objektinstansen inte stöder IPersistStream
genereras ett undantag.
I ett klientprogram kan metoderna på PersistStreamTypeWrapper objektet användas för att skicka in ett objekt till en tjänst och på liknande sätt hämta ett objekt.
Kommentar
På grund av serialiseringsmetodens anpassade och plattformsspecifika karaktär passar detta bäst för användning mellan WCF-klienter och WCF-tjänster.
Välja värdläge
COM+ exponerar webbtjänster i något av följande värdlägen:
COM+-värdbaserad
Webbtjänsten finns i programmets dedikerade COM+-serverprocess (Dllhost.exe). Det här läget kräver att programmet uttryckligen startas innan det kan ta emot webbtjänstbegäranden. COM+-alternativen "Kör som en NT-tjänst" eller "Lämna körs när den är inaktiv" kan användas för att förhindra inaktiv avstängning av programmet och dess tjänster. Det här läget ger både webbtjänst- och DCOM-åtkomst till serverprogrammet.
Webbhanterad
Webbtjänsten finns i en webbserverarbetsprocess. Det här läget kräver inte att COM+ är aktivt när den första begäran tas emot. Om programmet inte är aktivt när den här begäran tas emot aktiveras det automatiskt innan begäran bearbetas. Det här läget ger även både webbtjänst- och DCOM-åtkomst till serverprogrammet, men orsakar ett processhopp för webbtjänstbegäranden. Detta kräver vanligtvis att klienten aktiverar personifiering. I WCF kan detta göras med AllowedImpersonationLevel egenskapen WindowsClientCredential för klassen, som används som en egenskap för den generiska ChannelFactory<TChannel> klassen, samt Impersonation uppräkningsvärdet.
Webbhanterad i processen
Webbtjänsten och COM+-programlogik finns i webbserverns arbetsprocess. Detta ger automatisk aktivering av det webbaserade läget utan att orsaka ett processhopp för webbtjänstbegäranden. Nackdelen är att serverprogrammet inte kan nås via DCOM.
Säkerhetsöverväganden
Precis som andra WCF-tjänster administreras säkerhetsinställningarna för den exponerade tjänsten via konfigurationsinställningar för WCF-kanalen. Traditionella DCOM-säkerhetsinställningar, till exempel DCOM-inställningar för datoromfattande behörigheter, tillämpas inte. Om du vill framtvinga COM+-programroller måste auktoriseringen "åtkomstkontroller på komponentnivå" vara aktiverad för komponenten.
Användningen av en icke-skyddad bindning kan lämna kommunikationen öppen för manipulering eller avslöjande av information. För att förhindra detta rekommenderar vi att du använder en säker bindning.
För com+-värdbaserade lägen och webbaserade lägen måste klientprogram tillåta serverprocessen att personifiera klientanvändaren. Detta kan göras i WCF-klienter genom att ange personifieringsnivån till Impersonation.
Med Internet Information Services (IIS) eller Windows Process Activation Service (WAS) med HTTP-transporten kan verktyget Httpcfg.exe användas för att reservera en transportslutpunktsadress. I andra konfigurationer är det viktigt att skydda mot oseriösa tjänster som fungerar som den avsedda tjänsten. För att förhindra att en falsk tjänst startar vid önskad slutpunkt kan den legitima tjänsten konfigureras att köras som en NT-tjänst. Detta gör det möjligt för den legitima tjänsten att göra anspråk på slutpunktsadressen före eventuella oseriösa tjänster.
När du exponerar ett COM+-program med konfigurerade COM+-roller som en webbaserad tjänst måste "Starta IIS-processkonto" läggas till i någon av programmets roller. Det här kontot, vanligtvis med namnet IWAM_machinename, måste läggas till för att aktivera en ren avstängning av objekt efter användning. Kontot bör inte beviljas några ytterligare behörigheter.
Com+-processåtervinningsfunktionerna kan inte användas i integrerade program. Om programmet har konfigurerats för att använda processåtervinning och komponenterna körs i en COM+ värdbaserad process startar inte tjänsten. Det här kravet omfattar inte tjänster som använder det webbhanterade processläget eftersom inställningarna för processåtervinning inte tillämpas.