pdf reader in asp.net c# : Erase pdf text control software platform web page windows asp.net web browser Milos_DocumentManagement_DownloadFileAttachment4-part821

41
www.cod
e
-m
a
g
a
z
in
e
.com
Building P
e
rson
a
li
z
e
d Applic
a
tions on th
e
Windows Liv
e
ID Pl
a
tform
S
i
gn Me 
U
p!
G
et the 
W
i
ndows 
L
i
ve 
I
D
W
eb 
A
uthent
i
cat
i
on 1.0 S
D
K
f
rom 
http://msdn2.m
i
croso
f
t.com/
en-us/
l
i
brary/bb676633.aspx. 
R
eg
i
ster your app
l
i
cat
i
on at 
https://msm.
l
i
ve.com/app/
de
f
au
l
t.aspx.
G
et the 
W
i
ndows 
L
i
ve 
I
D
C
l
i
ent 
A
uthent
i
cat
i
on 1.0 S
D
K
f
rom 
http://msdn2.m
i
croso
f
t.com/en-
us/
l
i
brary/ bb404791.aspx.
documents. By incorporating access to Live Spaces, 
your application  lets  the  author  post their docu-
ments to their space and  get feedback from their 
editor and friends.
T
he 
C
lient Authentication 
F
low
The Client Authentication fl ow consists of the fol-
lowing:
1.  User runs your client application.
2.  Either automatically or in response to a user 
action,  your  client  calls  the  A
u
t
h
e
n
t
ica
t
e
method. Fig
u
r
e
2 shows the sign-in dialog box 
that is displayed.
3.  User enters  their  Windows  Live  ID  creden-
tials. If user chooses to store their credentials, 
these  are persisted  to the  local  store so that 
user does not  need  to provide them to your 
client again in the future and is automatically 
signed in.
4.  Your  client application sends  the user’s  cre-
dentials,  encrypted  through  Secure  Sockets 
Layer (SSL), to the Windows Live ID authen-
tication server.
5.  Windows Live ID authentication server vali-
dates the credentials and returns an authenti-
cation ticket.
6.  The  user  is  now  authenticated  and  your 
client  provides  them  with  personalized 
features.
7.  Either automatically or in response to a user 
action, your client calls the Ge
t
Ticke
t
method 
to obtain a service ticket to access a specifi c 
Windows Live ID site or service.
8.  Your  client  requests  protected  content  from 
the Windows Live ID site or service with the 
service ticket.
9.  The  protected  content  is  returned  and  dis-
played to the user.
Lis
t
i
n
g
1 demonstrates the handling of the differ-
ent ac
t
io
n
s.
Incorporating Windows Live 
C
ontrols
Include Windows Live Controls in your Web ap-
plication to seamlessly combine these features with 
your innovation. When users log into your site with 
their Live ID credentials, they are also signed into 
these  controls.  For  example,  the  Windows  Live 
Contacts control is a client-side JavaScript object 
that allows users to share their contacts with your 
site. Users can view presence information for their 
contacts and initiate a Windows Live Messenger 
conversation with a contact; and you can predefi ne 
messages for users to send to their contacts.
Windows Live I
D
D
elegated Authentication
Create a mashup of rich  user  content from  various 
Live services in your application with the user’s explic-
it consent using the Delegated Authentication technol-
ogy. With your site already using Windows Live ID 
Web Authentication, this is a simple additional step.
Through delegation, the Windows Live ID users of 
your site have the ability to consent to the scoped 
release of their personal information to you. For ex-
ample, the user could consent to share their Live 
Calendar with your site and your application can 
then access the calendar to retrieve and edit data.
W
i
ndows 
L
i
ve I
D
C
l
i
ent 
Authent
i
cat
i
on
Windows Live ID Client Authentication helps you 
build  personalized,  identity-aware,  rich  client  ap-
plications for  the huge  Live  ID user base. Client 
Authentication is a managed API intended for use 
in developing applications for users’ desktops, using 
.NET Framework. The API lets you:
Verify the identity of users of your client ap-
• 
plication.
Access information about saved credentials to 
• 
implement automatic sign in.
Integrate  with  other  Windows  Live  services 
• 
and obtain authentication tickets necessary to 
access user’s personal data provided by them.
Navigate to Windows Live ID sites in an au-
• 
thenticated browser window.
Why 
D
oes 
Y
our 
R
ich 
C
lient Application Need 
Live I
D
?
Wondering what kind of cool functionality Live ID 
can help you build into your client
?
Blogi
t
Your rich client application is a word processor for 
authors. An author uses your application to create 
Figure 2: Sign-in di
a
log box for 
C
li
e
nt Auth
e
ntic
a
tion.
Erase pdf text - delete, remove text from PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Allow C# developers to use mature APIs to delete and remove text content from PDF document
delete text from pdf with acrobat; pdf text watermark remover
Erase pdf text - VB.NET PDF delete text library: delete, remove text from PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET Programming Guide to Delete Text from PDF File
acrobat delete text in pdf; erase text from pdf file
42
www.cod
e
-m
a
g
a
z
in
e
.com
Building P
e
rson
a
li
z
e
d Applic
a
tions on th
e
Windows Liv
e
ID Pl
a
tform
//Event handler for Sign-in/Sign-out button clicks
private void buttonSignInOrOut_Click(object senderEventArgs e)
{
//Check to see if the user is currently authenticated 
if (!oID.IsAuthenticated)
{
try
{
//Try to authenticate the user by showing the 
//Sign-in dialog window
if (oID.Authenticate())
{
currentUserName = oID.UserName;
}
else
{
MessageBox.Show("Authentication failed");
}
}
catch (WLLogOnException wlex)
{
if (wlex.FlowUrl != null)
{   
MessageBox.Show(wlex.ErrorString + "Please go 
to " + wlex.FlowUrl.AbsoluteUri + "to correct 
the condition that caused the error");
}
else
{
MessageBox.Show(wlex.Error   String);
}
}
}
else
{
//If user is authenticated, they intended to Sign-out. Try 
//signing the user out.
try
{
oID.CloseIdentityHandle();
currentUserName = "";
}
catch (WLLogOnException wlex)
{
if (wlex.FlowUrl != null)
{                            
MessageBox.Show(wlex.ErrorString + "Please go to " + 
wlex.FlowUrl.AbsoluteUri + "to correct the condition 
that caused the error");
}
else
{
MessageBox.Show(wlex.ErrorString);
}
}
}
UpdateDisplay();
}
Li
s
ting 2: Wh
a
t to do wh
e
n th
e
us
e
r clicks th
e
Sign-in/Sign-out button in your cli
e
nt 
a
pplic
a
tion.
W
i
ndows 
L
i
ve 
C
ontro
l
s
W
i
ndows 
L
i
ve 
C
ontro
l
s a
l
l
ow 
you to eas
i
l
i
ncorporate 
coo
l
f
unct
i
ona
l
i
ty 
i
nto your 
app
l
i
cat
i
ons. 
V
i
s
i
t https://dev.
l
i
ve.
com to 
l
earn more.
G
etting 
Y
our Application I
D
The  applica
t
io
n
ID,  your  unique  identifi er,  is  a 
combination of your organization name, e-mail ad-
dress, and application name. Declare oIDMg
r
as an 
instance  of Ide
n
t
i
t
yMa
n
age
r
at the class  level  so 
that all your code can access it. Pass the applica
t
io
n
ID as a parameter to the C
r
ea
t
eI
n
s
t
a
n
ce method 
and assign the return value to oIDMg
r
:
oIDMgr = IdentityManager.CreateInstance("BlogIt;
vaishali@contoso.com;BlogIt Application"
"Windows Live ID Client"); 
Setting 
U
Y
our 
D
evelopment 
E
nvironment
Add a reference to the component to your Visual 
Studio project, so that you can use Windows Live 
ID for your client application.
Implementing System 
R
equirement 
D
etection
Your client developed using Windows Live ID for 
client applications requires  the installation of the 
Windows Live ID Client Authentication redistrib-
utable component. This component is the assembly 
(DLL) that  contains the Mic
r
osof
t
.Wi
n
dowsLive.
Id.Clie
n
t
namespace. Without this, your client will 
not run. Your application needs to handle the case 
when  this  assembly  is  not  available  on  the  ma-
chine.
System 
R
equirements for 
C
lient 
Authentication
Your  development  computer  and  user’s  desktop 
must be running the following software:
Windows XP Professional with SP2 or Win-
• 
dows Vista (32-bit versions only).
IE 6.0 or 7.0
/
Firefox 1.5 and above.
• 
.NET Framework 2.0.
• 
I strongly  recommend  you  use the Visual  Studio 
IDE to develop your client application.
G
etting Started with 
C
lient Authentication
To start using Windows Live Client Authentication 
in your rich client application, do the following:
Get your application ID.
• 
Install the Windows Live ID Client 1.0 SDK.
• 
Set up your development environment.
• 
Implement system requirement detection, au-
• 
thentication,  automatic  sign  in,  personaliza-
tion, and access to Windows Live ID sites and 
services.
The SDK  includes  a sample application intended 
to help  you understand how to code  your client, 
by showing you the source code that is required to 
implement the features of Windows Live ID Client 
Authentication.
C
reate a mashup 
of r
i
ch user content 
from var
i
ous 
L
i
ve serv
i
ces 
i
your app
l
i
cat
i
on 
w
i
th the user’s 
exp
l
i
c
i
t consent 
us
i
ng the 
D
e
l
egated 
Authent
i
cat
i
on 
techno
l
ogy.
C# WinForms Viewer: Load, View, Convert, Annotate and Edit PDF
Draw PDF markups. PDF Protection. • Sign PDF document with signature. • Erase PDF text. • Erase PDF images. • Erase PDF pages. Miscellaneous.
how to edit and delete text in pdf file online; delete text pdf preview
C# WPF Viewer: Load, View, Convert, Annotate and Edit PDF
Draw markups to PDF document. PDF Protection. • Add signatures to PDF document. • Erase PDF text. • Erase PDF images. • Erase PDF pages. Miscellaneous.
remove text from pdf acrobat; acrobat remove text from pdf
43
www.cod
e
-m
a
g
a
z
in
e
.com
Building P
e
rson
a
li
z
e
d Applic
a
tions on th
e
Windows Liv
e
ID Pl
a
tform
Stores user-specifi c data and settings.
• 
Loads and displays user-specifi c data and set-
• 
tings when user logs in.
Lets the user modify or delete their data and 
• 
settings.
Windows Live ID  provides  a permanent, unique 
identifi er for the user in the form of the Clie
n
t
ID 
or  CID.  Access  to  the  CID 
is  provided  through  the  CID 
property of a currently authen-
ticated Ide
n
t
i
t
y object. Storing 
the user-specifi c data and set-
tings with the CID gives you 
the  power  to  roam  the  data 
across  machines.  Store  the 
data and settings in a confi gu-
ration  fi le,  the  registry,  a  da-
tabase,  text  fi le,  Web  service, 
or any  other  method of  your 
choice.
Implementing Access to 
Windows Live I
D
Sites and Services
Your client can access Windows Live ID sites and 
services in the following ways:
Through a Web service API, such as SOAP or 
• 
XML-RPC.
Through an authenticated browser window.
• 
For access through a Web service API, your code 
will:
Authenticate the  user with the 
• 
A
u
t
h
e
n
t
ica
t
method.
Obtain a service-specifi c ticket with the 
• 
Ge
t
-
Ticke
t
method.
Implementing Authentication
Call the Au
t
hen
t
ica
t
e
method to authenticate the user. 
This method shows the user the sign-in dialog box shown 
in Figu
r
e
2. This standard dialog box allows the user to 
enter their Windows Live ID credentials and makes it 
really easy for you to log the user in. Lis
t
ing
2 shows you 
what you need to do when the user clicks the Sign-in
/
Sign-out button. Declare oID as an instance of Iden
t
i
t
at the class level so that all your code can access it.
Implementing Automatic Sign-in
Your client must automatically sign-in the user  if 
the user previously signed into your client applica-
tion and selected the check boxes to remember both 
their sign-in name and password.
To  implement  automatic  sign-in,  your  application 
must recognize the concept of this “default user” who 
will be automatically signed in. Store the sign-in name 
of this default user in a confi guration fi le, the registry, 
text fi le, Web service, or any other method and pass it 
in as the parameter to the C
r
ea
t
eIden
t
i
t
y method.
Implementing Personalization
A user personalizes your client application by speci-
fying various data and settings to customize it. Every 
time the user signs into your client, you load these data 
and settings into the application. For example, users 
could pick a background color for the application or 
organize their Live contacts in a particular manner.
Your client:
Lets the user create data and settings for per-
• 
sonalization.
//Posting to a blog
public static void PostBlog(string subjectstring bodystring 
spaceUrlIdentity oId)
{
spaceUrl = ReplaceInvalidXMLChars(spaceUrl);
body = ReplaceInvalidXMLChars(body);
subject = ReplaceInvalidXMLChars(subject);
// The following statement creates the HTTP request to post a 
// new blog. The statement creates a byte array that is based 
// on the requestXML string, which contains the metaweblog API XML 
// statement for creating posts. This string is then modifi ed with 
// four variables: a blog name, which is "MyBlog", spaceUrl, which is 
// a user-supplied identifi er of their blog location, a string that 
// contains the subject of the blog, and a string that contains the 
// blog entry.
byte[] postData = new UTF8Encoding(false).GetBytes(String.   
Format(requestXml"MyBlog", spaceUrl""subject, body));
// Building the HTTPWebRequest object, using a pre-defi ned string, 
// SPACES_API_URL
HttpWebRequest request = (HttpWebRequest)HttpWebRequest 
Create(SPACES_API_URL);
// Create a string to get the authentication ticket, then acquire 
// the ticket
string ticket = "";
try
      
ticket = oId.GetTicket("storage.msn.com""MBI"true);
}
catch (WLLogOnException wlex)
{
if (wlex.FlowUrl != null)
{
MessageBox.Show(wlex.ErrorString + "Please go to " 
+ wlex.FlowUrl.AbsoluteUri + 
"to correct the condition that caused the 
error");
}
else
{
Li
s
ting 3: 
C
a
lling th
e
MetaWeblog 
A
PI from your cli
e
nt 
a
pplic
a
tion.
Your r
i
ch c
l
i
ent can 
access W
i
ndows 
L
i
ve s
i
tes and 
serv
i
ces through a Web serv
i
ce, 
an API 
i
nsta
l
l
ed on the 
l
oca
l
computer, or an authent
i
cated 
browser w
i
ndow.
W
i
ndows 
L
i
ve 
D
e
l
egated 
Authent
i
cat
i
on
Windows Liv
e
D
e
l
e
g
a
t
e
Auth
e
ntic
a
tion 
a
llows third-
p
a
rty 
a
pplic
a
tions to 
a
cc
e
ss 
Liv
e
ID us
e
r’s inform
a
tion with 
e
xplicit us
e
r cons
e
nt. 
F
or mor
e
inform
a
tion, pl
e
a
s
e
r
e
f
e
r to 
Windows Liv
e
D
e
l
e
g
a
t
e
d APIs 
on p
a
g
e
46.
C# HTML5 Viewer: Load, View, Convert, Annotate and Edit PDF
Redact tab on viewer empower users to redact and erase PDF text, erase PDF images and erase PDF pages online. Miscellaneous. • RasterEdge XDoc.
how to delete text from a pdf reader; erase pdf text
C# PDF Text Redact Library: select, redact text content from PDF
Free online C# source code to erase text from adobe PDF file in Visual Studio. How to Use C# Code to Erase PDF Text in C#.NET. Add necessary references:
how to delete text in pdf document; pdf editor online delete text
44
www.cod
e
-m
a
g
a
z
in
e
.com
Building P
e
rson
a
li
z
e
d Applic
a
tions on th
e
Windows Liv
e
ID Pl
a
tform
For  IE  6.0  or  7.0,  call  the  Ope
n
A
u
t
h
e
n
t
ica
t
ed-
B
r
owse
r
method. For browsers other than IE, in-
voke the execution of the browser and make sure 
that the browser sends the appropriate authentica-
tion data in a form post to the Windows Live ID site 
or service URL. Obtain this authentication data by 
calling the Ge
t
Naviga
t
io
n
Da
t
a method.
Special thanks to Dave Shevitz and Vivek Nirkhe 
for their help with this article.
Add  the  ticket  as  a  request  header  for  the 
• 
SOAP or XML-RPC calls.
For HTTP-based SOAP calls, refer to the documen-
tation for the service to fi nd the URL of the Web 
Service Description Language (WSDL) fi le that de-
scribes the service and add a Web reference to your 
application project in Microsoft Visual Studio.
Lis
t
i
n
g
 demonstrates  calling  the  Me
t
aWeblog
API, both to post data and to get data back.
How you open an authenticated browser window 
depends on which browser the user has installed. 
MessageBox.Show(wlex.ErrorString);
}
}
// Build the HTTP headers, including the authorization ticket
request.Headers.Add("Authorization""WLID1.0 " + ticket);
request.AllowAutoRedirect = false;
request.UserAgent = "WindowLiveClientSDKSpacesLoginTester";
request.ContentType = "text/xml";
request.Pipelined = false;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(postData, 0, postData.Length);
}
// Get the response back from the HTTP request
HttpWebResponse response = (HttpWebResponse)request.
GetResponse();
// Code that manages the response could go here
}
//Getting posts from a blog
public static void GetPosts(string spaceUrlint numberOfBlogs
Identity oId)
{
spaceUrl = ReplaceInvalidXMLChars(spaceUrl);
// The following statement creates the HTTP request to get a 
// specifi ed number of blog posts. The statement creates a byte 
// array that is based on the getPostsXml string, which contains the 
// metaweblog API XML statement for getting posts. This string is 
// then modifi ed with three variables: a blog name, which is "MyBlog", 
// spaceUrl, which is a user-supplied identifi er of their blog 
// location, and a number that specifi es the number of blog entries 
// to return. In this case, you are getting one blog entry back, but 
// you can return up to 20
byte[] postData = new UTF8Encoding(false).
GetBytes(String.Format(getPostsXml"MyBlog"spaceUrl, "", 
numberOfBlogs));
/
/
B
u
i
l
d
i
n
g
t
h
e
H
T
T
P
W
e
b
R
e
q
u
e
s
t
o
b
j
e
c
t
,
u
s
i
n
g
a
p
r
e
-
d
e
n
e
d
s
t
r
i
n
g
,
S
P
A
C
E
S
_
A
P
I
_
U
R
L
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.
Create(SPACES_API_URL);
// Create a string to get the authentication ticket, then acquire 
// the ticket
string ticket = "";
try
      
ticket = oId.GetTicket("storage.msn.com""MBI"true);
}
catch (WLLogOnException wlex)
{
if (wlex.FlowUrl != null)
{
MessageBox.Show(wlex.ErrorString + "Please go to " 
+ wlex.FlowUrl.AbsoluteUri + "to correct 
the condition that caused the error");
}
else
{
MessageBox.Show(wlex.ErrorString);
}
}
// Build the HTTP headers, including the authorization ticket
request.Headers.Add("Authorization""WLID1.0 " + ticket);
request.AllowAutoRedirect = false;
request.UserAgent = "WindowLiveClientSDKSpacesLoginTester";
request.ContentType = "text/xml";
request.Pipelined = false;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(postData, 0, postData.Length);
}
// Get the response back from the HTTP request
HttpWebResponse response = (HttpWebResponse)request.
GetResponse();
// Code that manages the response (parses, etc.) could go here
}
Li
s
ting 3: 
C
ontinu
e
d
Vaishali
De
C# HTML5 PDF Viewer SDK to view, annotate, create and convert PDF
setting PDF file permissions. Help C# users to erase PDF text content, images and pages online in ASP.NET. RasterEdge C#.NET HTML5
remove text from pdf preview; how to delete text in pdf preview
C# PDF Image Redact Library: redact selected PDF images in C#.net
Same as text redaction, you can specify custom text to appear over the image redaction area. How to Erase PDF Images in .NET Using C# Class Code.
how to erase pdf text; how to edit and delete text in pdf file
Get 1 year of CoDe plus this 
book for ONLY $37.95
*
Pay the special combination price of just $37.95
and you will receive a 1 year subscription to 
CoDe Magazine AND a copy of Pro VS 2005 Reporting!
Two great developer references, one low price! With this special offer 
you  get  cutting  edge,  in-depth  Visual  Studio  .NET  articles  deliver-
ed to your door six times a year with Code Magazine plus a copy of 
Pro VS 2005 Reporting by Kevin Goff and Rod Paddock (the editor of 
CoDe Magazine).
This combination offer is only available online using this special URL:
www.code-magazine.com/subscribe/ap37
Visit www.apress.com for more great .NET titles!
* While supplies last.  Please allow 4-6 weeks for delivery. US addresses only.
How to C#: Special Effects
Erase. Set the image to current background color, the background color can be set by:ImageProcess.BackgroundColor = Color.Red. Encipher.
how to erase in pdf text; how to delete text in pdf using acrobat professional
Customize, Process Image in .NET Winforms| Online Tutorials
Include crop, merge, paste images; Support for image & documents rotation; Edit images & documents using Erase Rectangle & Merge Block function;
remove text from pdf online; delete text from pdf online
46
www.cod
e
-m
a
g
a
z
in
e
.com
Windows Liv
e
D
e
l
e
g
a
t
e
d APIs
O
N
L
I
N
E
Q
U
I
C
K
I
D
0
8
0
4
0
7
2
You 
N
eed My Author
i
ty (But You 
Aren’t Me)
If you are building an application that needs to ac-
cess a user’s data, your application will need to ask 
the user to authenticate the access. This authentica-
tion can happen in several ways, for this article I am 
going to concentrate on the guidance Microsoft is 
giving for the way forward.
Windows  Live  delegated  au-
thentication  is  a  technology 
that  allows  a  user to  delegate 
authority  to  a  particular  ap-
plication for a set of resources. 
The user is  able to  specify for 
how  long  the  application  will 
be able  to  access  the  Live  re-
sources; this could be a matter 
of minutes, days, or months.
Some of the  services provided 
by  Windows  Live  will  offer 
open  access  services,  services 
that allow  anonymous calls  to 
be made to access the data. The 
other service offerings will require that the applica-
tion accessing the data identifi es itself in a unique 
way. It is entirely possible that the same service will 
provide both anonymous access and identifi ed ac-
cess. The anonymous access would contain meth-
ods to read public facing data, whereas the identi-
fi ed service method would allow private data and 
public data to be read and written.
If the service offered requires that you identify your 
application with an application identifi er, you will 
need to obtain an application ID (or AppID) from 
the  Windows  Live  Microsoft  Service  Manager at 
W
i
ndows L
i
ve De
l
ega
t
ed APIs
T
h
e
s
m
a
r
t
w
a
y
t
o
s
h
a
r
e
d
a
t
a
b
e
t
w
e
e
n
c
o
m
p
u
t
e
r
s
a
n
d
o
t
h
e
r
p
e
o
p
l
e
i
s
t
o
p
l
a
c
e
i
t
i
n
a
n
o
n
li
n
e
I
n
t
e
r
n
e
t
s
t
o
r
e
,
w
h
i
c
h
t
h
e
o
t
h
e
r
p
a
r
t
i
e
s
c
a
n
a
c
c
e
s
s
,
b
u
t
y
o
u
w
a
n
t
t
o
m
a
k
e
s
u
r
e
o
n
l
y
t
h
e
ri
g
h
t
p
e
o
p
l
e
c
a
n
a
c
c
e
s
s
y
o
u
r
d
a
t
a
.
This
article
will
help
you
understand
how
the
Windows
Live
delegated
authentication
system
is
used
to
access
certain
Windows
Live
data
stores
and
the
technologies
Microsoft
is
building
to
ma
k
e
this
wor
k
easier
for
you.
T
he  Internet  provides a  fantastic  backbone  for 
sharing  data. For many  years Microsoft’s con-
sumer services have helped users manage an as-
sortment of data, such as photos on Spaces and con-
tacts in Messenger and Hotmail. Some of this data 
you want to share with a set of users; that set can 
range from the entire user base of the Web to just 
yourself. An example of data you want to share would 
be photos of your vacation you put in Spaces for your 
friends  to view. For  other  data 
types you have an expectation of 
privacy and security, for example 
you don’t want your contacts list 
to  be  publicly  available.  One 
of the advantages to putting all 
this data online is that it allows 
you, the user, to access your data 
from multiple locations.
There are two distinct types of 
data that users have stored on-
line and it is important to un-
derstand the difference, even if 
it is not something the user con-
sciously thinks about:
Shared data, this is data that a user adds with 
1. 
a goal of sharing the data. Examples of this on 
the Windows Live Platform would be Spaces 
photos, blog posts, Silverlight streaming media, 
and Virtual Earth collections.
Private data, this is data a user places online 
2. 
so they can access it from other machines but 
they  don’t  want  to  share.  Examples  on  the 
Windows  Live  Platform  would  be  Contacts 
in  Messenger  or  Hotmail,  Favorites,  Virtual 
Earth collections, and calendar.
You should be  aware that  some data stored in  a 
Windows Live Service might be considered public 
whereas other data in the same service could be pri-
vate. In the list of examples above you can see that 
Virtual Earth collections are both in the shared and 
in the private data sets. A user might want to share 
a  favorite  coastal  drive  but  not  the  collection  of 
locations of companies they are interviewing with 
for a new job. As a developer building applications 
on these platforms your application potentially will 
have access to data that a user doesn’t want shared. 
You need to consider very carefully how your ap-
plication will work with this data.
s
tandard auth
e
nti
c
ation 
t
e
c
hnology to allow your 
W
e
b appli
c
ation to a
c
c
e
s
s
th
e
data of Window
s
Liv
e
u
s
e
r
s
and 
e
xpo
s
ing many of 
th
e
s
e
s
e
rvi
c
e
s
with th
e
Atom 
Publi
s
hing Proto
c
ol will mak
e
Window
s
Liv
e
Data 
e
a
s
y to a
c
c
e
s
s
and y
e
r
e
main firmly 
c
ontroll
e
d by 
th
e
u
s
e
r.
Fa
s
t Fa
c
t
s
D
r. 
N
e
i
l
Neil@Rood
y
n.
c
om
Dr. N
e
il is 
a
n ind
e
p
e
nd
e
nt 
itin
e
r
a
nt consult
a
nt, tr
a
in
e
r, 
a
nd 
a
uthor. H
e
tr
a
v
e
ls th
e
world working with softw
a
r
e
comp
a
ni
e
s. Dr. N
e
il lov
e
Austr
a
li
a
, wh
e
r
e
h
e
sp
e
nds th
e
summ
e
e
njoying th
e
Sydn
e
lif
e
styl
e
a
nd h
e
lping softw
a
r
e
d
e
v
e
lopm
e
nt t
e
a
ms g
e
t mor
e
productiv
e
. Dr. N
e
il sp
e
nds his 
oth
e
r summ
e
e
a
ch y
e
a
r fl ying 
b
e
tw
e
e
n north
e
rn 
E
urop
e
a
nd 
th
e
USA working with softw
a
r
e
t
e
a
ms 
a
nd writing 
a
bout his 
e
xp
e
ri
e
nc
e
s. N
e
il brings his 
busin
e
ss 
a
nd t
e
chnic
a
l skills to 
th
e
comp
a
ni
e
s h
e
works with 
to 
e
nsur
e
th
a
t h
e
h
a
s h
a
ppy 
custom
e
rs. His l
a
t
e
st book 
e
Xtr
e
m
e
.N
E
T (Addison W
e
sl
e
y, 
2005) introduc
e
e
Xtr
e
m
e
Progr
a
mming T
e
chniqu
e
s to 
.N
E
T d
e
v
e
lop
e
rs. Dr. N
e
il is 
a
Microsoft R
e
gion
a
l Dir
e
ctor 
a
nd 
a
Windows Liv
e
D
e
v
e
lop
e
MVP.
Dr. N
e
il found
e
http://ViaWindow
s
Li
v
e.
c
om
a
W
e
b sit
e
to h
e
lp d
e
v
e
lop
e
rs 
build on Windows Liv
e
s
e
rvic
e
s.
You c
a
n fi nd out mor
e
a
bout 
N
e
il from 
http://www.Rood
y
n.
c
om
.
There are two d
i
st
i
nct 
types of data that users have 
stored on
l
i
ne and 
i
i
i
mportant to understand the 
d
i
fference between shared data 
and pr
i
vate data.
.NET Imaging Processing SDK | Process, Manipulate Images
Provide basic transformation functions, like Crop, Rotate, Resize, Flip and more; Basic image edit function support, such as Erase Rectangle, Merge Block, etc.
delete text pdf document; delete text pdf file
47
www.cod
e
-m
a
g
a
z
in
e
.com
Link to Consent Screen
Persist the
Consent Token &
Owner Handle
(dependenton Resource)
Delegation
Token
Expiresafter
short time span.
Send Refresh Token
Live ID
Delegation
Service
Send request & Delegation Token
Returns Consent Token (HTTP(s))
Get Delegation Token
Data
Resource 
Provider
(e.g. Live Contacts)
(e.g. Spaces)
(e.g. Calendar)
(e.g. Storage)
End
User
Third
party.com
B
r
o
w
s
e
s
Windows Liv
e
D
e
l
e
g
a
t
e
d APIs
A  Delegation  token,  this  token  allows  your 
1. 
application to access the service offered. This 
token has a short lifespan, usually a matter of 
hours, but defi ned by the policy confi guration 
of the target resource provider.
A Refresh token, this is used to get a fresh del-
2. 
egation token when you  need to access  the 
service again at a later date. This token will 
expire when the user whose authority you are 
delegating decides.
The  Service  Offers  with  expiration  dates,  a 
3. 
collection of services that the user has granted 
your  application  to  access.  Along with  each 
service offered will be an expiration date in-
dicating  when  your  application  access  will 
expire.
An identifi er of the user, typically this will be 
4. 
an ID known as the CID.
Once  you  have  built  a  page 
to  receive this token,  you  will 
need to add  a  link  from your 
application  to  the  Microsoft 
consent  page.  When  your  ap-
plication  makes  a  call  to  the 
consent page, it needs to pass in 
the address of the return page 
you built, the address of the pri-
vacy policy statement for your 
site, your AppID, and a list of 
the services you would like to 
access. It is good practice to provide the user with 
an explanation before taking them to the consent 
screen. The user can then decide whether to grant 
permission for your application to these services and 
the length of time each service can be accessed.
Once you have a consent token, you can use the 
delegation  token  to  make  server  calls  from your 
Web server to the service, typically by passing the 
delegation token in the HTTP Authentication head-
er of your request. The delegation token will expire 
http://m
s
m.li
v
e.
c
om/
A
PP. Here you can register your 
site for an application identifi er. You should remem-
ber this identifi er is unique to your application not 
to you as a developer or to your company. For each 
application that you build to access these services 
you will need a new AppID.
Once  you  have  an  AppID,  your  application  can 
use this ID to contact the resource provider. The 
resource providers are the different Windows Live 
services that support this mechanism of delegated 
authentication. The number of data sources will ex-
pand throughout 2008.
T
he 
U
ser 
O
wns 
T
heir 
D
ata
The number one rule is that 
t
h
e
u
se
r
always
ow
n
s
t
h
ei
r
da
t
a. Your application must never redistribute 
its copy of the user data without consent from that 
user. This is important. Any application that breaks 
the user’s trust or the Windows Live terms of usage 
(http://de
v
.li
v
e.
c
om/term
s
/) can have its AppID re-
voked. Users will decide the length of time your ap-
plication can continue to access their data. Within 
this timeframe your application can request the user 
data over the wire as often as it is needed.
Permissions 
G
ranted
Once you have your AppID you will need to build a 
handler page to receive a token known as a consent 
token. This consent token will be sent to your ap-
plication from Microsoft once a user has consented 
to allow delegated authentication to your applica-
tion. A consent token contains 4 important pieces 
of information:
W
i
ndows 
L
i
ve de
l
egated 
authent
i
cat
i
on 
i
s a techno
l
ogy that 
a
l
l
ows a user to de
l
egate author
i
ty 
to a part
i
cu
l
ar app
l
i
cat
i
on for a set 
of resources.
Figure 1: D
a
t
a
fl ow in d
e
l
e
g
a
t
e
a
uth
e
ntic
a
tion.
48
www.cod
e
-m
a
g
a
z
in
e
.com
Windows Liv
e
D
e
l
e
g
a
t
e
d APIs
Well defi ned architectural patterns will be de-
2. 
fi ned to guide application development.
Tools  will  emerge  to  automate  some  of  the 
3. 
code generation (see next section).
A
D
O
.N
E
T
D
ata Services (aka Astoria)
At the MIX07 conference in Las Vegas, a new tech-
nology codenamed Astoria was announced. Astoria 
has since been named ADO.NET Data Services and 
is currently available as a download as a pre-release 
(CTP) for Visual Studio 2008 users in the ASP.NET 
3.5 Extensions pack.
The  ADO.NET  Data  Services  consists  of  librar-
ies for creating and consuming data services over 
HTTP. These ADO.NET Data Services can present 
CRUD operations, which can be invoked through 
the use of the HTTP verbs (GET, PUT, POST, DE-
LETE). Does this sound familiar yet
?
ADO.NET Data Services are designed to work with 
standard formats such as JSON and AtomPub. This 
is really l
u
c
k
y for developers who want to use the 
new Windows Live AtomPub services!
However, there is more goodness to be harvested 
from the ADO.NET Data Services, as they provide 
a  mechanism for  modeling the  data  into objects. 
These objects are instances of entities and you can 
use  the  ADO.NET  Data Service  to represent  the 
data as entities, and also the relationships between 
the entities, as defi ned in the service schemas.
For  developers  consuming  services,  this  means 
that they can interact with Window Live AtomPub 
services in terms of .NET objects that can be que-
ried,  modifi ed, and sent back  to the  service. This 
is a great, natural way of interacting with services 
from the .NET environment. Since it is all AtomPub 
under the covers, openness and interoperability are 
not compromised.
As a related note, developers wanting to create 
services that follow the same HTTP interface pat-
tern as Windows Live AtomPub services can use 
ADO.NET Data Services on the server to easily 
do that.
Microsoft, 
D
o It for Me
By  providing the Windows Live  Service  offerings 
in the AtomPub open standard, Microsoft has en-
abled all developers to access the same services in a 
uniform way. As an ASP.NET developer, you might 
not care about those
other
programmers but having 
a  well defi ned  and open standard way of  access-
ing the data benefi ts you as well. In an ASP.NET 
server-side development world, much of the code 
needed to access these AtomPub services can be in 
a template and reused.
The ADO.NET Data Services provides this templat-
ing technology. An ASP.NET AJAX library abstracts 
in a short time frame, so your application may need 
to use the refresh token to request a new delegation 
token. Fig
u
r
e
1 shows the data fl ow in the delegat-
ed authentication process.
If your application knows about a user, for example 
you use the Live ID Web authentication model to 
manage  logged  in  users, then  you probably want 
to store the consent token against the user ID. The 
best approach for this would be to create a new data 
table in your application data-
base to maintain the refresh to-
ken and services (with expira-
tion dates) for each user.
One  more  thing  that  you 
should take into consideration 
is that the expiration dates you 
have stored for a user may no 
longer be valid. At any time a 
user  can  change  the  permis-
sions they have granted to ap-
plications. This means that the 
expiration dates should be used 
as a guide for your application to determine if you 
need to present the consent screen to the user again 
and request a new consent token. If the user has re-
voked the permission for your application to access 
their data, your application will receive an unau-
thorized access response. Your application needs to 
gracefully handle an unauthorized access response; 
your application could reroute the user to the con-
sent screen, but it would be smarter to indicate to 
the user why they are being asked for permission 
again.
E
veryth
i
ng as an Atom
The  Atom  Publishing  Protocol  (or  AtomPub  as 
it’s often called) defi nes a simple protocol for per-
forming CRUD (Create, Read, Update, and Delete) 
operations on data over HTTP. Over the coming 
months, most of the Windows Live Services will 
provide  offerings  that  conform  to  the  AtomPub 
standards. This is a fantastic move towards stan-
dardization  of  the Windows  Live Services APIs. 
In the last few years the APIs emerging from the 
various Windows Live Services have been varied 
and numerous. Each product group within Micro-
soft created their own API set, some were REST 
based,  some  were  SOAP,  others  were  WebDav. 
Standardizing on a single technology to access the 
Windows Live Services will make our lives as de-
velopers easier.
The new AtomPub services will be available for ac-
cess through the delegated authentication mecha-
nism  described  in  the  previous  section. Combin-
ing these two technologies to create a well defi ned 
mechanism for accessing, authenticating, and work-
ing with the Windows Live Services has the follow-
ing implications:
Applications  can  reuse  the  authentication 
1. 
code across multiple services.
If the serv
i
ce offered 
requ
i
res that you 
i
dent
i
fy your 
app
l
i
cat
i
on w
i
th an 
app
l
i
cat
i
on 
i
dent
i
fi er, 
you w
i
l
l
need to obta
i
n an 
app
l
i
cat
i
on I
D
from the W
i
ndows 
L
i
ve M
i
crosoft 
S
erv
i
ce Manager
49
www.cod
e
-m
a
g
a
z
in
e
.com
Windows Liv
e
D
e
l
e
g
a
t
e
d APIs
want to perform, you call the executeActions meth-
od on the ActionSequence object and the batched 
operation requests will be made.
Photos 
E
xamp
l
e
The Windows Live Photos API allows a third party 
site to request delegated authentication from a user. 
Once the user has granted authentication privileges 
to a site, the code on that site can make requests 
to read and write photos associated with that us-
ers Live ID, these are the same photos that are dis-
played on Windows Live Spaces.
The code in Lis
t
i
n
g
1 provides an example of how 
the ADO.NET Data Services can be used to call the 
Windows Live Photos API. You can see that, by en-
capsulating the hard work of accessing the service, 
all the nasty details of how to make the HTTP calls. 
This leaves you to focus on how you want to ma-
nipulate the data in your application. All you need 
to do in your ASP.NET AJAX code is create an in-
stance of a Sys.Data.DataService class, passing the 
URI of the service into the constructor:
var liveService = 
new Sys.Data.DataService("xxxxxxx.live.com");
Once you have an instance of the DataService class, 
you can perform various operations on the data us-
ing the following methods:
Query, retrieve data from the service.
• 
Insert, create new data records on the service.
• 
Update, change data that already exists.
• 
Remove, delete data.
• 
Remember  that  not  all  services  will  allow  all  of 
these actions; your application might not have the 
correct authorization or the services might not sup-
port the operation at all.
Each of these methods will create an instant re-
quest over the wire to carry out the operation. If 
you would like your application to batch operations 
together  you can  use  the  createActionSequence 
method on the DataService object. ActionSequence 
is a class that contains a collection of operations 
to perform on the service. Once you have created 
the ActionSequence and added the operations you 
S
tandard
i
z
i
ng on 
a s
i
ng
l
e techno
l
ogy to access 
the W
i
ndows 
L
i
ve 
S
erv
i
ces 
w
i
l
l
make our 
l
i
ves as 
deve
l
opers eas
i
er.
class LivePhotosSimpleClient
{
  static void Main(string[] args)
{
LivePhotos photoSvc = new 
LivePhotos("http://sitename/folder/AtomLivePhotos");
// list all albums
foreach (Album a in photoSvc.Albums)
{
Console.WriteLine("{0}\t(photos: {1})", a.Name, 
a.Photos == null ? 0 : a.Photos.Count);
}
Album album;
// single album by key w/URL
album = 
photoSvc.CreateQuery<Album>("/Albums(434)").Single();
Console.WriteLine(album.Name);
// single album by key w/LINQ
album = (from a in photoSvc.Albums
where a.ID == 434
select a).Single();
Console.WriteLine(album.Name);
// photos is album 371, LINQ style
var photos = from a in photoSvc.Albums
where a.ID == 371
from p in a.Photos
select p;
Photo last = null;
foreach (Photo p in photos)
{
Console.WriteLine("{0}:\t{1}", p.ID, p.Title);
last = p;
}
if (last != null)
{
photoSvc.LoadProperty(last, "PhotoBytes");
Console.WriteLine("Loaded picture of type '{0}'. 
Launching in explorer...", last.PhotoMimeType);
string fi le = Path.GetTempFileName();
File.WriteAllBytes(fi le, last.PhotoBytes);
System.Diagnostics.Process.Start(fi le);
}
// create an album
Album myPics = new Album();
myPics.ID = 987;
myPics.Name = "Mix08";
photoSvc.AddObject("Albums", myPics);
photoSvc.SaveChanges();
Console.WriteLine("Created, Album ID " + myPics.ID);
}
}
Li
s
ting 1: Using AD
O
.N
E
T D
a
t
a
S
e
rvic
e
s to g
e
t photos.
50
www.cod
e
-m
a
g
a
z
in
e
.com
Windows Liv
e
D
e
l
e
g
a
t
e
d APIs
you provide a downgraded experience
?
Will you 
block that user from your site
?
Will you provide 
an equally rich experience
?
As always, one set of 
solutions creates its own new set of challenges for 
us to address. 
Whatever  solutions  you  decide  for  your  applica-
tions, you can be  sure the technologies discussed 
in this article are starting to open the doors of ac-
cessibility to a large number of Web developers that 
have previously found the Windows Live APIs too 
diverse and complex.
the Windows Live Photos API can be addressed as 
if it was a local set of .NET objects.
The code in Lis
t
i
n
g
2 shows the details of how the 
supporting  classes can  be created  to  provide this 
extra layer of encapsulation. The LivePhotos class 
does the heavy listing, and most of that is done by 
simply deriving from the WebDataContext class.
C
onc
l
us
i
on
Writing an article like this before the technology 
is released presents some challenges but it also al-
lows  me to help you gain  insight into  how new 
technologies will impact the way we work in the 
near future. As more Windows Live Services start 
to support the AtomPUB format you (with the help 
of the ADO.NET Data Services) will be able to ac-
cess the huge quantity of resources, personal data 
and relationships between people. All of this adds 
up to a far deeper level of connection between the 
online applications we build. With the caveat that 
only the data a user actually wants to expose will 
be available to our Web applications. This is going 
to become a new important consideration for you 
to handle in your code. How will your application 
behave if a user denies access to a set of data
?
Will 
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Data.WebClient;
using System.Xml.Linq;
public class Album
{
public Album()
{
this.Photos = new List<Photo>();
}
public int ID { getset; }
public string Name { getset; }
public List<Photo> Photos { getset; }
}
[MediaEntry("PhotoBytes")]
public class Photo
{
public int ID { getset; }
public string Version { getset; }
public string Title { get; set; }
[MimeTypeProperty("PhotoMimeType")]
public byte[] PhotoBytes { getset; }
public string PhotoMimeType { getset; }
}
public class LivePhotos : WebDataContext
{
private readonly XNamespace atomns = 
  "http://www.w3.org/2005/Atom";
public LivePhotos(string url)
base(url)
{
this.DataNamespace = "http://dev.live.com/photos";
this.SendingRequest += new EventHandler
<SendingRequestEventArgs>(SendingRequestHandler);
this.ReadingEntity += new EventHandler
<ReadingWritingEntityEventArgs>(ReadingEntityHandler);
}
void ReadingEntityHandler(object sender, 
ReadingWritingEntityEventArgs e)
{
if (e.Entity is Photo)
{
((Photo)e.Entity).Title = e.Data.Element(atomns + 
"title").Value;
}
}
void SendingRequestHandler(object sender, 
SendingRequestEventArgs e)
{
e.Request.Proxy = new System.Net.WebProxy(new 
Uri("http://127.0.0.1:8888"));
Console.WriteLine("  --> " + 
e.Request.RequestUri.ToString());
}
public IQueryable<Album> Albums
{
get { return this.CreateQuery<Album>("/Albums"); }
}
}
Li
s
ting 2: Supporting cl
a
ss
e
s for photos s
a
mpl
e
.
Dr.
Neil
The A
D
O
.
N
E
D
ata 
S
erv
i
ces prov
i
des 
th
i
s temp
l
ate.
Documents you may be interested
Documents you may be interested