Вы находитесь на странице: 1из 31

Windows Communication Foundation:

Integrating COM+ and MSMQ Applications

Andy Milligan COM305 Program Manager Microsoft Corporation


1

Agenda
Integration degrees and motivations Illustrated scenarios
Exposing COM+ applications as WCF services Consuming services in COM WCF client using an MSMQ receiver MSMQ client sending to WCF services

Summary Questions
2

Degrees Of Integration
Wire-level interoperability
WCF services and clients interoperate with ASMX, WSE and WebSphere services and clients using WS-* protocols

Product level integration


WCF includes feature level support for integrating COM and COM+ applications with other WCF applications WCF includes feature level support for MSMQ to integrate with existing MSMQ applications Company X may implement WCF channels to enable integration between WCF and a technology Y

Code Migration
Migrating COM+ components to WCF enables most effective integration with new WCF applications

Integration Motivations
Deployed LOB logic
Core asset of the business Duplication is often unacceptable Lengthy application lifecycle Stability is key Utility throttled by proprietary access

Goal of integration:
provide the benefits of SO without outweighing the cost of adoption
4

Application Scenario

COM+ App As A WCF Service


Scenario:
You need to access COM+ business logic from web service clients

Solution:
Use WCFs COM+ Integration to expose endpoints for your COM+ component interfaces

Provides:
An interoperable, secure, reliable, transacted web service access over a choice of transports
6

COM+ App As a WCF Service


Approach
Run ComSvcConfig specifying the application interface
Metadata examination: type library & catalog Creates a default .config and host

Modify generated .config file as required Start application and WCF service starts
Contract reflected from type library Behavior driven from config

ComSvcConfig.exe /install /application:BookSample /contract:BookLogic.Finance,IFinance /hosting:complus /mex 7

COM+ App As A WCF Service

