Web Services for Printers: Step-By-Step

advertisement
Web Services for Devices
Install:
Printers & Scanners
Mike Fenelon
Software Developer
Digital Documents, Platform and Solutions Team
MFenelon @ microsoft.com
Microsoft Corporation
Printing with Web Services
for Devices
Printer Installation Step-By-Step
Spooler
PnP-Printer
Class Installer
WSD Port
Monitor
88
1
11
11
Function Discovery (FD)
Print
Device
PDO
99
44
77
Print
Service
FDO
IPBusEnumerator
66
3
WS-Discovery
Provider
55
2
10
User-Mode Enabled Bus Enumerator
(UMBus)
Step 1- WSD Port Monitor
Initialization
Spooler starts up
Spooler
WSD Port
Monitor
1
Function
Discovery (FD)
WSD Port Monitor
(WSDMon) queries FD for all
existing WSD print devices
and creates the appropriate
ports
Any new devices found while
the spooler wasn’t running
will also kick off PnP
installation for the Print
Object (Step 9)
WSDMon will also register
for notifications on the
correct FD category to
receive future device
notifications
Steps 2 & 3 – Printer
Announcement and Discovery
Function
Discovery (FD)
3
WS-Discovery
Provider
2
Printer announces presence on
the network by a WS-Discovery
“Hello” message or responds to
a Probe message from user
opening Computers & Devices
WS-Discovery provider
recognizes the device and
publishes it to Function
Discovery (FD)
Device Instance in FD contains
all the basic device Metadata
Device enabled for install if it
contains PnP-X related
metadata
Steps 4 & 5 – Notification from FD
and Devnode Creation
Function
Discovery (FD)
4
IPBusEnumerator
5
User-Mode Enabled
Bus Enumerator
(UMBus)
From Within Computers &
Devices the User adds/installs
discovered device to
Association Database
IPBusEnum gets a notification
of the newly associated
Network Device
IPBusEnum reads data from
the new instance and uses the
COM interface to the UserMode Enabled Bus
Enumerator (UMBus) to tell
UMBus to create a new WS
Print Service DevNode
Step 6 – Create Printer Service
Devnode
Scan
Service FDO
6
User-Mode Enabled
Bus Enumerator
(UMBus)
UMBus creates a File
Device Object (FDO) for the
WS-based Printer Service
This FDO has a HardwareID
& CompatibleId based on
data from the Device
Relationship Metadata
<pnpx:HardwareId>
<pnpx:CompatibleId>
Steps 7 & 8 – Print Service PnP
Notification to FD and WSDMon
Spooler
WSD Port
Monitor
8
Function
Discovery (FD)
7
Print
Service
FDO
FD gets PnP notification
of the new WS-Printer
Service device object
FD adds device to the
correct
category/subcategory
and creates notification
which is picked up by
WSDMon
Step 9 – GetMetadata
WSDMon activates the WS
PrintProxy via the FD function
instance and gets needed
information from the device
Uses GetMetadata calls or
Print Service methods
Gets device 1284 ID and
determines port name
WSDMon calls UMBus with info
needed to create a Print Device
Physical Device Object (PDO) in
RAW mode
This gets PnP started installing
the Print Object in the spooler
(Printers and Faxes folder)
Spooler
WSD Port
Monitor
9
User-Mode Enabled
Bus Enumerator
(UMBus)
Steps 10 & 11 – PDO Creation and
Driver Install
PnP-Printer
Class
Installer
11
Print
Device
PDO
10
User-Mode Enabled
Bus Enumerator
(UMBus)
UMBus creates a Print Device PDO
This PDO contains the Hardware ID,
PortName, PrinterName, Location and
comment field of the associated
printer
PnP searches installed INFs to find an
INF that matches
If no INF is found the Found New
Hardware Wizard (FNHM) starts
If an INF is found (or selected in the
FNHW) PnP invokes the associated
class installer, in this case the Printer
Class Installer
Install continues just like local PnP
using the supplied information from
the Print Device PDO to complete the
installation
Printing Operation Step By Step
A
Driver
B
D
WSD Port
Monitor
C
App
E
F
Spooler
G
Queue
View
Step A & B – Driver Initialization
Bi-di enabled Driver queries
device for configuration
Driver
A
WSD Port
Monitor
B
Driver uses Bi-di schema to
request device
configuration
WSD Port Monitor uses
GetPrinterElements
operation to retrieve data
from printer
WSDMon converts XML data
to Bi-di Schema responses
Step C – Application prints a
document
App
C
WSD Port
Monitor
Application uses DevCaps to
get accurate device
capabilities
Application formats the
document based on current
device capabilities
Application begins rendering
the document
Step D & E – WSD Port Monitor
prints a document
WSDMon sends
CreatePrintJob operation to
prepare device for print data
WSD Port
Monitor
D
CreatePrintJob response
E
contains device JobID
On first WritePort call
WSDMon creates
SendDocument opreation
Device JobID and
Job data transferred as part
of SendDocument operation
using MTOM
Step F & G – JobEndState Event
and Rich Status
Queue
View
F
WSD Port
Monitor
G
Printer send
JobEndState event
when the print job
finishes
WSD Port Monitor
creates Rich Status
notification based on
information in the event
Job Status in Queue
View is updated after
SetJob call
Scanning with Web Services
for Devices
Scanner Installation Step By Step
WIA
Service
WSD Scan
Driver
1
8
Function Discovery (FD)
44
Scan
Service FDO
IPBusEnumerator
66
3
WS-Discovery
Provider
55
2
User-Mode Enabled Bus Enumerator
(UMBus)
Step 1 – WIA Service and Scan Class
Driver Initialization
WSD Scan
Driver
WIA
Service
1
Function
Discovery (FD)
WIA Service starts up
or User starts a WIA
application
WIA Service queries
PnP for all existing
Scan devices and
creates the
appropriate objects
(Step 8)
Steps 2 & 3 – Scanner
Announcement and Discovery
Function
Discovery (FD)
3
WS-Discovery
Provider
2
Scanner announces presence on
the network by a WS-Discovery
“Hello” message or responds to a
Probe message from user opening
Computers & Devices
WS-Discovery provider recognizes
the device and publishes it to
Function Discovery (FD)
Device Instance in FD contains all
the basic device Metadata
Device enabled for install if it
contains PnP-X related metadata
Steps 4 & 5 – Notification from FD
and Devnode Creation
Function
Discovery (FD)
4
IPBusEnumerator
5
User-Mode Enabled
Bus Enumerator
(UMBus)
From Within Computers &
Devices the User adds/installs
discovered device to Association
Database
IPBusEnum gets a notification of
the newly associated Network
Device
IPBusEnum reads data from the
new instance and uses the COM
interface to the User-Mode
Enabled Bus Enumerator
(UMBus) to tell UMBus to create
a new WS Print Service
DevNode
Steps 6 – Create Scanner Service
Devnode
Scan
Service FDO
6
User-Mode Enabled
Bus Enumerator
(UMBus)
UMBus creates a File
Device Object (FDO) for the
WS-based Scanner Service
This FDO has a HardwareID
& CompatibleId based on
data from the Device
Relationship Metadata
<pnpx:HardwareId>
<pnpx:CompatibleId>
Step 7 – PnP Notification and WSD
Scan Driver Object Initialization
WIA
Service
WSD Scan
Driver
7
Scan
Service FDO
WIA Service gets PnP
notification of the new WSScanner Service device
object
WIA creates a unique
identifier for the device
WSD Scan Driver instance is
loaded for the new scanner
Scan Service Function
Instance is activated and the
ScanProxy DLL is loaded
Scanner installation is complete!
Scanning Operation in the Home
- Step By Step
A
WSD Scan
Driver
C
B
D
WIA
Service
Step A – PC Registers with Scanner
WIA
Service
WSD Scan
Driver
A
At scan object creation the
PC creates scan
destination(s) in the scan
device
Assigns device a unique
identifier
Subscribes for
ScanAvailableEvent with
wscn:ScanDestinations
extension operation to set
display name for current PC
Receives scan context from
device
Steps B & C – User Initiates Scan
WIA
Service
WSD Scan
Driver
C
User selects destination
from device display panel
User presses scan button
Device sends a
ScanAvailableEvent to
selected PC
Event contains scanner
identifier and scan context
B
Note: this could also be initiated
from an application on the PC if
scanner doesn’t have LCD or
multi-PC capability
Step D – Client Scans From Device
WIA
Service
WSD Scan
Driver
D
Client uses CreateScanJob
& RetreiveImage operations
to initiate scan and retrieve
scan data
Scan ticket in CreateScanJob
operation contains desired
scanning parameters
Scan data is retrieved as part
of the RetrieveImage operation
response in any form using
MTOM
XML Messages for Printing
GetPrinterElements Request Example
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wprt="http://schemas.microsoft.com/windows/2005/05/wdp/print">
<SOAP:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/05/wdp/print/GetPrinterElements
</wsa:Action>
--- Header removed for Brevity --</SOAP:Header
<SOAP:Body>
<wprt:GetPrinterElementsRequest>
<wprt:RequestedElements>
<wprt:Name>wprt:PrinterConfiguration</wprt:Name>
</wprt:RequestedElements>
</wprt:GetPrinterElementsRequest >
</SOAP:Body>
</SOAP:Envelope>
GetPrinterElements Response Example
<SOAP:Envelope
xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wprt="http://schemas.microsoft.com/windows/2005/05/wdp/pr
int">
<SOAP:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/05/wdp/print/GetPrint
erElementsResponse
</wsa:Action>
--- Header removed for Brevity --</SOAP:Header
<SOAP:Body>
<wprt:GetPrinterElementsResponse>
.
.
.
</wprt:GetPrinterElementsResponse>
</SOAP:Body>
</SOAP:Envelope>
CreatePrintJob Request Example
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wprt="http://schemas.microsoft.com/windows/2005/05/wdp/print">
<SOAP:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/05/wdp/print/CreatePrintJob
</wsa:Action>
--- Header removed for Brevity --</SOAP:Header
<SOAP:Body>
<wprt:CreatePrintJobRequest>
.
.
.
</wprt:CreatePrintJobRequest>
</SOAP:Body>
</SOAP:Envelope>
CreatePrintJob Response Example
<SOAP:Envelope
xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wprt="http://schemas.microsoft.com/windows/2005/05/wdp/pr
int">
<SOAP:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/05/wdp/print/CreatePr
intJobResponse
</wsa:Action>
--- Header removed for Brevity --</SOAP:Header
<SOAP:Body>
<wprt:CreatePrintJobResponse>
.
.
.
</wprt:CreatePrintJobResponse>
</SOAP:Body>
</SOAP:Envelope>
SendDocument Request Example
mime-version: 1.0
Content-Type: multipart/related;
type=application/xop+xml;
boundary=“--=_NextPart_123_321_0000000.3E9F5D”;
start=”<OperationRequest>”;
startinfo=application/soap+xml
----=_NextPart_123_321_0000000.3E9F5D
Content-Type: application/xop+xml; type=application/soap_xop+xml charset=UTF-8
Content-Transfer-Encoding: binary
Content-ID: <OperationRequest>
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsdp="http://schemas.xmlsoap.org/ws/2004/08/devprof"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"
xmlns:wprt="http://schemas.microsoft.com/windows/2005/05/wdp/print"
xmlns:xmlmime=’http://www.w3.org/2004/11/xmlmime’
xmlns:xop=’http://www.w3.org/2004/08/xop/include’
soap:encodingStyle='http://www.w3.org/2002/12/soap-encoding' >
<soap:Header>
<wsa:To>uuid:DeviceUUID</wsa:To>
<wsdp:ServiceId>uri:IdofThisService</wsdp:ServiceId>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/05/wdp/print/SendDocument
</wsa:Action>
<wsa:MessageID>uuid:UniqueMsgId</wsa:MessageID>
</soap:Header>
SendDocument Request Example (cont.)
<soap:Body>
<wprt:SendDocumentRequest>
<wprt:JobId>IdFromCreateJobRequest</wprt:JobId>
<wprt:DocumentDescription>
<wprt:DocumentId>DocIdNumber</wprt:DocumentId>
<wprt:Compression>None</wprt:Compression>
<wprt:DocumentFormat>
application/octet-stream</wprt:DocumentFormat>
<wprt:DocumentName>Example.xml</wprt:DocumentName>
</wprt:DocumentDescription>
<wprt:LastDocument>true</wprt:LastDocument>
<wprt:DocumentData xmlmime:contentType=”application/postscript”>
<xop:Include href=”cid:000001” />
</wprt:DocumentData>
</wprt:SendDocumentRequest>
</soap:Body>
</soap:Envelope>
----=_NextPart_123_321_0000000.3E9F5D
Content-Type: application/postscript;
Content-Transfer-Encoding: binary
Content-ID: <000001>
Document PDL Data
----=_NextPart_123_321_0000000.3E9F5D--
SendDocument Response Example
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wprt="http://schemas.microsoft.com/windows/2005/05/wdp/print">
<SOAP:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/05/wdp/print/SendDocumentResponse
</wsa:Action>
--- Header removed for Brevity --</SOAP:Header
<SOAP:Body>
<wprt:SendDocumentResponse/>
</SOAP:Body>
</SOAP:Envelope>
XML Messages for Scanning
Subscribe Request Example
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wse="http://schemas.xmlsoap.org/ws/2004/08/eventing"
xmlns:wsdp="http://schemas.xmlsoap.org/ws/2005/05/devprof"
xmlns:wscn="http://schemas.microsoft.com/windows/2005/08/wdp/scan">
<soap:Header>
<wsa:Action>http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</wsa:Action>
<wsdp:ServiceId>uri:scn</wsdp:ServiceId>
--- Headers removed for Brevity --</soap:Header>
<soap:Body>
<wse:Subscribe>
<wse:Delivery Mode="http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push">
<wse:NotifyTo>
<wsa:Address>
http://157.56.92.87:5357/872b563f-2832-49eb-8e80-a721fe7a7fd9
</wsa:Address>
</wse:NotifyTo>
</wse:Delivery>
<wse:Expires>PT10M</wse:Expires>
<wse:Filter Dialect="http://schemas.xmlsoap.org/ws/2005/05/devprof/Action">
http://schemas.microsoft.com/windows/2005/08/wdp/scan/ScanAvailableEvent
</wse:Filter>
<wscn:ScanDestinations>
<wscn:ScanDestination>
<wscn:ClientDisplayName>Scan to MFenelon2L</wscn:ClientDisplayName>
<wscn:ClientContext>Scan</wscn:ClientContext>
</wscn:ScanDestination>
<wscn:ScanDestination>
<wscn:ClientDisplayName>Scan for Print to MFenelon2L</wscn:ClientDisplayName>
<wscn:ClientContext>ScanToPrint</wscn:ClientContext>
</wscn:ScanDestination>
</wscn:ScanDestinations>
</wse:Subscribe>
</soap:Body>
</soap:Envelope>
Subscribe (ScanAvailableEvent)
Response Example
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wse="http://schemas.xmlsoap.org/ws/2004/08/eventing"
xmlns:wsdp="http://schemas.xmlsoap.org/ws/2005/05/devprof"
xmlns:wscn="http://schemas.microsoft.com/windows/2005/08/wdp/scan">
<soap:Header>
<wsa:Action>http://schemas.xmlsoap.org/ws/2004/08/eventing/SubscribeResponse</wsa:Action>
--- Headers removed for Brevity ---
</soap:Header>
<soap:Body>
<wse:SubscribeResponse>
<wse:SubscriptionManager>
<wsa:Address>http://157.56.88.113:80/TestDevice</wsa:Address>
<wsa:ReferenceProperties>
<wsdp:ServiceId>uri:scn</wsdp:ServiceId>
<wse:Identifier>uuid:0c27676b-e507-4837-9512-49d64640991d</wse:Identifier>
</wsa:ReferenceProperties>
</wse:SubscriptionManager>
<wse:Expires>PT9M59.9531289S</wse:Expires>
<wscn:DestinationResponses>
<wscn:DestinationResponse>
<wscn:ClientContext>Scan</wscn:ClientContext>
<wscn:DestinationToken>113527a8-0908-4222-bd6c-9c95d302c454</wscn:DestinationToken>
</wscn:DestinationResponse>
<wscn:DestinationResponse>
<wscn:ClientContext>ScanToPrint</wscn:ClientContext>
<wscn:DestinationToken>6fcbbc0f-c035-41ca-a912-f6961a2e2257</wscn:DestinationToken>
</wscn:DestinationResponse>
</wscn:DestinationResponses>
</wse:SubscribeResponse>
</soap:Body>
</soap:Envelope>
ScanAvailableEvent Example
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wscn="http://schemas.microsoft.com/windows/2005/08/wdp/scan">
<soap:Header>
<wsa:To>
http://157.56.92.87:5357/872b563f-2832-49eb-8e80-a721fe7a7fd9
</wsa:To>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/08/wdp/scan/ScanAvailableEvent
</wsa:Action>
</soap:Header>
<soap:Body>
<wscn:ScanAvailableEvent>
<wscn:ClientContext>Scan</wscn:ClientContext>
<wscn:ScanIdentifier>
a74dc73c-34b6-4e99-a724-c006f4625b68
</wscn:ScanIdentifier>
</wscn:ScanAvailableEvent>
</soap:Body>
</soap:Envelope>
CreateScanJob Request Example
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsdp="http://schemas.xmlsoap.org/ws/2005/05/devprof"
xmlns:wscn="http://schemas.microsoft.com/windows/2005/08/wdp/scan">
<soap:Header>
<wsa:To>http://157.56.88.113:80/TestDevice</wsa:To>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/08/wdp/scan/CreateScanJob
</wsa:Action>
<wsdp:ServiceId>uri:scn</wsdp:ServiceId>
--- Headers removed for Brevity --</soap:Header>
<soap:Body>
<wscn:CreateScanJobRequest>
<wscn:ScanIdentifier>
a74dc73c-34b6-4e99-a724-c006f4625b68</wscn:ScanIdentifier>
<wscn:DestinationToken>
113527a8-0908-4222-bd6c-9c95d302c454</wscn:DestinationToken>
<wscn:ScanTicket>
<wscn:JobDescription>
<wscn:JobName>GetImage from ScanAvailableEvent</wscn:JobName>
<wscn:JobOriginatingUserName>
MFenelon</wscn:JobOriginatingUserName>
<wscn:JobInformation>Scanning from platen..</wscn:JobInformation>
</wscn:JobDescription>
CreateScanJob Request Example (Cont.)
<wscn:DocumentParameters>
<wscn:Format>exif</wscn:Format>
<wscn:ImagesToTransfer>1</wscn:ImagesToTransfer>
<wscn:InputSource>Platen</wscn:InputSource>
<wscn:InputSize>
<wscn:InputMediaSize>
<wscn:Width>1000</wscn:Width>
<wscn:Height>1000</wscn:Height>
</wscn:InputMediaSize>
</wscn:InputSize>
<wscn:Rotation>0</wscn:Rotation>
<wscn:MediaSides>
<wscn:MediaFront>
<wscn:ColorProcessing>RGB24</wscn:ColorProcessing>
<wscn:Resolution>
<wscn:Width>200</wscn:Width>
</wscn:Resolution>
</wscn:MediaFront>
</wscn:MediaSides>
</wscn:DocumentParameters>
</wscn:ScanTicket>
</wscn:CreateScanJobRequest>
</soap:Body>
</soap:Envelope>
CreateScanJob Response Example
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsdisco="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:wsdp="http://schemas.xmlsoap.org/ws/2005/05/devprof"
xmlns:wscn="http://schemas.microsoft.com/windows/2005/08/wdp/scan">
<soap:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/08/wdp/scan/CreateScanJobResponse
</wsa:Action>
--- Headers removed for Brevity --</soap:Header>
<soap:Body>
<wscn:CreateScanJobResponse>
<wscn:JobId>1</wscn:JobId>
<wscn:JobToken>b5838c21-63a1-4e99-a724-b459218cae7f</wscn:JobToken>
<wscn:ImageInformaiton>
.
.
</wscn:ImageInformation>
<wscn:DocumentFinalParameters>
.
.
</wscn:DocumentFinalParameters>
</wscn:CreateScanJobResponse>
</soap:Body>
</soap:Envelope>
RetrieveImage Request Example
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsdp="http://schemas.xmlsoap.org/ws/2005/05/devprof"
xmlns:wscn="http://schemas.microsoft.com/windows/2005/08/wdp/scan">
<soap:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/08/wdp/scan/RetrieveImage
</wsa:Action>
<wsdp:ServiceId>uri:scn</wsdp:ServiceId>
--- Headers removed for Brevity --</soap:Header>
<soap:Body>
<wscn:RetrieveImageRequest>
<wscn:JobId>1</wscn:JobId>
<wscn:JobToken>b5838c21-63a1-4e99-a724-b459218cae7f</wscn:JobToken>
<wscn:DocumentDescription>
<wscn:DocumentName>ScannedImage001.JPG</wscn:DocumentName>
</wscn:DocumentDescription>
</wscn:RetrieveImageRequest>
</soap:Body>
</soap:Envelope>
RetrieveImage Response Example
Content-Type: multipart/related;
boundary=4aa7d814-adc1-47a2-8e1c-07585b9892a4;
type="application/xop+xml";
start="<14629f74-2047-436c-8046-5cac76d280fc@uuid>";
start-info=application/soap+xml; charset="utf-8”
mime-version: 1.0
--4aa7d814-adc1-47a2-8e1c-07585b9892a4
content-type: application/xop+xml; type="application/soap+xml"; charset="utf8"
content-transfer-encoding: binary
content-id: <14629f74-2047-436c-8046-5cac76d280fc@uuid>
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wscn="http://schemas.microsoft.com/windows/2005/08/wdp/scan">
<soap:Header>
<wsa:Action>
http://schemas.microsoft.com/windows/2005/08/wdp/scan/RetrieveImageResponse
</wsa:Action>
</soap:Header>
<soap:Body>
<wscn:RetrieveImageResponse>
RetrieveImage Response Example (Cont.)
<wscn:ScanData>
<XOP:Include xmlns:XOP="http://www.w3.org/2004/08/xop/include"
href="cid:1c696bd7-005a-48d9-9ee9-9adca11f8892@uuid"/>
</wscn:ScanData>
</wscn:RetrieveImageResponse>
</soap:Body>
</soap:Envelope>
--4aa7d814-adc1-47a2-8e1c-07585b9892a4
content-type: application/dib
content-transfer-encoding: binary
content-id: <1c696bd7-005a-48d9-9ee9-9adca11f8892@uuid>
....Binary Image data for Scan.....
--4aa7d814-adc1-47a2-8e1c-07585b9892a4--
Download