A WCF Service
[ServiceContract] WCF source public interface IFinance { [OperationContract] ServiceHost ServiceDescription [TransactionFlow(TransactionFlowOption.Allowed)] Address:http://myservice/IFinance.svc bool ValidateCardNumber(string CCNumber); Binding Name:WSHttpBinding [OperationContract] Contract [TransactionFlow(TransactionFlowOption.Allowed)] Operation[0] int ChargeCard(string Name, string Number, float Amount); Name:ValidateCardNumber SyncMethod:params Behaviors:TransactionFlowAttribute:Allowed Operation [1] Name:ChargeCard SyncMethod:params Behaviors:TransactionFlowAttribute:Allowed

<configuration xmlns=""> WCF .config <system.serviceModel> <services> <service type="Lucerne.FinanceService" <endpoint address=" binding="wsHttpBinding bindingConfiguration="Binding1 contract="Lucerne.IFinance" /> </service> </services> </system.serviceModel> </configuration>

A COM+ Integration WCF Service


[ uuid(5D9A0467-AFFE-3250-988D-24B439686656), ] interface IFinance : IDispatch { HRESULT ValidateCardNumber( [in] BSTR CCNumber, [out, retval] VARIANT_BOOL* pRetVal); HRESULT ChargeCard( [in] BSTR Name, [in] BSTR Number, [in] single Amount, [out, retval] long* pRetVal); }; ServiceDescription <configuration xmlns=""> WCF .config <system.serviceModel> <services> <service type="Lucerne.FinanceService" <endpoint address=" binding="wsHttpBinding bindingConfiguration="Binding1 contract="Lucerne.IFinance" /> </service> </services> </system.serviceModel> </configuration>

COM contract [typelib + catalog]

ServiceHost

Address:http://myservice/IFinance.svc Binding Name:WSHttpBinding Contract Operation[0] Name:ValidateCardNumber SyncMethod:params Behaviors:TransactionFlowAttribute:Allowed Operation [1] Name:ChargeCard SyncMethod:params Behaviors:TransactionFlowAttribute:Allowed

10

COM+ App As A WCF Service


The provided service
Canonical mapping
COM class service COM interface service contract COM interface methods operation contract

Service configuration:
NetNamedPipeBinding or WSHttpBinding WS-Security think up to PacketPrivacy WS-RM for session lifetime OLE-Tx, with WS-AT as required
11

COM+ App As A WCF Service


Client
App A

Server: COM+
App C App B

Component Y

DCOM

Component X Interface 1 Interface 2

WS-* messages

Client

Endpoint Endpoint

ServiceModel Initializer

App .config Catalog

COM+ hosted: Remains accessible from DCOM No message based activation

12

COM+ App As A WCF Service


Client
App A

Server: COM+
App C App B

Component Y

DCOM

Component X Interface 1 Interface 2

IIS / WAS
WS-* messages

Client

Endpoint Endpoint

web .config

Catalog

Web hosted: Remains accessible from DCOM Message based activation, cross-process

13

COM+ App As A WCF Service


App A

Server: COM+
App C App B

IIS / WAS
WS-* messages
Component Y

Client

Endpoint Endpoint

Component X Interface 1 Interface 2

web .config

Catalog

Web hosted in-proc: Message based activation All in process

14

COM+ App As A WCF Service


Considerations
WCF integration versus COM+ 1.5 Uses SOAP Integration is done on a per interface basis.
No overhead for apps which dont opt in

Object reference passing not supported COM+ context does not flow Wizard view

15

Consuming Services In COM


Scenario:
Services are proliferating and you still have COM based clients

Solution:
Use WCFs COM service moniker to communicate with service endpoints

Provides:
An approachable COM specific syntax for accessing web services with WS-* support over multiple transports
16

Consuming Services In COM


Approach
SvcUtil can compile a COM-visible proxy assembly
.NET Framework 2.0 and WinFX / WCF runtime required Optimized for managed clients with COM-Interop limitations

Use service moniker syntax to specify service address, binding and contract
Typed contract WSDL contract Metadata Exchange contract

IChannelCredentials for SSPI, username / password, x509

17

COM Client Integration


Service moniker: Typed
Scenario:
You want to extend a Visual Basic 6.0 application to retrieve current stock levels You have full control over deployment

Solution:
Typed moniker for IntelliSense Address & binding name in moniker string Build local assembly for contract (SvcUtil) Binding defined in app.config
Dim monikerProxy as IRetailProxy set monikerProxy = GetObject("service:address=http://myServer/TestService/, binding=wsProfileBinding") currStock = monikerProxy.GetStockLevel("ID:223") 18

COM Client Integration


Service moniker: WSDL
Scenario:
You want to distribute a document including current web service results Registering app specific proxies can be tough

Solution:
WSDL Service moniker Entirely self contained with no app-specific registration Address, binding and contract are in the code
wsdlStr = "<xml ... " Set monikerProxy = GetObject("service:address=http://myServer/TestService/, wsdl='" & wsdlStr & "', binding=wsProfileBinding, contract=IWarehouse") currStock = monikerProxy.GetStockLevel("ID:223") 19

COM Client Integration


Service moniker: Metadata Exchange
Scenario:
You want to distribute a document including current web service results Registering app specific proxies can be tough

Solution:
MEX moniker Address, binding and contract are retrieved at runtime Optional overrides for address & binding
Set monikerProxy = GetObject("service:mexAddress=http://myServer/myService.svc/mex, mexBindingSectionName=customBinding, mexBindingConfiguration=myCustomBinding, contractName=IFinance, contractNamespace=http://contoso.com/fooServices, bindingName=Binding1, bindingNamespace=http://contoso.com/Bindings") currStock = monikerProxy.GetStockLevel("ID:223")

20

Consuming Services In COM

21

WCF Queuing Channels


Overview
Transport channel
Intended for exchanging queued messages between WCF applications SOAP within MSMQ message Supports new WCF queue addressing scheme

Integration channel
Intended for exchanging queued messages between legacy MSMQ and WCF applications Classic MSMQ message Supports all legacy MSMQ addressing and protocol schemes

22

WCF Client To MSMQ Receiver


Scenario
Key business processes are at the other end of an MSMQ queue. WCF clients need to send message to the queue to be processed by deployed MSMQ receiver

Solution:
Use WCFs MSMQ integration channel

Provides:
Integrates WCF clients with existing MSMQ applications without modification Places classic MSMQ message on the wire
Same infrastructure, same management, same receiver code
23

WCF Client To MSMQ Receiver


WCF Client
WCF
App .config

MSMQ Receiver

Integration Channel
MSMQ

QM to QM transfer
MSMQ Queue Manager

Queue Manager

Store

MSMQ 24

Store

Integrating WCF With An MSMQ Application

25

MSMQ Client To WCF Receiver


Scenario:
Services are proliferating and you wish to call from deployed MSMQ clients

Solution:
Use WCFs MSMQ integration channel to communicate with service endpoints

Provides:
Integrates existing MSMQ clients with WCF services
Sender sends message same as it always did

WCF service can consume classic MSMQ messages from the wire
Messages arriving in the queue are converted to SOAP messages and dispatched to the operationcontract by the channel

26

MSMQ Client To WCF Receiver


MSMQ Client
MSMQ

WCF Receiver

App .config

Integration Channel
WCF

QM to QM transfer
Queue Manager MSMQ Queue Manager

Store

Store MSMQ

27

WCF MSMQ Integration


Considerations
Caveats to consider
MSMQ channels dont support peek Sending COM objects in message body to Indigo apps will not be supported

MSMQ Vista enhancements


Poison message handling for MSMQ Per application error queue WCF services can receive messages transactionally across the network

28

Summary
Microsoft is committed to leveraging existing investments
Integration is baked into the WCF runtime ComSvcConfig for COM+ Service moniker for COM Continued use of MSMQ transport

With existing apps you are off to a fine start Adopting WCF can be low impact, incremental and alongside migration
29

Community Resources
At PDC
For more information, go see
COM312 - WCF: Writing Secure Distributed Applications (Wed 1:45pm) COM307 - WCF: Writing Reliable and Transacted Distributed Applications (Wed 3:15pm) COM308 - WCF: Developing Manageable Web Services (Wed 5:00pm) Labs: COMHOL26: Legacy Integration Ask The Experts table: WCF COM Track lounge: Ill be there Wed 2-5pm

After PDC
If you missed this related session, watch it on the DVD
COM200 - Applications and Communications Roadmap COM202 - A Lap around the Windows Communications Foundation

MSDN dev center: http://msdn.microsoft.com/webservices/ Channel 9 tag: http://channel9.msdn.com/tags/Indigo

Contact us
Andy.Milligan @ microsoft.com Blog: http://blogs.msdn.com/distilled AnandRaj @ microsoft.com Blog: http://blogs.msdn.com/solutions
30

2005 Microsoft Corporation. All rights reserved.


This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

Вам также может понравиться