SlideShare a Scribd company logo
Microsoft Windows Server Appfabric Cookbook
Hammad Rajjoub Rick G Garibay download
https://ebookbell.com/product/microsoft-windows-server-appfabric-
cookbook-hammad-rajjoub-rick-g-garibay-2614588
Explore and download more ebooks at ebookbell.com
Here are some recommended products that we believe you will be
interested in. You can click the link to download.
Microsoft Windows Server 2003 Performance Guide Mark Friedman
https://ebookbell.com/product/microsoft-windows-
server-2003-performance-guide-mark-friedman-48712654
Microsoft Windows Server 2008 R2 The Administrators Essential
Reference Dustin Hannifin
https://ebookbell.com/product/microsoft-windows-server-2008-r2-the-
administrators-essential-reference-dustin-hannifin-4342088
Microsoft Windows Server 2012 Administration Instant Reference 1st
Edition Matthew Hester
https://ebookbell.com/product/microsoft-windows-
server-2012-administration-instant-reference-1st-edition-matthew-
hester-4566390
Microsoft Windows Server 2003 Administrators Companion 2nd Edition
Charlie Russel
https://ebookbell.com/product/microsoft-windows-
server-2003-administrators-companion-2nd-edition-charlie-
russel-5471578
Microsoft Windows Server 2003 Inside Out William R Stanek
https://ebookbell.com/product/microsoft-windows-server-2003-inside-
out-william-r-stanek-982892
Microsoft Windows Server 2008 Administration Steve Seguis
https://ebookbell.com/product/microsoft-windows-
server-2008-administration-steve-seguis-1231178
Microsoft Windows Server 2008 A Beginners Guide 1st Edition Marty
Matthews
https://ebookbell.com/product/microsoft-windows-
server-2008-a-beginners-guide-1st-edition-marty-matthews-1268914
Microsoft Windows Server 2003 Pki And Certificate Security Pro Oneoffs
Brian Komar
https://ebookbell.com/product/microsoft-windows-server-2003-pki-and-
certificate-security-pro-oneoffs-brian-komar-1339294
Microsoft Windows Server Administration Essentials Exam 98365 1st
Edition Tom Carpenter
https://ebookbell.com/product/microsoft-windows-server-administration-
essentials-exam-98365-1st-edition-tom-carpenter-2336364
Microsoft Windows Server Appfabric Cookbook Hammad Rajjoub Rick G Garibay
Microsoft Windows Server Appfabric Cookbook Hammad Rajjoub Rick G Garibay
Microsoft Windows
Server AppFabric
Cookbook
60 recipes for getting the most out of WCF and WF
services, including the latest capabilities in AppFabric 1.1
for Windows Server
Hammad Rajjoub
Rick G. Garibay
P U B L I S H I N G
professional expertise distilled
BIRMINGHAM - MUMBAI
Microsoft Windows Server
AppFabric Cookbook
Copyright © 2012 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or
transmitted in any form or by any means, without the prior written permission of the publisher,
except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the
information presented. However, the information contained in this book is sold without
warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers
and distributors will be held liable for any damages caused or alleged to be caused directly or
indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies
and products mentioned in this book by the appropriate use of capitals. However, Packt
Publishing cannot guarantee the accuracy of this information.
First published: July 2012
Production Reference: 1190712
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-84968-418-7
www.packtpub.com
Cover Image by Artie Ng (artherng@yahoo.com.au)
Credits
Authors
Hammad Rajjoub
Rick G. Garibay
Reviewers
Adnan Masood
Zubair Ahmed
Alvin Lau
Acquisition Editors
Sarah Cullington
Kerry George
Lead Technical Editor
Azharuddin Sheikh
Technical Editors
Joyslita D'Souza
Unnati Shah
Project Coordinator
Joel Goveya
Proofreader
Aaron Nash
Indexer
Hemangini Bari
Graphics
Valentine D'silva
Manu Joseph
Production Coordinator
Nilesh R. Mohite
Cover Work
Nilesh R. Mohite
Microsoft Windows Server Appfabric Cookbook Hammad Rajjoub Rick G Garibay
Foreword
Have you ever set foot in the kitchen with a certain hunger and found that you had no clue
as to how to make that dish? At such a time a cookbook is a wonderful thing. That's why I
appreciate this concept of a cookbook for workflows and services. At Microsoft when we build
products they are often chocked full of little known but wonderful capabilities and guys like
Hammad and Rick are just the sort of chefs that have what it takes to make you successful
with it. AppFabric brings some terrific capabilities to Windows Server and IIS with distributed
caching and terrific hosting features for WCF Services and WCF Workflow Services at no
additional cost, so using it is a no-brainer but maximizing it will take the kind of insight you will
find in this book. So break out the mixing bowls, spatulas, and turn on the oven… I can almost
smell success from here.
Ron Jacobs
Senior Program Manager, Microsoft Corporation
About the Authors
Hammad Rajjoub works as an Architect Evangelist with Microsoft. Before joining
Microsoft, he was awarded Microsoft's Most Valuable Professional award, seven years in a
row. Along with being an MVP he was also a Microsoft Business Platform Technology Advisor.
Being an MVP in Connected Systems gave him early access to Windows Communication
Foundation, Windows Workflow Foundation, as well as Windows Server AppFabric. In his
previous roles he has been a CTO at a technology startup, Vice President at one of the largest
financial institutions, as well as a Solutions Architect at a leading consulting company.
He has over a decade of experience using Microsoft Technologies, especially .NET since its
beta 1 release. He is a published author and a frequent speaker at technology conferences
(including TechEd and Cloud Computing Asia). He has founded a number of developer and
architect communities over the years and remains a passionate speaker and contributor at
local technical communities in Singapore. He is also an active member of the International
Association of Software Architects (IASA) - Singapore Chapter. His areas of interest include
Cloud Computing, Enterprise Architecture, Design Patterns, and Quantum Computation.
At home he is a busy husband and father of twin girls and a baby boy. For more details visit
his website at http://www.hammadrajjoub.net or on twitter: @hammadrajjoub.
Alhamdulillah - This work would not have been possible without the help
and support from my family. Special thanks to my mother Noor and my wife
Iman for being supportive and giving me time and help to complete this
book. I would also like to express my gratitude to my friend and co-author
of this book, Rick Garibay, for accepting my invitation to co-author this book
and sharing his feedback throughout the lifecycle of this book. Also, special
thanks to Adnan Masood, Zubair Ahmed, and Alvin Lau for technically
reviewing the book, providing feedback, and correcting numerous mistakes.
Last but not the least, thanks to the editorial and project team at Packt
Publishing for giving me the opportunity to write this book, and also being
patient and understanding through the process of writes, re-writes, technical
edits, as well as cases of missed deadlines.
Rick G. Garibay is a developer, architect, speaker, and author on distributed technologies
and is the General Manager of the national Connected Systems Practice at Neudesic. With
over 13 years' experience delivering distributed solutions across industry sectors such as
finance, transportation, hospitality, and gaming, he specializes in distributed technologies
such as Microsoft .NET, Windows Communication Foundation, Workflow Foundation, and
Windows Azure to help his clients deliver business value and drive revenue while reducing
operational costs.
As a five-time Microsoft Connected Systems MVP, he is an active speaker, writer, and
passionate community advocate and is the Co-Founder of the Phoenix Connected Systems
User Group (pcsug.org), celebrating four years in operation. He serves as an advisor to
Microsoft in a number of roles as a member of the Microsoft Application Platform Partner
Advisory Council and long-time member of the Business Platform Advisors and Azure
Technology Advisors groups.
Recent presentations include talks at the Microsoft SOA and Business Process Conference,
Microsoft TechEd, Dev Connections, .NET Rocks, Desert Code Camp, and numerous Microsoft
events and user groups throughout North America. He is a frequent contributor to industry
publications such as CODE Magazine and maintains a blog at http://rickgaribay.net.
You can catch up with Rick on Twitter @rickggaribay.
I would like to thank my loving, patient, and amazing wife Christie for being
my rock and providing a foundation which has allowed us to grow a beautiful
family while enduring the sometimes overbearing demands of my career.
I'm also grateful to my wonderful children, Sarah and Ricky for tolerating
the many lost nights and weekends holed up in my home office working
on this book.
I would also like to thank Mickey Williams, VP Technology Platform Group
at Neudesic for his support in taking on this project along with his words
of encouragement and (always timely) sense of humor along the way.
Last but not least, I would like to thank my friend and co-author, Hammad
Rajjoub for inviting me to participate in this project and trusting me to help
carry out his vision for this book. Hammad and I both share a labor of love
as it applies to the Microsoft distributed technology stack affectionately (and
somewhat nostalgically) known as "Connected Systems" and this book is
both a reflection and an acknowledgment of the tremendous work the WCF,
WF, and Dublin teams have done in putting these tremendous capabilities
within reach of developers tasked with solving tough distributed challenges
today.
About the Reviewers
Adnan Masood is a Software Engineer and Architect with zeal for solving interesting
algorithmic, business, and technology problems. With special interest in scalable
architectures, algorithm design, application security, and software development, he has over
a decade of hands-on experience in financial services and application service providers.
He currently works as a System Architect for Green Dot Corporation, a leading pre-paid
financial institution where he develops robust, scalable, and secure SOA based middle-tier
architectures, distributed systems, and web applications. He is a Microsoft Certified Trainer
and holds various technical certifications including MCPD (Enterprise Developer), MCSD .NET,
and SCJP-II. He is attributed and published in print media and on the Web; he also taught
Windows Communication Foundation (WCF) courses at the University of California, San Diego.
He regularly presents at local code camps and user groups. He is actively involved in the .NET
community as Co-founder and President of the of San Gabriel Valley .NET Developers group
and recipient of the INETA Community Champion Award for contributions to the developer
community in Southern California.
He holds a Master's degree in Computer Science and is currently pursuing a doctorate in
Machine Learning; specifically interestingness measures in outliers using belief networks.
He also holds systems architecture certification from MIT and SOA Migration, Adoption,
and Reuse Technique certificate from SEI, Carnegie Melon University. He can be reached at
adnan@nova.edu.
Alhamdullilah - Thanks to my family for their constant support during the
process of editing this book. I would also like to thank Hammad for the
opportunity and both Hammad and Rick for putting up with my feedback
and tech edits. Last but not least, thank you Joel for your great project
coordination skills.
Zubair Ahmed is an experienced software developer, blogger, and technical presenter. His
interests include software architecture, improving code quality, and keeping an eye on the
latest technologies. He works as a Software Consultant for Infusion Development in Dubai.
When he is not working he likes to spend time in front of his large monitor at home writing
some code, go for long drives with his wife, or socialize with friends.
His technical blog is at zubairahmed.net and his tweet handle is @zubairdotnet.
For technology updates, subscribe to his Facebook page at
http://facebook.com/zubair.ahmed.public.
www.PacktPub.com
Support files, eBooks, discount offers and more
You might want to visit www.PacktPub.com for support files and downloads related to
your book.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub
files available? You can upgrade to the eBook version at www.PacktPub.com and as a print
book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
service@packtpub.com for more details.
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a
range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
http://PacktLib.PacktPub.com
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library.
Here, you can access, read and search across Packt's entire library of books.
Why Subscribe?
f Fully searchable across every book published by Packt
f Copy and paste, print and bookmark content
f On demand and accessible via web browser
Free Access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib
today and view nine entirely free books. Simply use your login credentials for immediate access.
Instant Updates on New Packt Books
Get notified! Find out when new books are published by following @PacktEnterprise on Twitter,
or the Packt Enterprise Facebook page.
Table of Contents
Preface 1
Chapter 1: Installing Windows Server AppFabric 7
Introduction 7
Installing Windows Server AppFabric 8
Configuring Windows Server AppFabric (hosting and monitoring) 13
Configuring Windows Server AppFabric (caching) 22
Installing Cache Client Assemblies 27
Changing the Windows Server AppFabric configuration after installation 29
Starting a Caching service 36
Troubleshooting Windows Server AppFabric – configuration errors 39
Troubleshooting Windows Server AppFabric – auto restart issues 40
Chapter 2: Getting Started with AppFabric Caching 43
Introduction 43
Initializing Cache Client using code 45
Initializing Cache Client using configuration 50
Programming AppFabric Cache Client 53
Using AppFabric Cache via the ASP.NET provider model 58
Using AppFabric local cache 62
Using the AppFabric cache management tool 66
Building a custom provider model 71
Handling common Windows Server AppFabric caching errors 77
Chapter 3: Windows Server AppFabric Caching – Advanced Use Cases 87
Introduction 88
Using regions in cache 88
Using tags in cache 93
Using optimistic concurrency 95
Using pessimistic concurrency 98
ii
Table of Contents
Setting up expiration 100
Setting up eviction 104
Setting up notifications 107
Using performance counters 113
Troubleshooting throttling 122
Troubleshooting eviction 125
Setting up read through – write behind 126
Chapter 4: Windows Server AppFabric Hosting Fundamentals 135
Introduction 135
Installing the Web Deployment tool (Web Deploy) 136
Packaging services for deployment with Web Deploy 141
Hosting WCF services 147
Hosting WCF REST services 153
Hosting basic workflow services 163
Chapter 5: More Windows Server AppFabric Hosting Features 171
Introduction 171
Hosting long-running workflow services 172
Taking advantage of WAS and Auto-Start 187
Hosting Windows Azure Relay services 196
Using common Server AppFabric hosting commandlets 208
Chapter 6: Utilizing AppFabric Persistence 219
Introduction 219
Using Windows Server AppFabric workflow persistence 220
Programmatically querying persisted workflow instances 230
Programmatically controlling persisted workflow instances 239
Developing an Instance Store provider 246
Developing an Instance Query provider 249
Developing an Instance Control provider 253
Registering and configuring custom store, query, and control providers 260
Chapter 7: Monitoring Windows Server AppFabric Deployment 267
Introduction 267
Collecting events from WCF and WF services 268
Viewing and classifying events in the AppFabric Dashboard 275
Enabling tracing and evaluating trace logs with WCF 286
Creating a customized tracking profile for WF services 294
Accessing the Monitoring DB 301
Building a custom dashboard 305
Using monitoring database cmdlets 327
Monitoring cache cluster health 331
iii
Table of Contents
Chapter 8: Scaling AppFabric Hosting, Monitoring, and Persistence 337
Introduction 337
Creating an initial base configuration 340
Adding and removing servers from the farm 347
Application deployment on the farm 361
Configuration and management on the farm 363
Automating deployment with scripts 367
Chapter 9: Configuring Windows Server AppFabric Security 373
Introduction 373
Running caching services using Domain accounts 375
Setting up security for persistence stores 378
Securing Windows Server AppFabric's monitoring store 383
Securing the Event Collection service 390
Index 401
Microsoft Windows Server Appfabric Cookbook Hammad Rajjoub Rick G Garibay
Preface
Windows Server AppFabric is an extension of the Application Server Role on the Windows
Server Platform. In a nutshell, Windows Server AppFabric frees Windows Communication
Foundation (WCF) and Windows Workflow Foundation (WF) Service developers from common
infrastructure plumbing by providing a robust, secure, composable, and reliable platform
which provides caching, hosting, and monitoring capabilities, including support for long
running workflow services, all on the Windows Platform. As such, Windows Server AppFabric
is an evolution of the Windows Server platform, providing essential building blocks for first-
classing WCF (for code-based services) and WF (for declarative workflow services) that are
built using the .NET Framework 4 and Visual Studio 2010.
As an extension to IIS and WAS, Windows Server AppFabric relies on IIS's proven capabilities
for hosting and lifecycle management, adding additional useful capabilities for working with
WCF and WF services. In addition, Windows Server AppFabric takes advantage of Windows
Server's robust event tracing mechanism (also known as ETW). ETW provides optimized
and high-performing kernel-level instrumentation which greatly minimizes impact on the
performance of WCF and WF services hosted in IIS with Windows Server AppFabric.
Whether you are a developer who wants to avoid the same repetitive tasks when preparing
your WCF and/or WF services for deployment, or an IT Pro who wants to avoid complex XML
for configuring hosting and monitoring options for the services you manage, you will instantly
benefit from Windows Server AppFabric. Best of all, Microsoft has made this key extension
to the Windows Server Platform available free of charge.
Written by both a former MVP and now Architect Evangelist with Microsoft and a five-time
Connected Systems Developer MVP, the authors of this book both worked very closely with
Microsoft during the development of the product (then codenamed "Dublin") participating in
Software Design Reviews and early incubation initiatives. Hammad and Rick have advised
customers of all shapes and sizes and fielded these capabilities in countless projects across
various verticals in the two years since its general availability.
This book is full of practical, step-by-step guidance including useful tips and techniques that
will allow you to build scalable, reliable, and secure service-oriented applications on the
Windows Server Platform with IIS and Windows Server AppFabric.
Preface
2
What this book covers
Chapter 1, Installing Windows Server AppFabric, covers setting up your development
environment to use Windows Server AppFabric. You'll learn how to install hosting, persistence
and monitoring capabilities, including provisioning repositories, choosing the appropriate
storage options, making changes to configuration after installation, and troubleshooting
common (and not so common) installation issues you might encounter along the way.
Chapter 2, Getting Started with AppFabric Caching, introduces Caching in Windows Server
AppFabric, covering everything you need to get started with introducing this important
capability to your composite applications and services. You will learn how to set up and
use Caching using code and configuration options, as well as working with Caching within
your applications. In addition, you'll learn how easily an existing application that relies on
ASP.NET session state can immediately benefit from Windows Server AppFabric Cache,
handling common error conditions, using PowerShell commandlets, and building a custom
provider model.
Chapter 3, Windows Server AppFabric Caching – Advanced Use Cases, builds on the concepts
in the previous chapter, covering the use of Regions and Tags as well as choosing the right
concurrency mode and establishing expiration, eviction, and notification policies. You will also
learn advanced monitoring concepts including the use of performance counters, configuring
high availability, and common troubleshooting techniques for getting the most out of Windows
Server AppFabric Cache.
Chapter 4, Windows Server AppFabric Hosting Fundamentals, introduces Windows
Server AppFabric's hosting capabilities, covering common deployment, management,
and hosting scenarios. You'll learn how to host WCF SOAP and REST services as well as
simple WF services along with a number of tips and tricks for moving beyond the service
template defaults.
Chapter 5, More Windows Server AppFabric Hosting Features, covers additional hosting
topics, including supporting long-running WF services, how your services can benefit from
the Auto-Start feature, properly hosting WCF services that take advantage of Windows
Azure Service Bus Relay bindings for enabling modern, hybrid scenarios as well as
common PowerShell commandlets for scripting many of the tasks covered in this and
the previous chapter.
Chapter 6, Utilizing AppFabric Persistence, provides ample coverage of Windows Server
AppFabric persistence capabilities, including configuring persistence for WF services, working
with multiple persistence stores, and developing instance store, control, and query providers.
This chapter also provides an in-depth walkthrough of development and configuration of
custom instance, control, and query providers.
Preface
3
Chapter 7, Monitoring Windows Server AppFabric Deployment, provides an introduction to
the monitoring capabilities provided by Windows Server AppFabric. Topics include collecting
and viewing events from WCF and WF services, enabling tracing and configuring tracking
profiles, and leveraging PowerShell cmdlets for monitoring WCF and WF services as well as
the Caching service. In addition, you'll learn how to surface monitoring information to any user
experience by following the sample recipe for building a custom monitoring dashboard using
ASP.NET MVC and OData.
Chapter 8, Scaling AppFabric Hosting, Monitoring, and Persistence, covers a common
scenario for scaling Windows Server AppFabric across multiple IIS hosts. You will learn how
to prepare two hosts for clustering using Microsoft NLB as well as understand deployment,
management, and administration of a multi-host Windows Server AppFabric deployment that
shares a common, centralized persistence store.
Chapter 9, Configuring Windows Server AppFabric Security, covers what you need to know
about planning and implementing a security model with Windows Server AppFabric. You will
learn how to secure the caching, persistence, monitoring, and eventing (via ETW) subsystems
of Windows Server AppFabric.
What you need for this book
This book assumes you have a solid foundation in messaging and workflow concepts and are
proficient in developing web services with WCF 4.0 and WF 4.0, in addition to C#, the .NET
Framework, and Visual Studio 2010. You will need a Windows 7 (or Windows Server 2008/R2)
machine configured for IIS 7 along with SQL Server and Visual Studio 2010, as well as either
Windows Server AppFabric or Microsoft AppFabric 1.1 for Windows Server.
To take advantage of the latest caching features introduced in AppFabric 1.1, it is
recommended that you install Microsoft AppFabric 1.1. for Windows Server. Otherwise,
Windows Server AppFabric (the first version of this release) will suffice and is the product
name we use throughout this book.
Either version can be installed on Windows 7, Windows Server 2008, Windows Vista R2,
or Windows Server 2008 R2 and they support both 32- and 64-bit architectures. You will
also need Microsoft .NET Framework v4, IIS7, and Windows PowerShell 2.0. In terms of
hardware, officially, any 1GHz+ CPU (900MHz+ for Dual Core and 700MHz+ for Quad Core)
with 2 GB of RAM will be sufficient to get up and running. However, it is recommended that
you have at least 4 GB of RAM to run Windows Server AppFabric or Microsoft AppFabric 1.1
for Windows Server.
Preface
4
Who this book is for
Whether you are an architect or developer designing and developing composite solutions
with WCF and WF services or an IT Pro tasked with their deployment and maintenance;
or designing and implementing a distributed caching strategy for your .NET services and
applications, this book is for you.
This book does not assume any prior knowledge of Windows Server AppFabric; however, a
basic understanding of .NET Framework 4.0, Windows Communication Foundation (WCF),
and Windows Workflow Foundation (WF) technologies is required.
Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of
information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text are shown as follows: "Once the Caching service is up and running, we can
query it for the caches that are available in this cluster by using the Get-Cache command."
A block of code is set as follows:
internal enum AckNack
{
Ack,
Nack,
Pending,
}
When we wish to draw your attention to a particular part of a code block, the relevant lines or
items are set in bold:
<microsoft.applicationServer>
<monitoring>
<default
enabled="true"
connectionStringName="ConnectionString"
monitoringLevel="Troubleshooting" />
</monitoring>
</microsoft.applicationServer>
Any command-line input or output is written as follows:
Get-ASAppMonitoring -SiteName "Default Web Site" -VirtualPath
/ReservationService
Preface
5
New terms and important words are shown in bold. Words that you see on the screen, in
menus or dialog boxes for example, appear in the text like this: "In IIS, click on the application
and select Features View."
Warnings or important notes appear in a box like this.
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this
book—what you liked or may have disliked. Reader feedback is important for us to develop
titles that you really get the most out of.
To send us general feedback, simply send an e-mail to feedback@packtpub.com, and
mention the book title through the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or
contributing to a book, see our author guide on www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to
get the most from your purchase.
Downloading the example code
You can download the example code files for all Packt books you have purchased from your
account at http://www.packtpub.com. If you purchased this book elsewhere, you can
visit http://www.packtpub.com/support and register to have the files e-mailed
directly to you.
Preface
6
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do
happen. If you find a mistake in one of our books—maybe a mistake in the text or the
code—we would be grateful if you would report this to us. By doing so, you can save other
readers from frustration and help us improve subsequent versions of this book. If you find
any errata, please report them by visiting http://www.packtpub.com/support,
selecting your book, clicking on the errata submission form link, and entering the details
of your errata. Once your errata are verified, your submission will be accepted and the errata
will be uploaded to our website, or added to any list of existing errata, under the Errata section
of that title.
Piracy
Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt,
we take the protection of our copyright and licenses very seriously. If you come across any
illegal copies of our works, in any form, on the Internet, please provide us with the location
address or website name immediately so that we can pursue a remedy.
Please contact us at copyright@packtpub.com with a link to the suspected pirated
material.
We appreciate your help in protecting our authors, and our ability to bring you
valuable content.
Questions
You can contact us at questions@packtpub.com if you are having a problem with any
aspect of the book, and we will do our best to address it.
1
Installing Windows
Server AppFabric
In this chapter, we will cover:
f
f Installing Windows Server AppFabric
f
f Configuring Windows Server AppFabric (hosting and monitoring)
f
f Configuring Windows Server AppFabric (caching)
f
f Installing caching Client Assemblies
f
f Changing the Windows Server AppFabric configuration after installation
f
f Starting a Caching service
f
f Troubleshooting Windows Server AppFabric – configuration errors
f
f Troubleshooting Windows Server AppFabric – auto restart issues
Introduction
Windows Server AppFabric is an extension of the Application server role on the Microsoft
Platform. Windows Server AppFabric offers in-memory, super-fast, scalable caching
capabilities for web applications and services. For applications built using Windows
Communication Foundation (WCF) and Workflow Foundation (WF), Windows Server
AppFabric provides streamlined hosting and monitoring capabilities that support
composition scenarios.
Windows Server AppFabric is built on top of an existing set of technologies on the Windows
platform including, but not limited to Internet Information Services (IIS), Windows Process
Activation Service (WAS), .NET Framework v 4.0, and Event Tracing for Windows (ETW).
Installing Windows Server AppFabric
8
In this chapter, we will look at how to set up Windows Server AppFabric using the different
configuration options. We will also see how the configuration of Windows Server AppFabric
can be changed after the installation. Lastly, at the end of the chapter, we will see how to
troubleshoot some common problems with Windows Server AppFabric installations.
Installing Windows Server AppFabric
Windows Server AppFabric is an extension of the Application Server role on the Windows
platform. At the time of this writing there are two ways to install Windows Server AppFabric.
One is the standard direct install and the other is using Microsoft's new and exciting Web
Platform Installer (WPI).
In this recipe, we will go through the step-by-step instructions to install Windows Server
AppFabric using WPI. Needless to say, if you already have Windows Server AppFabric installed
on your machine, then you can skip this recipe.
WPI is the preferred approach because it streamlines the installation
process by smartly identifying and installing the prerequisite software.
Getting ready
Windows Server AppFabric can be installed on Windows 7, Windows Server 2008 SP
2, Windows Vista R2, and Windows Server 2008 R2 (it supports both 32 and 64 bit
architectures). You will also need Microsoft .NET Framework v4, IIS7, and Windows PowerShell
2.0. In terms of hardware, officially, any 1GHz+ CPU (900MHz+ for Dual Core and 700MHz+
for Quad Core) with 2 GB of RAM will be sufficient to get up and running with Windows Server
AppFabric. However, it is recommended that you have at least 4 GB of RAM to run Windows
Server AppFabric.
If you want to try Windows Server AppFabric before actually
installing it on your host machine, it makes sense to use a virtual
machine that has Windows Server AppFabric installed on it so that
you can play with it. The good news is that Microsoft has made a
preconfigured Windows Server AppFabric VM available on MSDN
that can be downloaded and used with Microsoft's Virtual PC. This
download is available as a part of Microsoft's training kit for Windows
Server AppFabric. The download is available at: http://www.
microsoft.com/download/en/details.aspx?id=7956.
Chapter 1
9
How to do it...
WPI offers a highly streamlined package/software download installation mechanism. You can
get WPI from Microsoft's website at: http://www.microsoft.com/web/downloads/
platform.aspx. After downloading and installing WPI, you can use the following steps to
launch Windows Server AppFabric Installer:
1. Under the Start menu, go to All Programs. If you are using Windows 7, type Web
Platform Installer in the custom menu item, find the WPI as shown in the following
screenshot, and launch it:
2. Accept the User Account Control (UAC) warning. This will allow WPI to make changes
to your computer.
Installing Windows Server AppFabric
10
3. Click on Next at the bottom of the screen to get started with the WPI.
4. Type AppFabric in the search box (in the top right-hand corner of the screen) and
press the Enter key:
5. This will reveal a search result showing Windows Server AppFabric. Click on Add and
then on Install to continue:
Chapter 1
11
6. Now, WPI will ask to review the download and install of all the required software
components to run Windows Server AppFabric. Select I Accept to continue.
The list of components, third-party application software, and
Microsoft products will vary from machine to machine. WPI will
determine the missing software and will list it on this screen.
7. Once you select I Accept, WPI will download and install all the required software
components one by one. Sometimes this may result in multiple reboots for the
host machine.
Installing Windows Server AppFabric
12
8. Once all the required software components are installed, the Windows Server
AppFabric installation will be complete. Click on Finish:
How it works...
The Windows Server AppFabric installation adds three new Windows services: AppFabric
Caching Service, AppFabric Event Collection Service, and AppFabric Workflow
Management Service, for caching, monitoring, and hosting scenarios respectively. These
services can be seen when the Services Snap-in is launched from the Control Panel (or by
typing Services.msc in the search box under the Windows Start menu).
Chapter 1
13
As we can see in the preceding screenshot, only AppFabric Event Collection Service and
AppFabric Workflow Management Service have Status as Started and have Startup
Type defined as Automatic. By default, Windows Server AppFabric Caching Service is not
available for use after a machine reboot.
AppFabric Event Collection Service, AppFabric Workflow
Management Service, and Windows Server AppFabric Caching
Service form the heart of Windows Server AppFabric. These
services work in the background and perform tasks such as
collecting events, managing the workflow's life cycle, connecting
to the cache cluster, and serving cache related requests.
Once Windows Server AppFabric is installed, the next step is to configure it using the Windows
Server AppFabric Configuration wizard.
Configuring Windows Server AppFabric
(hosting and monitoring)
There are a number of configuration options available when configuring Windows
Server AppFabric, and in this recipe we will go through them. At this point, we should
appreciate Microsoft's efforts in designing Windows Server AppFabric, as it allows a
fair bit of customization.
Getting ready
Configuring Windows Server AppFabric is available via the Windows Server AppFabric
Configuration wizard. It is a fairly simple task, but it requires careful consideration of a
number of options and possibilities. We will need the following items ready in order to
configure Windows Server AppFabric:
f
f Service accounts to run (with administrative privileges)
‰
‰ AppFabric Hosting's Event Collection service
‰
‰ AppFabric Hosting's Persistence service
Installing Windows Server AppFabric
14
f
f SQL server database for:
‰
‰ (SQL server based) monitoring provider
‰
‰ (SQL server based) persistence provider
‰
‰ AppFabric caching store service provider (if your machine is part
of a domain)
f
f UNC file share for Windows Server AppFabric Caching service configuration provider
(if the host machine is running in a workstation mode)
f
f Information on cluster set up (for a high-availability scenario)
When HA (High Availability) is enabled Windows Server
AppFabric Cache stores a copy of each cached object or region
in a separate cache host. HA is discussed in detail in Chapter 7,
Monitoring Windows Server AppFabric Deployment.
f
f Unique port numbers for cache, cluster, arbitration, and replication
It should be noted that when you run the Windows Server
AppFabric Configuration wizard and make changes to the
configuration, it will overwrite any existing values.
How to do it...
To launch the Window Servers AppFabric Configuration wizard, go to All programs under the
Start menu, find AppFabric, and then select Configure AppFabric.
The following is a sequence of steps that will take you through the configuration wizard for
Windows Server AppFabric:
1. Run the Configure AppFabric wizard.
Chapter 1
15
2. Accept the User Account Control (UAC) dialog, confirming that you will allow this
program to make changes to your host machine:
3. Click on Next at the bottom of the screen to start the configuration of Windows
Server AppFabric.
Installing Windows Server AppFabric
16
4. Once you are at the Configure Hosting Services screen, select the box titled Set
monitoring configuration:
5. Select the service account required to run the AppFabric Event Collection service by
clicking on Change.
6. If you do not have a ready-made account available for the event collection service,
then you can leave the default value of NT AuthorityLocal Service, (as this can be
modified later on). For more details on security, please refer to the How it works…
section, as well as Chapter 9, Configuring Windows Server AppFabric Security.
Chapter 1
17
7. Now select the Monitoring provider, as this will provide access to the monitoring
database. (As there is only one default SQL-based implementation, select the
System.Data.SqlClient option.)
Windows Server AppFabric by design allows adding multiple
providers for monitoring and persistence. Configuring
multiple persistence providers is discussed in Chapter 5,
More Windows Server AppFabric Hosting Features.
8. Now click on Configure to launch the SQL configuration screen to help you select/
configure the SQL server instance that will be used to store monitoring information.
9. Select Register AppFabric monitoring store in root web.config.
10. Select Initialize monitoring store.
11. Under Connection String, provide the SQL Server name, for example, <HostServer
Name><SQLInstanceName>.
12. Provide the Database name for the SQL Server.
The SQL database (specified above in steps 11 and 12) is
used to store Windows Server AppFabric monitoring related
information. The Initialize monitoring store option will
initialize the database with the monitoring schema.
13. The first half of your configuration screen should appear as follows:
Installing Windows Server AppFabric
18
14. Now we will set up the Security Configuration to access the SQL Server database
instance that we selected/created previously. For Windows authentication, if you
have selected a complete install, then you will see default values for Administrators,
Readers, and Writers in Security Configuration. If you already have roles defined
and you have opted to initialize the Monitoring Database, then you can browse and
select the appropriate roles. Otherwise, use the default values of AS_Administrators
and AS_Observers as Administrators/Writers and Readers respectively. This is
shown in the following screenshot:
Windows Server AppFabric's AS_Administrators is a conceptual and
administrative role. As the name implies it allows full control over
AppFabric's configuration, monitoring, and persistence capabilities.
Event Collection and Workflow Persistence services run under this role.
Likewise, AS_Observer is also a conceptual and administrative role.
It allows you to view the application and services configuration, monitor
data, as well as view persisted instances, all without being able to
modify anything.
Chapter 1
19
15. However, if you wish to choose SQL Server Authentication, you will need to provide a
username and password that will be used to connect to SQL Server database. In this
recipe we will only use Windows authentication.
16. Once you click on OK you should see a confirmation dialog asking you to validate
whether you want these settings to take effect:
17. Click on Yes, and the wizard will go ahead and create and initialize the monitoring
store. Once completed, you should see a validation dialog advising you that the
Monitoring store was initialized and registered successfully:
18. On the Configure Hosting Services screen, select Set persistence configuration.
Installing Windows Server AppFabric
20
19. Now, select an AppFabric Workflow Management service account. Just like the
service account for monitoring, we will need a service account that has admin rights
and can access the persistence provider/store. If you have an account already
available for this then click on Change and select it. Otherwise, use the default value
of the NT AUTHORITYLOCAL SERVICE account:
20. From the Persistence provider dropdown, select a sqlStoreProvider and then
click on Configure. Now this screen should look familiar, as it is the same one we
used to set up Windows Server AppFabric Monitoring earlier on. We will once again
select Register AppFabric persistence store in root web.config. We will also select
Initialize persistence store and provide the SQL Server and Database names:
Chapter 1
21
21. Just like we set up the Security Configuration for the Windows Server AppFabric
Monitoring database, repeat the same steps and use built-in accounts for the
persistence database.
22. Click on OK and proceed to confirm the changes. This will complete the configuration
of the Hosting and Monitoring parts of Windows Server AppFabric.
Installing Windows Server AppFabric
22
How it works...
The configuration of Windows Server AppFabric provides contextual information to run Windows
Server AppFabric services that are responsible for monitoring and hosting services. The values
that we configured can be changed later, either by running the AppFabric Configuration wizard
again or by using Windows Server AppFabric PowerShell commandlets (Cmdlets).
Windows PowerShell is built on top of Microsoft.NET and offers a task
based command-line shell and scripting language. Windows PowerShell
has built in commands called Cmdlets (pronounced as commandlets).
Cmdlets are lightweight commands and typically return a Microsoft.NET
Framework object type to the next command in the pipeline.
It should be noted that monitoring and persistence services should be run under accounts
with administrative privileges so that they can read and persist events to the preconfigured
monitoring and persistence databases.
Configuring Windows Server
AppFabric (caching)
Once you have finished configuring the Hosting Services as discussed in the preceding recipe,
the next task is to configure the Caching Services for AppFabric. Just like in the preceding
recipe, we will select a service account that should be part of the administrator group so
that it has an administrative access to the caching configuration provider. Once again we will
consider a workstation configuration and select a valid local system account.
We will see how to setup the Caching Configuration Store Provider. At the end of this recipe,
we will also see how to join/create a new cache cluster (that this, the instance of Window
Server AppFabric Cache is part of) along with the end point details (that is, port addresses)
used by AppFabric services to communicate on the network.
Once we have configured Windows Server AppFabric Caching Services, we will be able to start
using AppFabric Caching.
Getting ready
To begin this recipe, we will need the following in place:
f
f A service account for the AppFabric Caching service.
f
f A file share (UNC Server Share) to store XML based cache configurations or a SQL
Server database for a SQL Server based AppFabric Configuration store. (This is
required for configuring a High Availability Caching Service scenario that runs on
Windows Server 2008.)
Chapter 1
23
How to do it…
To set up Windows Server AppFabric Caching follow these steps:
1. Run the AppFabric Configuration wizard.
2. Accept the User Account Control (UAC) dialog, confirming that you will allow this
program to make changes to your computer.
3. Click on Next on the Before you Begin and Configure Hosting Services screens to
reach Configure Caching Service.
You cannot directly select Caching Service Configuration
from the left-hand navigation panel on the Windows Server
AppFabric Configuration Wizard.
4. Once you are on the Caching Service screen of the Configure AppFabric wizard,
select the Set Caching Service configuration.
5. Under Caching Service Account, click on Change. This will allow you to select the
identity for the Caching Service Account.
6. If your machine is in workstation mode, then you cannot change the service account.
Otherwise, you can browse and select a local account (that has administrative access
to the Caching Configuration store).
7. Select XML from the Caching Service configuration provider dropdown.
8. The SQL Server based configuration is not available for the Caching Configuration
Service in workstation mode. If you select SQL provider and click on Configure, you
will get the following error message:
We discuss the use of SQL Server AppFabric Caching Service
Configuration Store Provider in more detail in Chapter 7,
Monitoring Windows Server AppFabric Deployment.
Installing Windows Server AppFabric
24
9. Under File Share, provide a file path of an existing UNC file share. This will allow
Windows Server AppFabric's Configuration Service to store and manage information
stored as an XML file under this provided path. Your screen will appear as follows:
10. It should be noted that the File share (UNC server share) selection wizard will not
allow you to create a new file share. As highlighted in the beginning of the recipe, it is
required to have a UNC file share readily available. Under cluster information select
New Cluster and click on Next.
11. Configure AppFabric Cache Node by providing a unique port number value (numbers
must be between 1024 and 65535) for the Cache port, Cluster port, Arbitration
port, and Replication port.
The Cache port is used for transmitting data between Cache Clients
and Cache Hosts. The Cluster port enables Cache Cluster formation and
Management. The Arbitration port is used to double check if the Cache
Host is unavailable. Arbitration is used when the Cache Host fails.
The Replication Host is used to move data between the Cache Hosts.
Replication is used when Cache is configured for High Availability.
Chapter 1
25
12. Configure Windows firewall exceptions by selecting the rules for Windows Server
AppFabric Caching Service and Remote Service Management. Your screen should
appear similar to the following:
If you are using any third-party (non-Microsoft) firewall then you
will need to manually update the firewall rules. This must be
done to allow Windows Server AppFabric to use the ports that
were specified during its configuration.
13. After clicking on Next, click on Yes on the Windows Server AppFabric Configuration
Wizard dialog box and you will come to the end of the wizard with an option to launch
IIS to further manage Windows Server AppFabric. Click on Finish to close the wizard.
Installing Windows Server AppFabric
26
14. Congratulations! You have fully configured Windows Server AppFabric. Click on Finish.
The High Availability feature of Windows Server AppFabric Caching can
only be enabled on Enterprise versions of Windows Server 2008/2008
R2. This implies that all the nodes in the cluster must have enterprise
editions of Windows Server 2008/2008 R2. For more information you may
refer to: http://go.microsoft.com/fwlink/?LinkId=164929.
How it works...
The Windows Server AppFabric Caching Service requires a service account to run its Windows
service as well as a configuration provider where it can store its configuration. As the caching
service runs under the identity of the provided account, the account must have administrative
privileges so that it can access and modify the configuration.
Chapter 1
27
The Windows Server AppFabric Caching Service needs to identify which ports to connect
to in order to communicate with the other hosts in the cluster. Once the port numbers are
specified, ensure that any software or hardware firewalls are not blocking these ports.
As we experienced in this recipe, the Windows Server AppFabric Caching Service is highly
configurable and the configuration wizard makes it extremely easy to set up (or change)
the existing configuration.
Now that we have configured Services for AppFabric and all the services are up and running
under valid service accounts along with firewall rule definitions, we can now start coding to
test and start consuming the caching service.
Installing Cache Client Assemblies
For non-production/client environments, we do not need to install the complete Windows
Server AppFabric. Instead, we can use Client Assemblies to connect to an instance of
AppFabric. In this recipe, we will see how to set up a Client Machine that can connect to and
communicate with Windows Server AppFabric. Once we have set up the Client Assemblies,
then we can use Visual Studio, for example, to write applications that can use Windows Server
AppFabric Caching capabilities.
Cache Client, as the name implies, refers to the applications
or services that can access and modify cached items by
connecting to a configured or specified cache cluster.
Getting ready
To set up the Cache Client, you will need the following assemblies:
f
f Microsoft.ApplicationServer.Caching.Core.dll
f
f Microsoft.ApplicationServer.Caching.Client.dll
f
f Microsoft.WindowsFabric.Common.dll
f
f Microsoft.WindowsFabric.Data.Common.dll
For the Windows Server AppFabric Caching Client to be able
connect to the Windows Server AppFabric Caching Service, it is
required that Client Binaries are of the same version number as
that of the Cache Service.
Installing Windows Server AppFabric
28
How to do it...
Setting up the Client Caching environment is a very simple task; it is just a matter of copying
the binaries highlighted at the start of the recipe to a particular location. These binaries
can be obtained by installing Windows Server AppFabric on a workstation. You will need the
Caching feature installation to get the required Caching binaries. The default location for
these assemblies is .WindowsSystem32AppFabric:
1. On Windows 7, type C:WindowsSystem32AppFabric in the custom menu; you
should be able to see a number of binaries and the configuration file:
Chapter 1
29
2. Obtain the following assemblies from the Windows Server AppFabric Cache installation:
‰
‰ Microsoft.ApplicationServer.Caching.Core.dll
‰
‰ Microsoft.ApplicationServer.Caching.Client.dll
‰
‰ Microsoft.WindowsFabric.Common.dll
‰
‰ Microsoft.WindowsFabric.Data.Common.dll
3. Copy the assemblies mentioned in step 2 to a place where they are available under a
known path to your Client application.
To cache-enable an application server, you will need to install the
Windows Server AppFabric Caching Assemblies on it. It is as simple
as having an application/service installed on the server along with
the AppFabric Caching assemblies. As long as your application
installation copies the AppFabric Cache Assemblies and has a valid
configuration in place, your application server is Cache enabled.
How it works...
The Windows Server AppFabric Caching Client application requires an API to talk to the
Caching Service. This API (provided as a set of assemblies highlighted earlier in this recipe)
must be available for the client to program against it. By copying these assemblies on the
client machine, we ensure that the client does not need to do a complete installation of
Windows Server AppFabric.
Once the Client Assemblies are available, we can write applications that can use AppFabric's
Caching capabilities and connect to the AppFabric Caching cluster.
Changing the Windows Server AppFabric
configuration after installation
Once Windows Server AppFabric is configured, it is still possible to change its configuration.
There could be a number of reasons for changing the configuration of an existing deployment.
The following are some of the most common scenarios that would require such changes:
f
f Changes database repository (SQL instance for example)
f
f Changes to system accounts (for security reasons)
f
f Port number related changes for caching.
You can use the Windows Server AppFabric configuration wizard and make the required
changes as they are required. In this recipe, we will see how to re-configure Windows Server
AppFabric after installation.
Installing Windows Server AppFabric
30
Getting ready
You will need an existing instance of AppFabric that has been installed and configured to get
started with this recipe. In this recipe, we will learn how to change Windows Server AppFabric
configuration after it has been installed on the host OS.
How to do it...
To begin, launch the AppFabric Configuration wizard to go through the configuration options on
an existing installation of AppFabric to easily select the options that we want to change.
1. Start the Window Server AppFabric Configuration wizard.
2. Accept the User Account Control (UAC) warning. Click on Next at the bottom of the
screen to get started with the configuration.
3. Give the wizard a few seconds while it loads the existing configuration. The screen
should look as follows:
Chapter 1
31
Once the configuration is loaded, you will notice that the green tick
under the monitoring and persistence configurations states that
the default monitoring store is registered.
4. We can now go ahead and change the monitoring configuration by selecting Set
monitoring configuration and clicking on Change.
5. This will launch a Windows Server AppFabric Monitoring Store Configuration wizard
that we have already used in the recipe Configuring Windows Server AppFabric
(hosting and monitoring) earlier in this chapter.
Installing Windows Server AppFabric
32
6. By selecting Register AppFabric monitoring store in root web.config, we can specify
the Server and Database name.
Registering the monitoring or persistence store in the configuration
implies that that the connection string (with the name
= ApplicationServerMonitoringConnectionString)
is placed in the root Web.Config file and is made available to all
subsequent websites.
The Initialize monitoring store option will create a new database
(if it does not already exist) and it will also initialize the schema and
the structure of the database (based on the Microsoft SQL Server
provider for the AppFabric monitoring site).
It should also be noted that if you skip the Register AppFabric
monitoring store in root web.config option, then the monitoring
database will not be available on this computer.
Chapter 1
33
7. We can repeat steps 4, 5, and 6 by selecting Set persistence configuration.
8. Next move to Caching Service and select Set Caching Service configuration,
as shown in the following screenshot:
9. Change the Caching Service account by selecting Change and opting for a
relevant account.
10. Change the File share (UNC server share) by browsing and selecting the appropriate
share that we want to store the XML configuration file.
Installing Windows Server AppFabric
34
11. Join an existing cluster (as opposed to creating a new one) by selecting the Join
cluster option, as shown in the following screenshot:
If the configuration already exists, then this caching service instance
will become part of an existing cluster.
12. If you are joining an existing cluster, you will not be able to change the cluster size.
It should be noted that the cluster size does not dictate the possible
number of machines in the cluster; however, it does optimize the
whole cluster based on the size selected. So for example, you can add
seven machines to a cluster that is defined as "Small" (1-5 machines).
However, Windows Server AppFabric will optimize the caching
configuration based on cluster configuration of 1-5 machines.
Chapter 1
35
13. To change port numbers for caching, click on Next and change the values
as required.
In case of changing port numbers you must ensure that firewall
level exceptions have already been defined for the newly selected
port numbers. Otherwise, Windows Server AppFabric Cache will
not be able to function properly.
How it works...
One of the best things about Windows Server AppFabric is that it is highly configurable.
Configuration can be changed in a variety of ways. For example, in this recipe our changes
were driven by the Windows Server AppFabric configuration wizard; however, we could have
achieved similar results using AppFabric PowerShell commandlets. We will learn more about
PowerShell commandlets in the following chapters.
Another possible way to change configuration is to modify the configuration manually. For
example, when using the XML provider, we can always go to the file share and modify the
ClusterConfig.xml file.
Windows Server AppFabric uses providers to abstract the implementation details of its Cache
configuration as well as persistence and monitoring stores. In this recipe we used out of
the box providers, but configuration storage and management can be further extended to
implement a custom provider.
At runtime, Windows Server AppFabric looks up the registered configuration provider. Based
on the provider it then accesses a specific configuration store. The configuration store is
then used to fetch relevant information for that provider. For example, with the Caching
configuration provider, the configuration store will store information such as port numbers,
service accounts, and so on. Similarly, for the persistence and monitoring configuration
providers, the configuration store will maintain information relevant to monitoring and
persistence stores such as connection strings, for example.
Other documents randomly have
different content
"Päästä sinä pikkupeto!"
"Armosta, mutta ei ollenkaan pakosta. Minä keitän keisarisoppaa
sinun herrojesi päivälliseksi sunnuntaiksi, sentähden täytyy minun
mennä." Hän pani ilvehtien parin purpuranpunaisia huulia törrölleen,
irroitti kätensä ja juoksi keittiöön.
Sellaista oli jokapäiväinen ruoka. Marianne kosti näin Börjelle, kun
tämä ei puhunut mitään ulkomaan matkastaan, jonka tähden
Mariannen uteliaisuus oli koetuksella.
Pelko oli vallan kadonnut. Pilkkakirves oli kurkistanut Börjen
kortteihin. Hänen ei koskaan olisi tarvinnut luulla, että Marianne
vähääkään arasteli käydä hänen kamarissaan. Jos hänellä oli jotakin
sanottavaa, astui hän rohkeasti sisään. Jos Börje siitä tuli nyreäksi,
nauroi Marianne koirankurisilla silmillään, kuin olisi hän sanonut:
"vanha jöröjukka!" Ja sitten Börje häpesi.
Mariannella ei ollut yhtään häveliäisyyttä.
"Mitä, luetko sinä Englannin kieltä?" huudahti Marianne eräänä
päivänä vallan huolimattomasti löydettyään Progress and Poverty'n
miehensä pöydältä, ennenkuin tämä oli ennättänyt pistää sen
piiloon.
Börje lensi niin tulipunaiseksi, että kuka hyvänsä olisi häntä
säälinyt, vaan ei Marianne.
"No kuinkas käy?" kysyi Marianne yhtä huolimattomasti.
"Hyvin."
Enempää ei toinen saanut tietää. Vaan hän oli kyllä hankkiva siitä
selvän; vaikka hän kaivaisi asian pihdeillä ilmoille!
Sunnuntaina, jolloin Börjellä oli ollut mainitut herrojen päivälliset
ja he olivat saattaneet viimeiset vieraat ulos, jäivät he molemmat
seisomaan portaille. Kevättä oli jo kulunut ja illan valo rupesi
hämärtymään; ilma oli tyyni ja rauhallinen ja äsken puhjennut koivu
levitteli tuoksuaan.
Marianne kääntyi ja katseli Börjeä, vaan ei puhunut mitään.
Tämä seisoi hiljaa, eikä Marianne voinut päästä sisään menemättä
hänen sivuitsensa.
Sitten kääntyi hän vielä kerran ja katseli; hänen mielestään olisi
Börje nyt voinut puhua. Vaan tämä pujotti ainoastaan käsivartensa
hänen vyötäisilleen ja suuteli häntä.
Marianne seisoi silmät alas luotuina.
"Minkätähden sinä et tahtonut tulla valtiopäivämieheksi?" sanoi
Marianne lopuksi kääntymättä.
"Mistä sinä sen olet saanut tietää?"
"Per Olsson sanoi siitä olleen kysymyksen, vaan että sinä kieltäyit,
ettet muka tahtonut."
Börje ei sanonut mitään.
Marianne luuli tukehtuvansa harmiin. Eikö hän ollut tullut toiseksi
ihmiseksi, eikö hän ollut arvannut miehensä ajatuksia, eikö hän ollut
pitänyt korkeimpana kunnianaan päästä hänen urholliseksi
työtoveriksensa, — ja siitä huolimatta taisi hän tuossa seista
törröttää ääneti, hengeti! Eikö tuo ollut inhottavaa! Ja päivänä
tämmöisenä! Marianne tiesi täyttäneensä hyvin tehtävänsä. Hän tiesi
Börjen olevan hyvillään. Eikä hän kuitenkaan lausunut mitään!
Marianne oli vähällä itkeä harmista.
Marianne kääntyi kolmannen ja viimeisen kerran, katsoen pitkään
ja sangen uhkaavasti.
Silloin purskahti Börje nauramaan.
"Mitä sinä tahdoit tietää?" vastasi hän.
Kauvemmin ei voinut kestää. Marianne heitti kätensä hänen
kaulaansa ja painoi nenänsä liitteäksi Börjen takin rinnustaa vasten.
"Kaikki," vastasi hän.
"Sinähän tiedät jo. Nuo toitottavat sinulle kaikki korviisi."
"Niin, etkä sinä voi mitään puhua!"
"Kyllä lörpötystä on muutenkin kyllältä. Siihen ei tarvitse mitään
arvoa panna, vaan siihen, että todella saadaan jotain aikaan."
Marianne nosti päätänsä ja katseli miestänsä kauvan silmiin.
"Minä käsitän enemmän kuin luulet," sanoi hän sitten pitkään.
"Mitä tarkoitat?"
"Kunnianhimoa — Börje."
Tämän kasvot synkistyivät. Siitä hän ei kärsinyt kuulla puhuttavan.
Sitten katseli hän vaimoansa, vakavasti, terävästi, kuin hän joskus
teki.
"Vaikka on lyötykin rahaksi, ei sillä ole sanottu, että tahtoo
semmoisena olla," sanoi hän tylysti.
"Kun Torsten tulee suureksi, ja kun hän tuntee samaa, jota sinä
nyt, silloin ymmärtää hän, että myös vaimolle voi puhua, minä
tarkoitan minulle."
Mariannen kasvot olivat vaalenneet, hän tunkeusi miehensä ohitse
etehiseen. Tämä tarttui hänen käteensä pidättäen häntä.
"Marianne, mitä tämä on?"
"Se on, että minä olen sovittanut enemmän kuin kylläksi. Se on,
että minä olen osoittanut, etten ole ajattelematonta korutavaraa. Se
on, että minä olen pitänyt sinusta niin paljon, että olisin voinut
mennä vaikka tuleen ja veteen sinun edestäsi ja ettet sinä
kuitenkaan, kuitenkaan koskaan ole pitänyt minua itsesi arvoisena."
"Mutta mikä sinun on?"
"Etkö sinä käsitä, että kun nainen pitää niin rajattoman paljon
jostakin miehestä kuin minä sinusta, niin tulee viimein hetki, jolloin
tämän miehen täytyy tunnustaa nähneensä, minkä arvoinen tämä
nainen on, tai vetäytyy hän muuten tuuma tuumalta syrjälle, — ja
tulee lopuksi yhtä umpimieliseksi kuin mieskin."
"Umpimielinen? — minäkö? — sinua kohtaan!"
"Oh Börje, mitä olen minä saanut yhteistä nauttia sinun kanssasi?
Minkätähden olet minun pitänyt erillä äidistäsi?"
"Äidistänikö?"
"Niin. — Minkätähden en minä saa pitää siitä, mistä sinäkin?
Minkätähden en saa elää sinun elämääsi, ajatella sinun ajatuksiasi ja
toivoa sinun toiveitasi? Minkätähden työnnät minut luotasi nyt, kun
minä ihailen sinua enemmän kuin nuo kaikki toiset!"
"Mutta ethän tiedä mitä sanot! Ihailla? Minua!"
"Luuletko mun sokeaksi?" — Marianne sanoi tämän hiljaa, melkein
pilkallisesti. Sillä nyt oli voitto saavutettu ja tuo intohimoinen
mielenpurkaus mennyt.
"Marianne —," sanoi Börje pitkän vaitiolon jälkeen, "tuntuu kuin
minä olisin toinen ja sinä olisit toinen ihminen, kuin ensi kerran
tavatessamme."
"Niin, sillä sinä olit hyvin tyhmä, Börje, ja minä olin vielä paljoa
tyhmempi," vastasi Marianne rakastettavalla suoruudella.
* * * * *
Koko viikon oli niin kiirettä, että he tuskin ennättivät vaihtaa sanaa
keskenään. Pojalle piti saataman uudet vaatteet, puutarha
perattaman, peltosaven-ajo pantaman alkuun ja kaikki laitettaman
sille kannalle, että he voivat olla poissa muutamia päiviä.
He eivät matkustaneet junalla, vaan omilla hevosilla ja vaunuilla.
Ilma oli kaunis, ja siten kulettiin kuten tahdottiin.
Matka oli ollut herttainen, — ylös aamulla aikaisin, ruokakori
hyvästi varustettu, ja heti äsken lehdistyneessä pyökkimetsässä.
Nyt oli tultu Börjen kotiseutuun. Hän tunsi kaikki tiet ja jokaisen
talon ja selitti kaikki Mariannelle. Tapansa mukaan ajoi hän itse, ja
Marianne istui hänen vieressään. Torsten istui äidin polvelle
nojautuen tähän; hän oli nukkunut.
Mariannen mieli oli kummallinen, melkein juhlallinen. Ja Börje oli
itse puheliaisuus. Hän huomautti Mariannelle sukuröykkiöitä, joita oli
neljä aina yhdessä rypeessä, hän näytteli vuorenhalennaisia, joista
meri pilkoitteli, hän käski hänet syvään hengittämään, että tuntisi
rehevää, voimakasta ilmaa, — Börjen kotiseudun ilmaa.
"Pian olemme perillä, Marianne."
"Mitähän äiti minusta pitää!"
Marianne ei enää sanonut sinun äitisi. Börje huomasi sen, katsahti
häneen ja hymyili.
"Äiti osaa sekä nähdä että kuulla."
"Oh, Börje, minä pelkään kuitenkin, — sinun tähtesi." — Hän siveli
poskeansa Börjen olkapäähän.
"Sinä!"
Paljon tunnusti tämä yksi ainoa huudahdus.
"Tuolla asui Paulin äiti," sanoi Börje ja näytti pientä huonetta tien
vieressä hiljentäen vähä hevosien vauhtia. Paulin muistoon
yhdistyneestä vastenmielisyydestä ei ollut enää mitään jälellä. Se oli
hävinnyt, — poissa. Todellisuus oli sen syrjäyttänyt.
"Ja tuo pieni talo punaisine seinineen, puitten takana, näetkös —
tuolla noin — se on minun kotoni. Tuo valkea talo tuolla kauvempana
on veljeni. — Kuinka olen iloinen, kun sinä olet täällä minun
kanssani."
Marianne irroitti ainoastaan toisen kätensä ja pisti sen miehensä
käsivarrelle, ikäänkuin pitääksensä häntä oikein kiinni.
"Minä takaan, että äiti odottaa," sanoi hän, "ahaa — tuollapa hän
onkin!"
Vaunut kääntyivät matalasta portista sisään ja seisahtuivat oven
eteen.
Yhdellä ainoalla silmäyksellä oli Marianne tarkastanut vieraan, joka
tuossa seisoi auringon valossa ja kotikutoisissa vaatteissa suurine,
raitaisine esiliinoineen.
Börje ihka elävänä! Torstenista tuli isänsä äidin näköinen, eihän
siis muuta voinut kuin pitää hänestä!
Tämän molemminpuolisen tutkistelevan silmäyksen perästä
hymyilivät molemmat naiset toisilleen, ennenkuin edes ennättivät
tervehtiäkään.
Börje hyppäsi maahan ja auttoi Mariannea alas, joka vielä piteli
nukkuvaa poikaansa käsivarsillaan. Ja sitten seisoivat nuo kaksi
kilpailijaa silmä vasten silmää, yhteisen suuren, lämpimän
luottamuksen yhdistäminä.
He olivat sen ymmärtäneet, lukeneet sen toisiensa silmistä. Siinä
ei tarvittu yhtään sanoja.
"Suudelkaa häntä ensin," sanoi Marianne katsoen poikaansa.
Hänessä oli taikauskoinen luulo, että yhdysside tulisi siten vielä
vahvemmaksi. Ja mummo suuteli tuota pientä, sulki sitten sekä
hänen että Mariannen vahvoihin, oivallisiin käsivarsiinsa ja työnsi
heidät oven sisäpuolelle.
"Noh?" sanoi Börje hänelle riemuitsevin silmin. Hän seisahtui
silmänräpäykseksi kynnykselle sitä sanoakseen, hän ei voinut
odottaa.
"Erinomainen ihminen," vastasi äiti ja pyyhkäisi esiliinansa
kulmalla jotain silmistään, "etpä ainakaan liian aikaisin antanut
minun häntä nähdä."
Hänen äänessään oli aivan Börjen nyreätä hyväntahtoisuutta.
"Hyväksi on teille ollut, että olette saaneet ikävöidä toisianne näin
kauvan," sanoi Börje tehden pientä poikamaista kiusaa.
"Niin kai, kyllä kai niin! — Minä olisin voinut kuolla sillä ajalla, en
saanut nähdä häntä, enkä poikaakaan."
"Vai niin, te olette ollut kärsimätön, äiti! — Eimaar, te elätte vielä
monta vuotta ja näette vielä paljon, ennenkuin kuolette."
"Minä en kuitenkaan voi nähdä mitään rakkaampaa. Kas niin,
käykää sisään nyt!"
Äiti työnsi hänet tupaan pienen, siivon etehisen kautta.
"Parasta lienee antaa pikkuisen maata, kunnes herää itsestään,"
sanoi hän Mariannelle, "minä olen tämän sisäkamarin varustanut
teitä varten. Minä olen tehnyt vuoteen pikkuiselle vaatekoriini; minä
luulen sen olevan kylläksi suuren."
Börje seisahtui tupaan ja molemmat naiset astuivat yhdessä
sisähuoneesen, jossa Marianne laski perillisensä tälle määrätylle
vuoteelle, joka huomattiin olevan vallan parahultainen.
"Ah, äiti, eikö Börje ollut hyvin paha, kun antoi meidän odottaa
näin kauvan, ennenkuin saimme nähdä toisemme?" sanoi Marianne
tarttuen anoppimuorinsa käsiin ja katsoen suoraan rehellisiin Börje-
silmiin.
"Hänpä lie parhain tietänyt, mikä oli hyvä."
Äidillisen ylpeyden mielestä oli Börje kaikkitietäväinen ja
kaikkiviisas kuin itse sallimus.
Börjestä oli päivä herttainen. Hän riippui kiinni kotona jokaisessa
pikkuseikassa luonteensa koko yksipäisellä rakkaudella, joka vanhaa
ja totuttua piti aina lemmellisessä muistossa. Hänestä oli hupaista
kuljettaa Mariannea kaikkialla, näyttää hänelle kaikkea ja kertoa
hänelle kaikesta: lapsuudestaan, äidistään, heidän jokapäiväisestä
elämästään, Paulista; hevosista, joilla hän oli ajanut, koirista, joista
hän oli pitänyt. Kävely tuntui oikein pyhiinvaellus-matkalta. Ja
Marianne oppi tällä tarkastusretkellä tuntemaan hänen
menneisyytensä, — itse "alku-Börjen," kuten hän nauraen miestänsä
kutsui tässä tilaisuudessa — paremmin kuin jos Börje olisi kokonaisia
päiviä kuluttanut kertomiseen.
Ja äiti ruokki heitä skoonelaisilla, tukevilla ruokalajeilla, oluttakin
oli hän ennättänyt panna, vaikka se vielä maistui vähä liian nuorelta.
"Jestan poo! äiti luulee varmaankin joulun olevan kaksi kertaa tänä
vuonna," sanoi Börje nauraen pöytään istuessaan.
"Ei minulla ole mitään joulua ollut viimeisenä kahtena vuonna,"
sanoi äiti. Sydämellisin lämpö piileskeli hänen tylyäänisessä
vastauksessaan. Hän mahtoi suuresti kaivata poikaansa näinä
jouluina.
"Mutta tänä vuonna tulette meille," sanoi Börje.
"Sen teen, jos Jumala suo ja te sen tahdotte."
Hän tunsi itsensä vielä vähä ujoksi Mariannen läsnäollessa, vaikka
hän paljonkin hänestä piti. Salaisesti hymyillen huomasi Börje, että
äiti aina karttoi Mariannen nimeä eikä kutsunut häntä sinuksi.
Mutta sellainen kyllä menisi ohitse! Börje oli niin iloinen — niin
sydämellisen iloinen. Äiti ja Marianne … sitä kelpasi istua ja katsella.
Marianne arveli, ettei äidin tarvitsisi asua näin yksinään, näin
kaukana Börjestä; voisihan hän muuttaa heidän luokseen, jossa
Paulin sija vielä oli tyhjänä.
"Siunatkoon, lapsi, sitä en koskaan tahdo!" vastasi vanhus melkein
pelästyneenä, "nuoret osaavat kyllä pesää rakentaa yhtä hyvin kuin
vanhatkin, vaan he rakentavat semmoisen, joka heille sopii, ja
vanhat tekevät parhaiten, kun pysyvät paikallaan."
Puolisen jälestä kulkivat Marianne ja Börje ympäri tupaa, jolla
aikaa isoäiti istui ja ravitsi silmiään katselemalla oikein sydämen
halusta pojanpoikaansa, joka käydä lylleröitsi ympäriinsä upo
uudessa koltissaan.
"Ja katsos! Tässä on raamattu, jonka kaltainen Börjelläkin on,"
huudahti
Marianne iloisesti. "Kuinka hyvästi muistan, kun ensikerran kävin
Tomtössä! Minä kysyin, oliko hänellä tapana lukea sitä. 'Ei,' sanoi
hän, 'mutta äidillä on yhtäläinen'."
Melkein huomaamaton hymy vetäytyi äidin kasvoille; hän ymmärsi
poikaansa.
"Niin, tuo on minun sauvani ja jalkojeni valo," sanoi hän sitten
vakavasti, "minulla ei ole koskaan ollut parempaa turvaa." — Sitten
katsahti hän Marianneen. — "Vaan minusta on saman tekevää, mitä
te uskotte," lisän hän, "sillä meidän Herramme antaa teille kyllä sen
uskon, jota te tarvitsette. Hän ymmärtää asian paremmin kuin
minä."
Tässä karkeassa, hyväntahtoisessa suoruudessa oli jotakin, joka
Mariannea miellytti enemmän kuin kaikki hyväilyt. Siinä ilmautui
vankkuutta, luottavaisuutta — ihan kaikkea.
Kun illalla erottiin, saattoi vanhus vieraansa heidän
makuusuojaansa.
Pikkuinen uinahteli aivan makeasti korissaan.
"Niin, nukkukaa nyt tekin hyvästi," sanoi hän. "Minä olen tehnyt
pehmeän vuoteen sinulle, rakas poikani. Harvoinpa sinua täällä saa
nähdä!"
"Ja häntä!"
"Niin; hauskaa oli nähdä teitä."
Börje asetti kätensä eräälle vanhalle pulpetille.
"Tässä, Marianne," sanoi hän, "tässä on minun muinainen
minuuteni; tässä säilyttää äiti kaikki minun kirjeeni.
"Niin, vallan totta!" huudahti vanhus ja pisti kätensä taskuunsa,
"minä olen ajatellut … minä olen ajatellut, että Mariannea" — nimi ei
tahtonut tulla hänen huuliltaan, — "minä tarkoitan, että häntä
huvittaisi lukea sinun kirjeitäsi. Minä olen ne pannut järjestykseen
numeron jälkeen." Hän veti avaimen esiin, jonka antoi Börjelle.
Marianne ei voinut mitään sanoa. Tämmöinen menettely poikansa
vaimoa kohtaan oli niin liikuttavan hienotunteinen, että Mariannella
ei ollut sanaakaan sen varalle. Tätä oli ajatellut tuo sivistymätön
talonpoikaisvaimo, — ajatellut ihan itsestään!
He puristivat toisiensa käsiä. Ei yhtään tarpeettomia hellyyden
osoituksia! Sellaiset eivät Börjen äitiä miellyttäneet, vaan he olivat
ymmärtäneet toisensa, ja tässä oli se side, joka ei ollut katkeava.
Kun Marianne oli jäänyt yksin Börjen kanssa, meni hän hänen
luokseen.
"Börje, kuinka voit sinä pitää minua kaikesta tästä erilläni ja luulla
sen olevan parasta?"
"Se oli hyödyllistä."
"Mutta semmoista umpimielisyyttä!"
"Semmoinen on minun luonteeni."
"Kaikkiako kohtaan?"
Marianne hymyili vähä. Yksi poikkeus oli ollut, — hän, joka nuo
kirjeet oli saanut.
"Minusta on ollut hauskaa nähdä sinua täällä, — tässä vanhassa
keskuudessa, josta minä paljon pidän," sanoi hän, "sen täytyi sulaa
yhteen nykyisen kanssa. Ja nyt se on tehty, rotko on täytetty. Tule
istumaan, Marianne. Minä olen hävennyt olla se kuin olen, nyt ei ole
laita enään niin."
Hän talutti Mariannea vanhanaikaisilla patjoilla päällystetylle
seinärahille istumaan, vaan tämä ottikin pienen jakkaran ja asettui
vastapäätä miestänsä. Hän taisi näin paremmin katsella Börjeä
kasvoihin istuessaan kyynäspäät tämän polvilla ja nojaten leukaansa
käsiä vasten.
"Kun on antanut parhaan, niin ei tarvitse säästää pikkumurusia,"
sanoi Marianne hymyillen, "kun olemme nyt puheisiin päässeet, niin
sano mulle, mitä sinä teit kaupungissa niin usein; minä olen ollut
hirmuisen utelias."
Börje punehtui ensin, vaan rohkaisi sitten mielensä.
"Minä olen lukenut kieliä," sanoi hän. "Huh, eipä se käynyt vallan
voimien ylitse. Mutta kuinka minä pelkäsin sinun saavan siitä tietoa."
"Miksikä sitten?"
"Olihan ikäänkuin häpeällistä alkaa minun ijälläni vielä koulupojan
tavoin; ja sitten minä pelkäsin, etten onnistuisi."
"Sinun sydämesi on ylpeä — kuules! Se juuri tekee sinun niin
umpimieliseksi. Sinä pelkäät, että sinun tarvitsee antaa perää
jollekulle."
"Ehkä. — Minä olen aina luullut olevani nöyrä. Minä olen aina ollut
valmis tunnustamaan toisten etevämmyyttä; mutta minä olen
asettunut sitä vastaan," sanoi hän miettien. "Sinä väitit eräänä iltana
minun olevan kunnianhimoisen; minä olen sitä sittemmin ajatellut.
En tiedä, onko se totta. Vaan sen tiedän, että minullakin on pyrintöjä
ja että minäkin tahtoisin saada — niin, en tahdo sanoa valtaa, sillä
en minä tahdo tulla huomatuksi, — mutta minä tahtoisin tuota,
jonka avulla voi ikäänkuin ojentaa kättänsä ja tuntea niissä ohjakset.
Sitä ehkä kutsutaan vaikutukseksi. Minä tunnen vaan kuin tahtoisin
tämän käteni olemaan vahvan, — jäykän ja vahvan. Tahdon tuntea,
etten ole tullut maailmaan saamatta mitään aikaan. Minä tahdon
kokonaan täyttää minulle uskotun paikan, vaan minä en halua
mitään muuta. Jos sitä kutsut kunnianhimoksi, niin olen
kunnianhimoinen."
"Ja se on jo hyvin vanhaa," jatkoi Börje tyynesti, "se on aina
pyrkinyt eteenpäin. Vaan minä en ole ollut vapaa. Isä piteli rahoja, ja
hänellä oli valta. Minun sisuni kuohuu, kun häntä ajattelen. Onko
kellään oikeutta kukistaa ihmistä sillä tavalla ja pidättää häntä
edistymästä, kuin hän teki minulle! — Ja niin on laita ollut —
ahdistusta aina. Tuo tapaus viimeksi Paulin kanssa puhalsi tulen
enemmän hehkumaan. Sillä silloin täytyi minun koko voimallani
ryhtyä jonkun kimppuun, etten olisi tullut vallan hupsuksi. Minulla ei
saanut olla aikaa tuntea mitään. Täytyi vaan vaientaa sydämensä
ääntä, pitää ajatuksensa jänteessä, katsoa eteensä eikä taaksensa.
Tuo kokonaan, tuo — eitä jotain semmoista saattoi tapahtua, — että
minä olisin paljas nolla, tyhjyys, siinä oli nöyryytys semmoinen, että
minä olisin voinut… Se oli potkaus, josta päästäkseni minun täytyi
hankkia itselleni hyvitystä vaikka millä hinnalla! Sinä et voi uskoa,
kuinka sellainen voi minua kiihottaa! Se on kuin oas, kuin kirveltävä
tunne minun rinnassani, se ei anna minulle rauhaa yöllä eikä
päivällä, vaan ajaa minua työhön. Kuinka toisenlainen Börje minä
olen kuin se, jonka kanssa sinä olit yhdessä kaksi vuotta sitten!
Ihmeellistä on nytkin katsella taaksensa. Ja ulkonaisesti, ehkei
kuitenkaan näy mitään erotusta. — Mutta kirjeissä tuolla on koko
kehityshistoria. Äiti on samaa puuta kuin minäkin; hän on
ymmärtänyt minua."
Marianne tunsi piston sydämessään. Niin, kuinka vaiherikas tämä
kehitys mahtoi olla, arvasi hän nyt katsellessaan noita viisaita
kasvoja joissa ankara hillitsemisvoima ja sitkeä into kuvastui joko
juonteessa.
"Yhtä ainoata en ole koskaan sanonut äidille. En koskaan
selittänyt."
Syntyi äänettömyys.
"Sinä olit sanomaisillasi jotakin ennen, jonka johdosta olit kahdella
päällä," sanoi Marianne.
"Niin minä tahdon vastata erääseen toiseen kysymykseesi, jonka
myös teit eräänä iltana: minkätähden kielsin heitä äänestämästä
minua valtiopäivämieheksi. Niin, — näetkös — minä en ole valmis
vielä. Minä en tahdo eritä tasaisesta työstäni. En nyt. Tilaa on
kehitettävä. Taloudellisen kantani pitää olla sellaisen, ettei se estä
minua, ja sitten … ja sitten täytyy minun nähdä vähän enemmän
maailmaa. Sille ihmiselle, joka ei ole saanut muita tietoja kuin mitä
hänen ikäänkuin keksillä on täytynyt haalia itselleen ilman toisten
apua, ja jonka kehitys ihmisenä on suurimmaksi osaksi kirjaviisautta,
sille ovat mielestäni matkat suurena oikotienä sivistykseen. Minussa
on vastustamaton tiedonhalu. Minä olen aina kadehtinut Paulia. Minä
tahdon myös päästä näkemään. Vaan minä katselen luullakseni
toisilla silmillä kuin hän, ja minulla luullakseni on toisenlainen säästö
kotiin tullessani kuin hänellä. Tahdotko tulla mukaan — Marianne?
Tahdotko jakaa kanssani? Tahdotko, että olemme kahden kaikessa?
— kahden katselemme ja käsitämme ja tuomitsemme ja luemme, —
kahden autamme toisiamme kaikissa?"
Vastausta ei tarvittu. Mariannen kädet olivat vaipuneet Börjen
polville ja olivat ristissä siinä. Hänen silmänsä tähystelivät ulos
avaruuteen, kuin olisi hän siellä nähnyt pitkän, aavan
tulevaisuusmaiseman.
Iloja ja suruja oli tuleva toisensa perästä vaihdellen, onnen rauhaa
ja kovia aikoja. Sen hän nyt tiesi. Hänen elämänsä näyttäisi kuin
muidenkin ihmisten; ei romantilliselta eikä satumaiselta, vaan
todelliselta ja jokapäiväiseltä. Mutta Börje oli hänelle niin rakas, että
hän olisi voinut laskeutua polvilleen hänen eteensä; olisi voinut
painaa hänen käsiään silmilleen tuntiessaan itsensä ylenmäärin
onnelliseksi hänen omanaan; hänen, ilon auringon paisteessa tai
pimeinä hetkinä, hänen suuressa ja pienessä, — aina, kun he vaan
rakastivat toisiansa.
VIITESELITYKSET:
[1] Mitä hyvää, miellyttävää ja onnellista on.
[2] Paremmin voi yksinään kuin huonossa seurassa.
[3] Englantilainen nimitys neitosten kunniaksi pidetylle puheelle.
Suom. muist.
[4] Iduna oli nuoruuden jumalatar pohj. jum.-tarustossa; hänellä
oli kultaisia omenoita, jotka tekivät jumalat ikuisesti nuoriksi. Suom.
muist.
[5] Hyvänä ystävänä.
[6] Sensitiva on kasvin nimi, joka vetää lehtensä kokoon, kun sitä
koskee. Suom. muist.
[7] Vanha toveri.
[8] Älä koske minuun; erään kasvin nimi. Suom. muist.
[9] Pygmalion oli sadun mukaan Kypron kuningas ja sen ohessa
taitava kuvanveistäjä; hän teki, kun ei löytänyt ketään mieleistään
tyttöä, naisen kuvan norsunluusta ja rakastui siihen niin, että pyysi
sille henkeä rakkauden jumalalta Venukselta, joka hänen pyyntönsä
täyttikin, jonka jälkeen hän otti tytön puolisokseen. Suom. muist.
[10] Olkaa varuillanne, armaani!
*** END OF THE PROJECT GUTENBERG EBOOK MARIANNE-ROUVA:
ROMAANI ***
Updated editions will replace the previous one—the old editions will
be renamed.
Creating the works from print editions not protected by U.S.
copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.
START: FULL LICENSE
THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
To protect the Project Gutenberg™ mission of promoting the free
distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.
Section 1. General Terms of Use and
Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.
1.B. “Project Gutenberg” is a registered trademark. It may only be
used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.
1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.
1.E. Unless you have removed all references to Project Gutenberg:
1.E.1. The following sentence, with active links to, or other
immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.
1.E.2. If an individual Project Gutenberg™ electronic work is derived
from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.
1.E.3. If an individual Project Gutenberg™ electronic work is posted
with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.
1.E.4. Do not unlink or detach or remove the full Project
Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.
1.E.5. Do not copy, display, perform, distribute or redistribute this
electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.
1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.
1.E.7. Do not charge a fee for access to, viewing, displaying,
performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.
1.E.8. You may charge a reasonable fee for copies of or providing
access to or distributing Project Gutenberg™ electronic works
provided that:
• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”
• You provide a full refund of any money paid by a user who
notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.
• You provide, in accordance with paragraph 1.F.3, a full refund of
any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.
• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.
1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™
electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.
1.F.
1.F.1. Project Gutenberg volunteers and employees expend
considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
damaged disk or other medium, a computer virus, or computer
codes that damage or cannot be read by your equipment.
1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for
the “Right of Replacement or Refund” described in paragraph 1.F.3,
the Project Gutenberg Literary Archive Foundation, the owner of the
Project Gutenberg™ trademark, and any other party distributing a
Project Gutenberg™ electronic work under this agreement, disclaim
all liability to you for damages, costs and expenses, including legal
fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR
NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR
BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH
1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL
NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.
1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you
discover a defect in this electronic work within 90 days of receiving
it, you can receive a refund of the money (if any) you paid for it by
sending a written explanation to the person you received the work
from. If you received the work on a physical medium, you must
return the medium with your written explanation. The person or
entity that provided you with the defective work may elect to provide
a replacement copy in lieu of a refund. If you received the work
electronically, the person or entity providing it to you may choose to
give you a second opportunity to receive the work electronically in
lieu of a refund. If the second copy is also defective, you may
demand a refund in writing without further opportunities to fix the
problem.
1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
1.F.5. Some states do not allow disclaimers of certain implied
warranties or the exclusion or limitation of certain types of damages.
If any disclaimer or limitation set forth in this agreement violates the
law of the state applicable to this agreement, the agreement shall be
interpreted to make the maximum disclaimer or limitation permitted
by the applicable state law. The invalidity or unenforceability of any
provision of this agreement shall not void the remaining provisions.
1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation,
the trademark owner, any agent or employee of the Foundation,
anyone providing copies of Project Gutenberg™ electronic works in
accordance with this agreement, and any volunteers associated with
the production, promotion and distribution of Project Gutenberg™
electronic works, harmless from all liability, costs and expenses,
including legal fees, that arise directly or indirectly from any of the
following which you do or cause to occur: (a) distribution of this or
any Project Gutenberg™ work, (b) alteration, modification, or
additions or deletions to any Project Gutenberg™ work, and (c) any
Defect you cause.
Section 2. Information about the Mission
of Project Gutenberg™
Project Gutenberg™ is synonymous with the free distribution of
electronic works in formats readable by the widest variety of
computers including obsolete, old, middle-aged and new computers.
It exists because of the efforts of hundreds of volunteers and
donations from people in all walks of life.
Volunteers and financial support to provide volunteers with the
assistance they need are critical to reaching Project Gutenberg™’s
goals and ensuring that the Project Gutenberg™ collection will
remain freely available for generations to come. In 2001, the Project
Gutenberg Literary Archive Foundation was created to provide a
secure and permanent future for Project Gutenberg™ and future
generations. To learn more about the Project Gutenberg Literary
Archive Foundation and how your efforts and donations can help,
see Sections 3 and 4 and the Foundation information page at
www.gutenberg.org.
Section 3. Information about the Project
Gutenberg Literary Archive Foundation
The Project Gutenberg Literary Archive Foundation is a non-profit
501(c)(3) educational corporation organized under the laws of the
state of Mississippi and granted tax exempt status by the Internal
Revenue Service. The Foundation’s EIN or federal tax identification
number is 64-6221541. Contributions to the Project Gutenberg
Literary Archive Foundation are tax deductible to the full extent
permitted by U.S. federal laws and your state’s laws.
The Foundation’s business office is located at 809 North 1500 West,
Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up
to date contact information can be found at the Foundation’s website
and official page at www.gutenberg.org/contact
Section 4. Information about Donations to
the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission of
increasing the number of public domain and licensed works that can
be freely distributed in machine-readable form accessible by the
widest array of equipment including outdated equipment. Many
small donations ($1 to $5,000) are particularly important to
maintaining tax exempt status with the IRS.
The Foundation is committed to complying with the laws regulating
charities and charitable donations in all 50 states of the United
States. Compliance requirements are not uniform and it takes a
considerable effort, much paperwork and many fees to meet and
keep up with these requirements. We do not solicit donations in
locations where we have not received written confirmation of
compliance. To SEND DONATIONS or determine the status of
compliance for any particular state visit www.gutenberg.org/donate.
While we cannot and do not solicit contributions from states where
we have not met the solicitation requirements, we know of no
prohibition against accepting unsolicited donations from donors in
such states who approach us with offers to donate.
International donations are gratefully accepted, but we cannot make
any statements concerning tax treatment of donations received from
outside the United States. U.S. laws alone swamp our small staff.
Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.
Section 5. General Information About
Project Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could be
freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose network of
volunteer support.
Project Gutenberg™ eBooks are often created from several printed
editions, all of which are confirmed as not protected by copyright in
the U.S. unless a copyright notice is included. Thus, we do not
necessarily keep eBooks in compliance with any particular paper
edition.
Most people start at our website which has the main PG search
facility: www.gutenberg.org.
This website includes information about Project Gutenberg™,
including how to make donations to the Project Gutenberg Literary
Archive Foundation, how to help produce our new eBooks, and how
to subscribe to our email newsletter to hear about new eBooks.
Welcome to our website – the perfect destination for book lovers and
knowledge seekers. We believe that every book holds a new world,
offering opportunities for learning, discovery, and personal growth.
That’s why we are dedicated to bringing you a diverse collection of
books, ranging from classic literature and specialized publications to
self-development guides and children's books.
More than just a book-buying platform, we strive to be a bridge
connecting you with timeless cultural and intellectual values. With an
elegant, user-friendly interface and a smart search system, you can
quickly find the books that best suit your interests. Additionally,
our special promotions and home delivery services help you save time
and fully enjoy the joy of reading.
Join us on a journey of knowledge exploration, passion nurturing, and
personal growth every day!
ebookbell.com

More Related Content

PDF
Applied Architecture Patterns On The Microsoft Platform An Indepth Scenariodr...
PDF
Microsoft System Center Virtual Machine Manager 2012 Cookbook Edvaldo Alessan...
PDF
Refactoring with Microsoft Visual Studio 2010 Peter Ritchie download pdf
PDF
Microsoft Azure Storage Essentials 1st Edition Chukri Soueidi
PDF
Net Mobile Web Developers Guide Web Developers Guide Steve Milroy
PDF
ASP.NET 8 Best Practices 1 / converted Edition Jonathan R. Danylko
PDF
7 20 10 Cerg Final Lo Res
PDF
7 20 10 Cerg Final Lo Res
Applied Architecture Patterns On The Microsoft Platform An Indepth Scenariodr...
Microsoft System Center Virtual Machine Manager 2012 Cookbook Edvaldo Alessan...
Refactoring with Microsoft Visual Studio 2010 Peter Ritchie download pdf
Microsoft Azure Storage Essentials 1st Edition Chukri Soueidi
Net Mobile Web Developers Guide Web Developers Guide Steve Milroy
ASP.NET 8 Best Practices 1 / converted Edition Jonathan R. Danylko
7 20 10 Cerg Final Lo Res
7 20 10 Cerg Final Lo Res

Similar to Microsoft Windows Server Appfabric Cookbook Hammad Rajjoub Rick G Garibay (20)

PDF
Aspnet 4 Social Networking Atul Gupta Sudhanshu Hate Andrew Siemer
PDF
Hungry minds, inc csharp complus programming
DOC
Front Copy and Letter to Shareholders
DOC
Financial Tables
PDF
Service Oriented Architecture with Java Using SOA and web services to build p...
PDF
Service Oriented Architecture With Java Using Soa And Web Services To Build P...
PPTX
Microsoft Windows Azure Platform Appfabric for Technical Decision Makers
PDF
Microsoft Sharepoint 2010 Enterprise Applications On Windows Phone 7 Todd Spa...
PPTX
Made by shub
PPTX
Microsoft
PPTX
Microsoft
PPT
Azure Overview Capgemini
PPTX
2 speed it powered by microsoft azure
PDF
Service Oriented Java Business Integration 1st Ed. Edition Binildas A Christudas
PDF
Handson Cloud Analytics With Microsoft Azure Stack Prashila Naik
PDF
Mastering Windows Hyper-V-2016.pdf
PDF
Microsoft Biztalk 2010 Line Of Business Systems Integration Kent Weare
PPTX
App Modernisation with Microsoft Azure
PPTX
Development and QA dilemmas in DevOps
PDF
Presentacion Microsoft 20 Aniversario Solmicro
Aspnet 4 Social Networking Atul Gupta Sudhanshu Hate Andrew Siemer
Hungry minds, inc csharp complus programming
Front Copy and Letter to Shareholders
Financial Tables
Service Oriented Architecture with Java Using SOA and web services to build p...
Service Oriented Architecture With Java Using Soa And Web Services To Build P...
Microsoft Windows Azure Platform Appfabric for Technical Decision Makers
Microsoft Sharepoint 2010 Enterprise Applications On Windows Phone 7 Todd Spa...
Made by shub
Microsoft
Microsoft
Azure Overview Capgemini
2 speed it powered by microsoft azure
Service Oriented Java Business Integration 1st Ed. Edition Binildas A Christudas
Handson Cloud Analytics With Microsoft Azure Stack Prashila Naik
Mastering Windows Hyper-V-2016.pdf
Microsoft Biztalk 2010 Line Of Business Systems Integration Kent Weare
App Modernisation with Microsoft Azure
Development and QA dilemmas in DevOps
Presentacion Microsoft 20 Aniversario Solmicro
Ad

Recently uploaded (20)

PDF
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PDF
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
PDF
Weekly quiz Compilation Jan -July 25.pdf
DOC
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PPTX
Lesson notes of climatology university.
PDF
01-Introduction-to-Information-Management.pdf
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Anesthesia in Laparoscopic Surgery in India
PPTX
GDM (1) (1).pptx small presentation for students
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PPTX
master seminar digital applications in india
PPTX
Cell Types and Its function , kingdom of life
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
O5-L3 Freight Transport Ops (International) V1.pdf
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
202450812 BayCHI UCSC-SV 20250812 v17.pptx
Microbial disease of the cardiovascular and lymphatic systems
STATICS OF THE RIGID BODIES Hibbelers.pdf
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
Weekly quiz Compilation Jan -July 25.pdf
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Microbial diseases, their pathogenesis and prophylaxis
Lesson notes of climatology university.
01-Introduction-to-Information-Management.pdf
O7-L3 Supply Chain Operations - ICLT Program
Anesthesia in Laparoscopic Surgery in India
GDM (1) (1).pptx small presentation for students
Chinmaya Tiranga quiz Grand Finale.pdf
master seminar digital applications in india
Cell Types and Its function , kingdom of life
Ad

Microsoft Windows Server Appfabric Cookbook Hammad Rajjoub Rick G Garibay

  • 1. Microsoft Windows Server Appfabric Cookbook Hammad Rajjoub Rick G Garibay download https://ebookbell.com/product/microsoft-windows-server-appfabric- cookbook-hammad-rajjoub-rick-g-garibay-2614588 Explore and download more ebooks at ebookbell.com
  • 2. Here are some recommended products that we believe you will be interested in. You can click the link to download. Microsoft Windows Server 2003 Performance Guide Mark Friedman https://ebookbell.com/product/microsoft-windows- server-2003-performance-guide-mark-friedman-48712654 Microsoft Windows Server 2008 R2 The Administrators Essential Reference Dustin Hannifin https://ebookbell.com/product/microsoft-windows-server-2008-r2-the- administrators-essential-reference-dustin-hannifin-4342088 Microsoft Windows Server 2012 Administration Instant Reference 1st Edition Matthew Hester https://ebookbell.com/product/microsoft-windows- server-2012-administration-instant-reference-1st-edition-matthew- hester-4566390 Microsoft Windows Server 2003 Administrators Companion 2nd Edition Charlie Russel https://ebookbell.com/product/microsoft-windows- server-2003-administrators-companion-2nd-edition-charlie- russel-5471578
  • 3. Microsoft Windows Server 2003 Inside Out William R Stanek https://ebookbell.com/product/microsoft-windows-server-2003-inside- out-william-r-stanek-982892 Microsoft Windows Server 2008 Administration Steve Seguis https://ebookbell.com/product/microsoft-windows- server-2008-administration-steve-seguis-1231178 Microsoft Windows Server 2008 A Beginners Guide 1st Edition Marty Matthews https://ebookbell.com/product/microsoft-windows- server-2008-a-beginners-guide-1st-edition-marty-matthews-1268914 Microsoft Windows Server 2003 Pki And Certificate Security Pro Oneoffs Brian Komar https://ebookbell.com/product/microsoft-windows-server-2003-pki-and- certificate-security-pro-oneoffs-brian-komar-1339294 Microsoft Windows Server Administration Essentials Exam 98365 1st Edition Tom Carpenter https://ebookbell.com/product/microsoft-windows-server-administration- essentials-exam-98365-1st-edition-tom-carpenter-2336364
  • 6. Microsoft Windows Server AppFabric Cookbook 60 recipes for getting the most out of WCF and WF services, including the latest capabilities in AppFabric 1.1 for Windows Server Hammad Rajjoub Rick G. Garibay P U B L I S H I N G professional expertise distilled BIRMINGHAM - MUMBAI
  • 7. Microsoft Windows Server AppFabric Cookbook Copyright © 2012 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. First published: July 2012 Production Reference: 1190712 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-84968-418-7 www.packtpub.com Cover Image by Artie Ng (artherng@yahoo.com.au)
  • 8. Credits Authors Hammad Rajjoub Rick G. Garibay Reviewers Adnan Masood Zubair Ahmed Alvin Lau Acquisition Editors Sarah Cullington Kerry George Lead Technical Editor Azharuddin Sheikh Technical Editors Joyslita D'Souza Unnati Shah Project Coordinator Joel Goveya Proofreader Aaron Nash Indexer Hemangini Bari Graphics Valentine D'silva Manu Joseph Production Coordinator Nilesh R. Mohite Cover Work Nilesh R. Mohite
  • 10. Foreword Have you ever set foot in the kitchen with a certain hunger and found that you had no clue as to how to make that dish? At such a time a cookbook is a wonderful thing. That's why I appreciate this concept of a cookbook for workflows and services. At Microsoft when we build products they are often chocked full of little known but wonderful capabilities and guys like Hammad and Rick are just the sort of chefs that have what it takes to make you successful with it. AppFabric brings some terrific capabilities to Windows Server and IIS with distributed caching and terrific hosting features for WCF Services and WCF Workflow Services at no additional cost, so using it is a no-brainer but maximizing it will take the kind of insight you will find in this book. So break out the mixing bowls, spatulas, and turn on the oven… I can almost smell success from here. Ron Jacobs Senior Program Manager, Microsoft Corporation
  • 11. About the Authors Hammad Rajjoub works as an Architect Evangelist with Microsoft. Before joining Microsoft, he was awarded Microsoft's Most Valuable Professional award, seven years in a row. Along with being an MVP he was also a Microsoft Business Platform Technology Advisor. Being an MVP in Connected Systems gave him early access to Windows Communication Foundation, Windows Workflow Foundation, as well as Windows Server AppFabric. In his previous roles he has been a CTO at a technology startup, Vice President at one of the largest financial institutions, as well as a Solutions Architect at a leading consulting company. He has over a decade of experience using Microsoft Technologies, especially .NET since its beta 1 release. He is a published author and a frequent speaker at technology conferences (including TechEd and Cloud Computing Asia). He has founded a number of developer and architect communities over the years and remains a passionate speaker and contributor at local technical communities in Singapore. He is also an active member of the International Association of Software Architects (IASA) - Singapore Chapter. His areas of interest include Cloud Computing, Enterprise Architecture, Design Patterns, and Quantum Computation. At home he is a busy husband and father of twin girls and a baby boy. For more details visit his website at http://www.hammadrajjoub.net or on twitter: @hammadrajjoub. Alhamdulillah - This work would not have been possible without the help and support from my family. Special thanks to my mother Noor and my wife Iman for being supportive and giving me time and help to complete this book. I would also like to express my gratitude to my friend and co-author of this book, Rick Garibay, for accepting my invitation to co-author this book and sharing his feedback throughout the lifecycle of this book. Also, special thanks to Adnan Masood, Zubair Ahmed, and Alvin Lau for technically reviewing the book, providing feedback, and correcting numerous mistakes. Last but not the least, thanks to the editorial and project team at Packt Publishing for giving me the opportunity to write this book, and also being patient and understanding through the process of writes, re-writes, technical edits, as well as cases of missed deadlines.
  • 12. Rick G. Garibay is a developer, architect, speaker, and author on distributed technologies and is the General Manager of the national Connected Systems Practice at Neudesic. With over 13 years' experience delivering distributed solutions across industry sectors such as finance, transportation, hospitality, and gaming, he specializes in distributed technologies such as Microsoft .NET, Windows Communication Foundation, Workflow Foundation, and Windows Azure to help his clients deliver business value and drive revenue while reducing operational costs. As a five-time Microsoft Connected Systems MVP, he is an active speaker, writer, and passionate community advocate and is the Co-Founder of the Phoenix Connected Systems User Group (pcsug.org), celebrating four years in operation. He serves as an advisor to Microsoft in a number of roles as a member of the Microsoft Application Platform Partner Advisory Council and long-time member of the Business Platform Advisors and Azure Technology Advisors groups. Recent presentations include talks at the Microsoft SOA and Business Process Conference, Microsoft TechEd, Dev Connections, .NET Rocks, Desert Code Camp, and numerous Microsoft events and user groups throughout North America. He is a frequent contributor to industry publications such as CODE Magazine and maintains a blog at http://rickgaribay.net. You can catch up with Rick on Twitter @rickggaribay. I would like to thank my loving, patient, and amazing wife Christie for being my rock and providing a foundation which has allowed us to grow a beautiful family while enduring the sometimes overbearing demands of my career. I'm also grateful to my wonderful children, Sarah and Ricky for tolerating the many lost nights and weekends holed up in my home office working on this book. I would also like to thank Mickey Williams, VP Technology Platform Group at Neudesic for his support in taking on this project along with his words of encouragement and (always timely) sense of humor along the way. Last but not least, I would like to thank my friend and co-author, Hammad Rajjoub for inviting me to participate in this project and trusting me to help carry out his vision for this book. Hammad and I both share a labor of love as it applies to the Microsoft distributed technology stack affectionately (and somewhat nostalgically) known as "Connected Systems" and this book is both a reflection and an acknowledgment of the tremendous work the WCF, WF, and Dublin teams have done in putting these tremendous capabilities within reach of developers tasked with solving tough distributed challenges today.
  • 13. About the Reviewers Adnan Masood is a Software Engineer and Architect with zeal for solving interesting algorithmic, business, and technology problems. With special interest in scalable architectures, algorithm design, application security, and software development, he has over a decade of hands-on experience in financial services and application service providers. He currently works as a System Architect for Green Dot Corporation, a leading pre-paid financial institution where he develops robust, scalable, and secure SOA based middle-tier architectures, distributed systems, and web applications. He is a Microsoft Certified Trainer and holds various technical certifications including MCPD (Enterprise Developer), MCSD .NET, and SCJP-II. He is attributed and published in print media and on the Web; he also taught Windows Communication Foundation (WCF) courses at the University of California, San Diego. He regularly presents at local code camps and user groups. He is actively involved in the .NET community as Co-founder and President of the of San Gabriel Valley .NET Developers group and recipient of the INETA Community Champion Award for contributions to the developer community in Southern California. He holds a Master's degree in Computer Science and is currently pursuing a doctorate in Machine Learning; specifically interestingness measures in outliers using belief networks. He also holds systems architecture certification from MIT and SOA Migration, Adoption, and Reuse Technique certificate from SEI, Carnegie Melon University. He can be reached at adnan@nova.edu. Alhamdullilah - Thanks to my family for their constant support during the process of editing this book. I would also like to thank Hammad for the opportunity and both Hammad and Rick for putting up with my feedback and tech edits. Last but not least, thank you Joel for your great project coordination skills.
  • 14. Zubair Ahmed is an experienced software developer, blogger, and technical presenter. His interests include software architecture, improving code quality, and keeping an eye on the latest technologies. He works as a Software Consultant for Infusion Development in Dubai. When he is not working he likes to spend time in front of his large monitor at home writing some code, go for long drives with his wife, or socialize with friends. His technical blog is at zubairahmed.net and his tweet handle is @zubairdotnet. For technology updates, subscribe to his Facebook page at http://facebook.com/zubair.ahmed.public.
  • 15. www.PacktPub.com Support files, eBooks, discount offers and more You might want to visit www.PacktPub.com for support files and downloads related to your book. Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at service@packtpub.com for more details. At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks. http://PacktLib.PacktPub.com Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can access, read and search across Packt's entire library of books. Why Subscribe? f Fully searchable across every book published by Packt f Copy and paste, print and bookmark content f On demand and accessible via web browser Free Access for Packt account holders If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view nine entirely free books. Simply use your login credentials for immediate access. Instant Updates on New Packt Books Get notified! Find out when new books are published by following @PacktEnterprise on Twitter, or the Packt Enterprise Facebook page.
  • 16. Table of Contents Preface 1 Chapter 1: Installing Windows Server AppFabric 7 Introduction 7 Installing Windows Server AppFabric 8 Configuring Windows Server AppFabric (hosting and monitoring) 13 Configuring Windows Server AppFabric (caching) 22 Installing Cache Client Assemblies 27 Changing the Windows Server AppFabric configuration after installation 29 Starting a Caching service 36 Troubleshooting Windows Server AppFabric – configuration errors 39 Troubleshooting Windows Server AppFabric – auto restart issues 40 Chapter 2: Getting Started with AppFabric Caching 43 Introduction 43 Initializing Cache Client using code 45 Initializing Cache Client using configuration 50 Programming AppFabric Cache Client 53 Using AppFabric Cache via the ASP.NET provider model 58 Using AppFabric local cache 62 Using the AppFabric cache management tool 66 Building a custom provider model 71 Handling common Windows Server AppFabric caching errors 77 Chapter 3: Windows Server AppFabric Caching – Advanced Use Cases 87 Introduction 88 Using regions in cache 88 Using tags in cache 93 Using optimistic concurrency 95 Using pessimistic concurrency 98
  • 17. ii Table of Contents Setting up expiration 100 Setting up eviction 104 Setting up notifications 107 Using performance counters 113 Troubleshooting throttling 122 Troubleshooting eviction 125 Setting up read through – write behind 126 Chapter 4: Windows Server AppFabric Hosting Fundamentals 135 Introduction 135 Installing the Web Deployment tool (Web Deploy) 136 Packaging services for deployment with Web Deploy 141 Hosting WCF services 147 Hosting WCF REST services 153 Hosting basic workflow services 163 Chapter 5: More Windows Server AppFabric Hosting Features 171 Introduction 171 Hosting long-running workflow services 172 Taking advantage of WAS and Auto-Start 187 Hosting Windows Azure Relay services 196 Using common Server AppFabric hosting commandlets 208 Chapter 6: Utilizing AppFabric Persistence 219 Introduction 219 Using Windows Server AppFabric workflow persistence 220 Programmatically querying persisted workflow instances 230 Programmatically controlling persisted workflow instances 239 Developing an Instance Store provider 246 Developing an Instance Query provider 249 Developing an Instance Control provider 253 Registering and configuring custom store, query, and control providers 260 Chapter 7: Monitoring Windows Server AppFabric Deployment 267 Introduction 267 Collecting events from WCF and WF services 268 Viewing and classifying events in the AppFabric Dashboard 275 Enabling tracing and evaluating trace logs with WCF 286 Creating a customized tracking profile for WF services 294 Accessing the Monitoring DB 301 Building a custom dashboard 305 Using monitoring database cmdlets 327 Monitoring cache cluster health 331
  • 18. iii Table of Contents Chapter 8: Scaling AppFabric Hosting, Monitoring, and Persistence 337 Introduction 337 Creating an initial base configuration 340 Adding and removing servers from the farm 347 Application deployment on the farm 361 Configuration and management on the farm 363 Automating deployment with scripts 367 Chapter 9: Configuring Windows Server AppFabric Security 373 Introduction 373 Running caching services using Domain accounts 375 Setting up security for persistence stores 378 Securing Windows Server AppFabric's monitoring store 383 Securing the Event Collection service 390 Index 401
  • 20. Preface Windows Server AppFabric is an extension of the Application Server Role on the Windows Server Platform. In a nutshell, Windows Server AppFabric frees Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Service developers from common infrastructure plumbing by providing a robust, secure, composable, and reliable platform which provides caching, hosting, and monitoring capabilities, including support for long running workflow services, all on the Windows Platform. As such, Windows Server AppFabric is an evolution of the Windows Server platform, providing essential building blocks for first- classing WCF (for code-based services) and WF (for declarative workflow services) that are built using the .NET Framework 4 and Visual Studio 2010. As an extension to IIS and WAS, Windows Server AppFabric relies on IIS's proven capabilities for hosting and lifecycle management, adding additional useful capabilities for working with WCF and WF services. In addition, Windows Server AppFabric takes advantage of Windows Server's robust event tracing mechanism (also known as ETW). ETW provides optimized and high-performing kernel-level instrumentation which greatly minimizes impact on the performance of WCF and WF services hosted in IIS with Windows Server AppFabric. Whether you are a developer who wants to avoid the same repetitive tasks when preparing your WCF and/or WF services for deployment, or an IT Pro who wants to avoid complex XML for configuring hosting and monitoring options for the services you manage, you will instantly benefit from Windows Server AppFabric. Best of all, Microsoft has made this key extension to the Windows Server Platform available free of charge. Written by both a former MVP and now Architect Evangelist with Microsoft and a five-time Connected Systems Developer MVP, the authors of this book both worked very closely with Microsoft during the development of the product (then codenamed "Dublin") participating in Software Design Reviews and early incubation initiatives. Hammad and Rick have advised customers of all shapes and sizes and fielded these capabilities in countless projects across various verticals in the two years since its general availability. This book is full of practical, step-by-step guidance including useful tips and techniques that will allow you to build scalable, reliable, and secure service-oriented applications on the Windows Server Platform with IIS and Windows Server AppFabric.
  • 21. Preface 2 What this book covers Chapter 1, Installing Windows Server AppFabric, covers setting up your development environment to use Windows Server AppFabric. You'll learn how to install hosting, persistence and monitoring capabilities, including provisioning repositories, choosing the appropriate storage options, making changes to configuration after installation, and troubleshooting common (and not so common) installation issues you might encounter along the way. Chapter 2, Getting Started with AppFabric Caching, introduces Caching in Windows Server AppFabric, covering everything you need to get started with introducing this important capability to your composite applications and services. You will learn how to set up and use Caching using code and configuration options, as well as working with Caching within your applications. In addition, you'll learn how easily an existing application that relies on ASP.NET session state can immediately benefit from Windows Server AppFabric Cache, handling common error conditions, using PowerShell commandlets, and building a custom provider model. Chapter 3, Windows Server AppFabric Caching – Advanced Use Cases, builds on the concepts in the previous chapter, covering the use of Regions and Tags as well as choosing the right concurrency mode and establishing expiration, eviction, and notification policies. You will also learn advanced monitoring concepts including the use of performance counters, configuring high availability, and common troubleshooting techniques for getting the most out of Windows Server AppFabric Cache. Chapter 4, Windows Server AppFabric Hosting Fundamentals, introduces Windows Server AppFabric's hosting capabilities, covering common deployment, management, and hosting scenarios. You'll learn how to host WCF SOAP and REST services as well as simple WF services along with a number of tips and tricks for moving beyond the service template defaults. Chapter 5, More Windows Server AppFabric Hosting Features, covers additional hosting topics, including supporting long-running WF services, how your services can benefit from the Auto-Start feature, properly hosting WCF services that take advantage of Windows Azure Service Bus Relay bindings for enabling modern, hybrid scenarios as well as common PowerShell commandlets for scripting many of the tasks covered in this and the previous chapter. Chapter 6, Utilizing AppFabric Persistence, provides ample coverage of Windows Server AppFabric persistence capabilities, including configuring persistence for WF services, working with multiple persistence stores, and developing instance store, control, and query providers. This chapter also provides an in-depth walkthrough of development and configuration of custom instance, control, and query providers.
  • 22. Preface 3 Chapter 7, Monitoring Windows Server AppFabric Deployment, provides an introduction to the monitoring capabilities provided by Windows Server AppFabric. Topics include collecting and viewing events from WCF and WF services, enabling tracing and configuring tracking profiles, and leveraging PowerShell cmdlets for monitoring WCF and WF services as well as the Caching service. In addition, you'll learn how to surface monitoring information to any user experience by following the sample recipe for building a custom monitoring dashboard using ASP.NET MVC and OData. Chapter 8, Scaling AppFabric Hosting, Monitoring, and Persistence, covers a common scenario for scaling Windows Server AppFabric across multiple IIS hosts. You will learn how to prepare two hosts for clustering using Microsoft NLB as well as understand deployment, management, and administration of a multi-host Windows Server AppFabric deployment that shares a common, centralized persistence store. Chapter 9, Configuring Windows Server AppFabric Security, covers what you need to know about planning and implementing a security model with Windows Server AppFabric. You will learn how to secure the caching, persistence, monitoring, and eventing (via ETW) subsystems of Windows Server AppFabric. What you need for this book This book assumes you have a solid foundation in messaging and workflow concepts and are proficient in developing web services with WCF 4.0 and WF 4.0, in addition to C#, the .NET Framework, and Visual Studio 2010. You will need a Windows 7 (or Windows Server 2008/R2) machine configured for IIS 7 along with SQL Server and Visual Studio 2010, as well as either Windows Server AppFabric or Microsoft AppFabric 1.1 for Windows Server. To take advantage of the latest caching features introduced in AppFabric 1.1, it is recommended that you install Microsoft AppFabric 1.1. for Windows Server. Otherwise, Windows Server AppFabric (the first version of this release) will suffice and is the product name we use throughout this book. Either version can be installed on Windows 7, Windows Server 2008, Windows Vista R2, or Windows Server 2008 R2 and they support both 32- and 64-bit architectures. You will also need Microsoft .NET Framework v4, IIS7, and Windows PowerShell 2.0. In terms of hardware, officially, any 1GHz+ CPU (900MHz+ for Dual Core and 700MHz+ for Quad Core) with 2 GB of RAM will be sufficient to get up and running. However, it is recommended that you have at least 4 GB of RAM to run Windows Server AppFabric or Microsoft AppFabric 1.1 for Windows Server.
  • 23. Preface 4 Who this book is for Whether you are an architect or developer designing and developing composite solutions with WCF and WF services or an IT Pro tasked with their deployment and maintenance; or designing and implementing a distributed caching strategy for your .NET services and applications, this book is for you. This book does not assume any prior knowledge of Windows Server AppFabric; however, a basic understanding of .NET Framework 4.0, Windows Communication Foundation (WCF), and Windows Workflow Foundation (WF) technologies is required. Conventions In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning. Code words in text are shown as follows: "Once the Caching service is up and running, we can query it for the caches that are available in this cluster by using the Get-Cache command." A block of code is set as follows: internal enum AckNack { Ack, Nack, Pending, } When we wish to draw your attention to a particular part of a code block, the relevant lines or items are set in bold: <microsoft.applicationServer> <monitoring> <default enabled="true" connectionStringName="ConnectionString" monitoringLevel="Troubleshooting" /> </monitoring> </microsoft.applicationServer> Any command-line input or output is written as follows: Get-ASAppMonitoring -SiteName "Default Web Site" -VirtualPath /ReservationService
  • 24. Preface 5 New terms and important words are shown in bold. Words that you see on the screen, in menus or dialog boxes for example, appear in the text like this: "In IIS, click on the application and select Features View." Warnings or important notes appear in a box like this. Tips and tricks appear like this. Reader feedback Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of. To send us general feedback, simply send an e-mail to feedback@packtpub.com, and mention the book title through the subject of your message. If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors. Customer support Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase. Downloading the example code You can download the example code files for all Packt books you have purchased from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
  • 25. Preface 6 Errata Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you would report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/support, selecting your book, clicking on the errata submission form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website, or added to any list of existing errata, under the Errata section of that title. Piracy Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works, in any form, on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy. Please contact us at copyright@packtpub.com with a link to the suspected pirated material. We appreciate your help in protecting our authors, and our ability to bring you valuable content. Questions You can contact us at questions@packtpub.com if you are having a problem with any aspect of the book, and we will do our best to address it.
  • 26. 1 Installing Windows Server AppFabric In this chapter, we will cover: f f Installing Windows Server AppFabric f f Configuring Windows Server AppFabric (hosting and monitoring) f f Configuring Windows Server AppFabric (caching) f f Installing caching Client Assemblies f f Changing the Windows Server AppFabric configuration after installation f f Starting a Caching service f f Troubleshooting Windows Server AppFabric – configuration errors f f Troubleshooting Windows Server AppFabric – auto restart issues Introduction Windows Server AppFabric is an extension of the Application server role on the Microsoft Platform. Windows Server AppFabric offers in-memory, super-fast, scalable caching capabilities for web applications and services. For applications built using Windows Communication Foundation (WCF) and Workflow Foundation (WF), Windows Server AppFabric provides streamlined hosting and monitoring capabilities that support composition scenarios. Windows Server AppFabric is built on top of an existing set of technologies on the Windows platform including, but not limited to Internet Information Services (IIS), Windows Process Activation Service (WAS), .NET Framework v 4.0, and Event Tracing for Windows (ETW).
  • 27. Installing Windows Server AppFabric 8 In this chapter, we will look at how to set up Windows Server AppFabric using the different configuration options. We will also see how the configuration of Windows Server AppFabric can be changed after the installation. Lastly, at the end of the chapter, we will see how to troubleshoot some common problems with Windows Server AppFabric installations. Installing Windows Server AppFabric Windows Server AppFabric is an extension of the Application Server role on the Windows platform. At the time of this writing there are two ways to install Windows Server AppFabric. One is the standard direct install and the other is using Microsoft's new and exciting Web Platform Installer (WPI). In this recipe, we will go through the step-by-step instructions to install Windows Server AppFabric using WPI. Needless to say, if you already have Windows Server AppFabric installed on your machine, then you can skip this recipe. WPI is the preferred approach because it streamlines the installation process by smartly identifying and installing the prerequisite software. Getting ready Windows Server AppFabric can be installed on Windows 7, Windows Server 2008 SP 2, Windows Vista R2, and Windows Server 2008 R2 (it supports both 32 and 64 bit architectures). You will also need Microsoft .NET Framework v4, IIS7, and Windows PowerShell 2.0. In terms of hardware, officially, any 1GHz+ CPU (900MHz+ for Dual Core and 700MHz+ for Quad Core) with 2 GB of RAM will be sufficient to get up and running with Windows Server AppFabric. However, it is recommended that you have at least 4 GB of RAM to run Windows Server AppFabric. If you want to try Windows Server AppFabric before actually installing it on your host machine, it makes sense to use a virtual machine that has Windows Server AppFabric installed on it so that you can play with it. The good news is that Microsoft has made a preconfigured Windows Server AppFabric VM available on MSDN that can be downloaded and used with Microsoft's Virtual PC. This download is available as a part of Microsoft's training kit for Windows Server AppFabric. The download is available at: http://www. microsoft.com/download/en/details.aspx?id=7956.
  • 28. Chapter 1 9 How to do it... WPI offers a highly streamlined package/software download installation mechanism. You can get WPI from Microsoft's website at: http://www.microsoft.com/web/downloads/ platform.aspx. After downloading and installing WPI, you can use the following steps to launch Windows Server AppFabric Installer: 1. Under the Start menu, go to All Programs. If you are using Windows 7, type Web Platform Installer in the custom menu item, find the WPI as shown in the following screenshot, and launch it: 2. Accept the User Account Control (UAC) warning. This will allow WPI to make changes to your computer.
  • 29. Installing Windows Server AppFabric 10 3. Click on Next at the bottom of the screen to get started with the WPI. 4. Type AppFabric in the search box (in the top right-hand corner of the screen) and press the Enter key: 5. This will reveal a search result showing Windows Server AppFabric. Click on Add and then on Install to continue:
  • 30. Chapter 1 11 6. Now, WPI will ask to review the download and install of all the required software components to run Windows Server AppFabric. Select I Accept to continue. The list of components, third-party application software, and Microsoft products will vary from machine to machine. WPI will determine the missing software and will list it on this screen. 7. Once you select I Accept, WPI will download and install all the required software components one by one. Sometimes this may result in multiple reboots for the host machine.
  • 31. Installing Windows Server AppFabric 12 8. Once all the required software components are installed, the Windows Server AppFabric installation will be complete. Click on Finish: How it works... The Windows Server AppFabric installation adds three new Windows services: AppFabric Caching Service, AppFabric Event Collection Service, and AppFabric Workflow Management Service, for caching, monitoring, and hosting scenarios respectively. These services can be seen when the Services Snap-in is launched from the Control Panel (or by typing Services.msc in the search box under the Windows Start menu).
  • 32. Chapter 1 13 As we can see in the preceding screenshot, only AppFabric Event Collection Service and AppFabric Workflow Management Service have Status as Started and have Startup Type defined as Automatic. By default, Windows Server AppFabric Caching Service is not available for use after a machine reboot. AppFabric Event Collection Service, AppFabric Workflow Management Service, and Windows Server AppFabric Caching Service form the heart of Windows Server AppFabric. These services work in the background and perform tasks such as collecting events, managing the workflow's life cycle, connecting to the cache cluster, and serving cache related requests. Once Windows Server AppFabric is installed, the next step is to configure it using the Windows Server AppFabric Configuration wizard. Configuring Windows Server AppFabric (hosting and monitoring) There are a number of configuration options available when configuring Windows Server AppFabric, and in this recipe we will go through them. At this point, we should appreciate Microsoft's efforts in designing Windows Server AppFabric, as it allows a fair bit of customization. Getting ready Configuring Windows Server AppFabric is available via the Windows Server AppFabric Configuration wizard. It is a fairly simple task, but it requires careful consideration of a number of options and possibilities. We will need the following items ready in order to configure Windows Server AppFabric: f f Service accounts to run (with administrative privileges) ‰ ‰ AppFabric Hosting's Event Collection service ‰ ‰ AppFabric Hosting's Persistence service
  • 33. Installing Windows Server AppFabric 14 f f SQL server database for: ‰ ‰ (SQL server based) monitoring provider ‰ ‰ (SQL server based) persistence provider ‰ ‰ AppFabric caching store service provider (if your machine is part of a domain) f f UNC file share for Windows Server AppFabric Caching service configuration provider (if the host machine is running in a workstation mode) f f Information on cluster set up (for a high-availability scenario) When HA (High Availability) is enabled Windows Server AppFabric Cache stores a copy of each cached object or region in a separate cache host. HA is discussed in detail in Chapter 7, Monitoring Windows Server AppFabric Deployment. f f Unique port numbers for cache, cluster, arbitration, and replication It should be noted that when you run the Windows Server AppFabric Configuration wizard and make changes to the configuration, it will overwrite any existing values. How to do it... To launch the Window Servers AppFabric Configuration wizard, go to All programs under the Start menu, find AppFabric, and then select Configure AppFabric. The following is a sequence of steps that will take you through the configuration wizard for Windows Server AppFabric: 1. Run the Configure AppFabric wizard.
  • 34. Chapter 1 15 2. Accept the User Account Control (UAC) dialog, confirming that you will allow this program to make changes to your host machine: 3. Click on Next at the bottom of the screen to start the configuration of Windows Server AppFabric.
  • 35. Installing Windows Server AppFabric 16 4. Once you are at the Configure Hosting Services screen, select the box titled Set monitoring configuration: 5. Select the service account required to run the AppFabric Event Collection service by clicking on Change. 6. If you do not have a ready-made account available for the event collection service, then you can leave the default value of NT AuthorityLocal Service, (as this can be modified later on). For more details on security, please refer to the How it works… section, as well as Chapter 9, Configuring Windows Server AppFabric Security.
  • 36. Chapter 1 17 7. Now select the Monitoring provider, as this will provide access to the monitoring database. (As there is only one default SQL-based implementation, select the System.Data.SqlClient option.) Windows Server AppFabric by design allows adding multiple providers for monitoring and persistence. Configuring multiple persistence providers is discussed in Chapter 5, More Windows Server AppFabric Hosting Features. 8. Now click on Configure to launch the SQL configuration screen to help you select/ configure the SQL server instance that will be used to store monitoring information. 9. Select Register AppFabric monitoring store in root web.config. 10. Select Initialize monitoring store. 11. Under Connection String, provide the SQL Server name, for example, <HostServer Name><SQLInstanceName>. 12. Provide the Database name for the SQL Server. The SQL database (specified above in steps 11 and 12) is used to store Windows Server AppFabric monitoring related information. The Initialize monitoring store option will initialize the database with the monitoring schema. 13. The first half of your configuration screen should appear as follows:
  • 37. Installing Windows Server AppFabric 18 14. Now we will set up the Security Configuration to access the SQL Server database instance that we selected/created previously. For Windows authentication, if you have selected a complete install, then you will see default values for Administrators, Readers, and Writers in Security Configuration. If you already have roles defined and you have opted to initialize the Monitoring Database, then you can browse and select the appropriate roles. Otherwise, use the default values of AS_Administrators and AS_Observers as Administrators/Writers and Readers respectively. This is shown in the following screenshot: Windows Server AppFabric's AS_Administrators is a conceptual and administrative role. As the name implies it allows full control over AppFabric's configuration, monitoring, and persistence capabilities. Event Collection and Workflow Persistence services run under this role. Likewise, AS_Observer is also a conceptual and administrative role. It allows you to view the application and services configuration, monitor data, as well as view persisted instances, all without being able to modify anything.
  • 38. Chapter 1 19 15. However, if you wish to choose SQL Server Authentication, you will need to provide a username and password that will be used to connect to SQL Server database. In this recipe we will only use Windows authentication. 16. Once you click on OK you should see a confirmation dialog asking you to validate whether you want these settings to take effect: 17. Click on Yes, and the wizard will go ahead and create and initialize the monitoring store. Once completed, you should see a validation dialog advising you that the Monitoring store was initialized and registered successfully: 18. On the Configure Hosting Services screen, select Set persistence configuration.
  • 39. Installing Windows Server AppFabric 20 19. Now, select an AppFabric Workflow Management service account. Just like the service account for monitoring, we will need a service account that has admin rights and can access the persistence provider/store. If you have an account already available for this then click on Change and select it. Otherwise, use the default value of the NT AUTHORITYLOCAL SERVICE account: 20. From the Persistence provider dropdown, select a sqlStoreProvider and then click on Configure. Now this screen should look familiar, as it is the same one we used to set up Windows Server AppFabric Monitoring earlier on. We will once again select Register AppFabric persistence store in root web.config. We will also select Initialize persistence store and provide the SQL Server and Database names:
  • 40. Chapter 1 21 21. Just like we set up the Security Configuration for the Windows Server AppFabric Monitoring database, repeat the same steps and use built-in accounts for the persistence database. 22. Click on OK and proceed to confirm the changes. This will complete the configuration of the Hosting and Monitoring parts of Windows Server AppFabric.
  • 41. Installing Windows Server AppFabric 22 How it works... The configuration of Windows Server AppFabric provides contextual information to run Windows Server AppFabric services that are responsible for monitoring and hosting services. The values that we configured can be changed later, either by running the AppFabric Configuration wizard again or by using Windows Server AppFabric PowerShell commandlets (Cmdlets). Windows PowerShell is built on top of Microsoft.NET and offers a task based command-line shell and scripting language. Windows PowerShell has built in commands called Cmdlets (pronounced as commandlets). Cmdlets are lightweight commands and typically return a Microsoft.NET Framework object type to the next command in the pipeline. It should be noted that monitoring and persistence services should be run under accounts with administrative privileges so that they can read and persist events to the preconfigured monitoring and persistence databases. Configuring Windows Server AppFabric (caching) Once you have finished configuring the Hosting Services as discussed in the preceding recipe, the next task is to configure the Caching Services for AppFabric. Just like in the preceding recipe, we will select a service account that should be part of the administrator group so that it has an administrative access to the caching configuration provider. Once again we will consider a workstation configuration and select a valid local system account. We will see how to setup the Caching Configuration Store Provider. At the end of this recipe, we will also see how to join/create a new cache cluster (that this, the instance of Window Server AppFabric Cache is part of) along with the end point details (that is, port addresses) used by AppFabric services to communicate on the network. Once we have configured Windows Server AppFabric Caching Services, we will be able to start using AppFabric Caching. Getting ready To begin this recipe, we will need the following in place: f f A service account for the AppFabric Caching service. f f A file share (UNC Server Share) to store XML based cache configurations or a SQL Server database for a SQL Server based AppFabric Configuration store. (This is required for configuring a High Availability Caching Service scenario that runs on Windows Server 2008.)
  • 42. Chapter 1 23 How to do it… To set up Windows Server AppFabric Caching follow these steps: 1. Run the AppFabric Configuration wizard. 2. Accept the User Account Control (UAC) dialog, confirming that you will allow this program to make changes to your computer. 3. Click on Next on the Before you Begin and Configure Hosting Services screens to reach Configure Caching Service. You cannot directly select Caching Service Configuration from the left-hand navigation panel on the Windows Server AppFabric Configuration Wizard. 4. Once you are on the Caching Service screen of the Configure AppFabric wizard, select the Set Caching Service configuration. 5. Under Caching Service Account, click on Change. This will allow you to select the identity for the Caching Service Account. 6. If your machine is in workstation mode, then you cannot change the service account. Otherwise, you can browse and select a local account (that has administrative access to the Caching Configuration store). 7. Select XML from the Caching Service configuration provider dropdown. 8. The SQL Server based configuration is not available for the Caching Configuration Service in workstation mode. If you select SQL provider and click on Configure, you will get the following error message: We discuss the use of SQL Server AppFabric Caching Service Configuration Store Provider in more detail in Chapter 7, Monitoring Windows Server AppFabric Deployment.
  • 43. Installing Windows Server AppFabric 24 9. Under File Share, provide a file path of an existing UNC file share. This will allow Windows Server AppFabric's Configuration Service to store and manage information stored as an XML file under this provided path. Your screen will appear as follows: 10. It should be noted that the File share (UNC server share) selection wizard will not allow you to create a new file share. As highlighted in the beginning of the recipe, it is required to have a UNC file share readily available. Under cluster information select New Cluster and click on Next. 11. Configure AppFabric Cache Node by providing a unique port number value (numbers must be between 1024 and 65535) for the Cache port, Cluster port, Arbitration port, and Replication port. The Cache port is used for transmitting data between Cache Clients and Cache Hosts. The Cluster port enables Cache Cluster formation and Management. The Arbitration port is used to double check if the Cache Host is unavailable. Arbitration is used when the Cache Host fails. The Replication Host is used to move data between the Cache Hosts. Replication is used when Cache is configured for High Availability.
  • 44. Chapter 1 25 12. Configure Windows firewall exceptions by selecting the rules for Windows Server AppFabric Caching Service and Remote Service Management. Your screen should appear similar to the following: If you are using any third-party (non-Microsoft) firewall then you will need to manually update the firewall rules. This must be done to allow Windows Server AppFabric to use the ports that were specified during its configuration. 13. After clicking on Next, click on Yes on the Windows Server AppFabric Configuration Wizard dialog box and you will come to the end of the wizard with an option to launch IIS to further manage Windows Server AppFabric. Click on Finish to close the wizard.
  • 45. Installing Windows Server AppFabric 26 14. Congratulations! You have fully configured Windows Server AppFabric. Click on Finish. The High Availability feature of Windows Server AppFabric Caching can only be enabled on Enterprise versions of Windows Server 2008/2008 R2. This implies that all the nodes in the cluster must have enterprise editions of Windows Server 2008/2008 R2. For more information you may refer to: http://go.microsoft.com/fwlink/?LinkId=164929. How it works... The Windows Server AppFabric Caching Service requires a service account to run its Windows service as well as a configuration provider where it can store its configuration. As the caching service runs under the identity of the provided account, the account must have administrative privileges so that it can access and modify the configuration.
  • 46. Chapter 1 27 The Windows Server AppFabric Caching Service needs to identify which ports to connect to in order to communicate with the other hosts in the cluster. Once the port numbers are specified, ensure that any software or hardware firewalls are not blocking these ports. As we experienced in this recipe, the Windows Server AppFabric Caching Service is highly configurable and the configuration wizard makes it extremely easy to set up (or change) the existing configuration. Now that we have configured Services for AppFabric and all the services are up and running under valid service accounts along with firewall rule definitions, we can now start coding to test and start consuming the caching service. Installing Cache Client Assemblies For non-production/client environments, we do not need to install the complete Windows Server AppFabric. Instead, we can use Client Assemblies to connect to an instance of AppFabric. In this recipe, we will see how to set up a Client Machine that can connect to and communicate with Windows Server AppFabric. Once we have set up the Client Assemblies, then we can use Visual Studio, for example, to write applications that can use Windows Server AppFabric Caching capabilities. Cache Client, as the name implies, refers to the applications or services that can access and modify cached items by connecting to a configured or specified cache cluster. Getting ready To set up the Cache Client, you will need the following assemblies: f f Microsoft.ApplicationServer.Caching.Core.dll f f Microsoft.ApplicationServer.Caching.Client.dll f f Microsoft.WindowsFabric.Common.dll f f Microsoft.WindowsFabric.Data.Common.dll For the Windows Server AppFabric Caching Client to be able connect to the Windows Server AppFabric Caching Service, it is required that Client Binaries are of the same version number as that of the Cache Service.
  • 47. Installing Windows Server AppFabric 28 How to do it... Setting up the Client Caching environment is a very simple task; it is just a matter of copying the binaries highlighted at the start of the recipe to a particular location. These binaries can be obtained by installing Windows Server AppFabric on a workstation. You will need the Caching feature installation to get the required Caching binaries. The default location for these assemblies is .WindowsSystem32AppFabric: 1. On Windows 7, type C:WindowsSystem32AppFabric in the custom menu; you should be able to see a number of binaries and the configuration file:
  • 48. Chapter 1 29 2. Obtain the following assemblies from the Windows Server AppFabric Cache installation: ‰ ‰ Microsoft.ApplicationServer.Caching.Core.dll ‰ ‰ Microsoft.ApplicationServer.Caching.Client.dll ‰ ‰ Microsoft.WindowsFabric.Common.dll ‰ ‰ Microsoft.WindowsFabric.Data.Common.dll 3. Copy the assemblies mentioned in step 2 to a place where they are available under a known path to your Client application. To cache-enable an application server, you will need to install the Windows Server AppFabric Caching Assemblies on it. It is as simple as having an application/service installed on the server along with the AppFabric Caching assemblies. As long as your application installation copies the AppFabric Cache Assemblies and has a valid configuration in place, your application server is Cache enabled. How it works... The Windows Server AppFabric Caching Client application requires an API to talk to the Caching Service. This API (provided as a set of assemblies highlighted earlier in this recipe) must be available for the client to program against it. By copying these assemblies on the client machine, we ensure that the client does not need to do a complete installation of Windows Server AppFabric. Once the Client Assemblies are available, we can write applications that can use AppFabric's Caching capabilities and connect to the AppFabric Caching cluster. Changing the Windows Server AppFabric configuration after installation Once Windows Server AppFabric is configured, it is still possible to change its configuration. There could be a number of reasons for changing the configuration of an existing deployment. The following are some of the most common scenarios that would require such changes: f f Changes database repository (SQL instance for example) f f Changes to system accounts (for security reasons) f f Port number related changes for caching. You can use the Windows Server AppFabric configuration wizard and make the required changes as they are required. In this recipe, we will see how to re-configure Windows Server AppFabric after installation.
  • 49. Installing Windows Server AppFabric 30 Getting ready You will need an existing instance of AppFabric that has been installed and configured to get started with this recipe. In this recipe, we will learn how to change Windows Server AppFabric configuration after it has been installed on the host OS. How to do it... To begin, launch the AppFabric Configuration wizard to go through the configuration options on an existing installation of AppFabric to easily select the options that we want to change. 1. Start the Window Server AppFabric Configuration wizard. 2. Accept the User Account Control (UAC) warning. Click on Next at the bottom of the screen to get started with the configuration. 3. Give the wizard a few seconds while it loads the existing configuration. The screen should look as follows:
  • 50. Chapter 1 31 Once the configuration is loaded, you will notice that the green tick under the monitoring and persistence configurations states that the default monitoring store is registered. 4. We can now go ahead and change the monitoring configuration by selecting Set monitoring configuration and clicking on Change. 5. This will launch a Windows Server AppFabric Monitoring Store Configuration wizard that we have already used in the recipe Configuring Windows Server AppFabric (hosting and monitoring) earlier in this chapter.
  • 51. Installing Windows Server AppFabric 32 6. By selecting Register AppFabric monitoring store in root web.config, we can specify the Server and Database name. Registering the monitoring or persistence store in the configuration implies that that the connection string (with the name = ApplicationServerMonitoringConnectionString) is placed in the root Web.Config file and is made available to all subsequent websites. The Initialize monitoring store option will create a new database (if it does not already exist) and it will also initialize the schema and the structure of the database (based on the Microsoft SQL Server provider for the AppFabric monitoring site). It should also be noted that if you skip the Register AppFabric monitoring store in root web.config option, then the monitoring database will not be available on this computer.
  • 52. Chapter 1 33 7. We can repeat steps 4, 5, and 6 by selecting Set persistence configuration. 8. Next move to Caching Service and select Set Caching Service configuration, as shown in the following screenshot: 9. Change the Caching Service account by selecting Change and opting for a relevant account. 10. Change the File share (UNC server share) by browsing and selecting the appropriate share that we want to store the XML configuration file.
  • 53. Installing Windows Server AppFabric 34 11. Join an existing cluster (as opposed to creating a new one) by selecting the Join cluster option, as shown in the following screenshot: If the configuration already exists, then this caching service instance will become part of an existing cluster. 12. If you are joining an existing cluster, you will not be able to change the cluster size. It should be noted that the cluster size does not dictate the possible number of machines in the cluster; however, it does optimize the whole cluster based on the size selected. So for example, you can add seven machines to a cluster that is defined as "Small" (1-5 machines). However, Windows Server AppFabric will optimize the caching configuration based on cluster configuration of 1-5 machines.
  • 54. Chapter 1 35 13. To change port numbers for caching, click on Next and change the values as required. In case of changing port numbers you must ensure that firewall level exceptions have already been defined for the newly selected port numbers. Otherwise, Windows Server AppFabric Cache will not be able to function properly. How it works... One of the best things about Windows Server AppFabric is that it is highly configurable. Configuration can be changed in a variety of ways. For example, in this recipe our changes were driven by the Windows Server AppFabric configuration wizard; however, we could have achieved similar results using AppFabric PowerShell commandlets. We will learn more about PowerShell commandlets in the following chapters. Another possible way to change configuration is to modify the configuration manually. For example, when using the XML provider, we can always go to the file share and modify the ClusterConfig.xml file. Windows Server AppFabric uses providers to abstract the implementation details of its Cache configuration as well as persistence and monitoring stores. In this recipe we used out of the box providers, but configuration storage and management can be further extended to implement a custom provider. At runtime, Windows Server AppFabric looks up the registered configuration provider. Based on the provider it then accesses a specific configuration store. The configuration store is then used to fetch relevant information for that provider. For example, with the Caching configuration provider, the configuration store will store information such as port numbers, service accounts, and so on. Similarly, for the persistence and monitoring configuration providers, the configuration store will maintain information relevant to monitoring and persistence stores such as connection strings, for example.
  • 55. Other documents randomly have different content
  • 56. "Päästä sinä pikkupeto!" "Armosta, mutta ei ollenkaan pakosta. Minä keitän keisarisoppaa sinun herrojesi päivälliseksi sunnuntaiksi, sentähden täytyy minun mennä." Hän pani ilvehtien parin purpuranpunaisia huulia törrölleen, irroitti kätensä ja juoksi keittiöön. Sellaista oli jokapäiväinen ruoka. Marianne kosti näin Börjelle, kun tämä ei puhunut mitään ulkomaan matkastaan, jonka tähden Mariannen uteliaisuus oli koetuksella. Pelko oli vallan kadonnut. Pilkkakirves oli kurkistanut Börjen kortteihin. Hänen ei koskaan olisi tarvinnut luulla, että Marianne vähääkään arasteli käydä hänen kamarissaan. Jos hänellä oli jotakin sanottavaa, astui hän rohkeasti sisään. Jos Börje siitä tuli nyreäksi, nauroi Marianne koirankurisilla silmillään, kuin olisi hän sanonut: "vanha jöröjukka!" Ja sitten Börje häpesi.
  • 57. Mariannella ei ollut yhtään häveliäisyyttä. "Mitä, luetko sinä Englannin kieltä?" huudahti Marianne eräänä päivänä vallan huolimattomasti löydettyään Progress and Poverty'n miehensä pöydältä, ennenkuin tämä oli ennättänyt pistää sen piiloon. Börje lensi niin tulipunaiseksi, että kuka hyvänsä olisi häntä säälinyt, vaan ei Marianne. "No kuinkas käy?" kysyi Marianne yhtä huolimattomasti. "Hyvin." Enempää ei toinen saanut tietää. Vaan hän oli kyllä hankkiva siitä selvän; vaikka hän kaivaisi asian pihdeillä ilmoille! Sunnuntaina, jolloin Börjellä oli ollut mainitut herrojen päivälliset ja he olivat saattaneet viimeiset vieraat ulos, jäivät he molemmat seisomaan portaille. Kevättä oli jo kulunut ja illan valo rupesi hämärtymään; ilma oli tyyni ja rauhallinen ja äsken puhjennut koivu levitteli tuoksuaan. Marianne kääntyi ja katseli Börjeä, vaan ei puhunut mitään. Tämä seisoi hiljaa, eikä Marianne voinut päästä sisään menemättä hänen sivuitsensa. Sitten kääntyi hän vielä kerran ja katseli; hänen mielestään olisi Börje nyt voinut puhua. Vaan tämä pujotti ainoastaan käsivartensa hänen vyötäisilleen ja suuteli häntä. Marianne seisoi silmät alas luotuina.
  • 58. "Minkätähden sinä et tahtonut tulla valtiopäivämieheksi?" sanoi Marianne lopuksi kääntymättä. "Mistä sinä sen olet saanut tietää?" "Per Olsson sanoi siitä olleen kysymyksen, vaan että sinä kieltäyit, ettet muka tahtonut." Börje ei sanonut mitään. Marianne luuli tukehtuvansa harmiin. Eikö hän ollut tullut toiseksi ihmiseksi, eikö hän ollut arvannut miehensä ajatuksia, eikö hän ollut pitänyt korkeimpana kunnianaan päästä hänen urholliseksi työtoveriksensa, — ja siitä huolimatta taisi hän tuossa seista törröttää ääneti, hengeti! Eikö tuo ollut inhottavaa! Ja päivänä tämmöisenä! Marianne tiesi täyttäneensä hyvin tehtävänsä. Hän tiesi Börjen olevan hyvillään. Eikä hän kuitenkaan lausunut mitään! Marianne oli vähällä itkeä harmista. Marianne kääntyi kolmannen ja viimeisen kerran, katsoen pitkään ja sangen uhkaavasti. Silloin purskahti Börje nauramaan. "Mitä sinä tahdoit tietää?" vastasi hän. Kauvemmin ei voinut kestää. Marianne heitti kätensä hänen kaulaansa ja painoi nenänsä liitteäksi Börjen takin rinnustaa vasten. "Kaikki," vastasi hän. "Sinähän tiedät jo. Nuo toitottavat sinulle kaikki korviisi." "Niin, etkä sinä voi mitään puhua!"
  • 59. "Kyllä lörpötystä on muutenkin kyllältä. Siihen ei tarvitse mitään arvoa panna, vaan siihen, että todella saadaan jotain aikaan." Marianne nosti päätänsä ja katseli miestänsä kauvan silmiin. "Minä käsitän enemmän kuin luulet," sanoi hän sitten pitkään. "Mitä tarkoitat?" "Kunnianhimoa — Börje." Tämän kasvot synkistyivät. Siitä hän ei kärsinyt kuulla puhuttavan. Sitten katseli hän vaimoansa, vakavasti, terävästi, kuin hän joskus teki. "Vaikka on lyötykin rahaksi, ei sillä ole sanottu, että tahtoo semmoisena olla," sanoi hän tylysti. "Kun Torsten tulee suureksi, ja kun hän tuntee samaa, jota sinä nyt, silloin ymmärtää hän, että myös vaimolle voi puhua, minä tarkoitan minulle." Mariannen kasvot olivat vaalenneet, hän tunkeusi miehensä ohitse etehiseen. Tämä tarttui hänen käteensä pidättäen häntä. "Marianne, mitä tämä on?" "Se on, että minä olen sovittanut enemmän kuin kylläksi. Se on, että minä olen osoittanut, etten ole ajattelematonta korutavaraa. Se on, että minä olen pitänyt sinusta niin paljon, että olisin voinut mennä vaikka tuleen ja veteen sinun edestäsi ja ettet sinä kuitenkaan, kuitenkaan koskaan ole pitänyt minua itsesi arvoisena." "Mutta mikä sinun on?"
  • 60. "Etkö sinä käsitä, että kun nainen pitää niin rajattoman paljon jostakin miehestä kuin minä sinusta, niin tulee viimein hetki, jolloin tämän miehen täytyy tunnustaa nähneensä, minkä arvoinen tämä nainen on, tai vetäytyy hän muuten tuuma tuumalta syrjälle, — ja tulee lopuksi yhtä umpimieliseksi kuin mieskin." "Umpimielinen? — minäkö? — sinua kohtaan!" "Oh Börje, mitä olen minä saanut yhteistä nauttia sinun kanssasi? Minkätähden olet minun pitänyt erillä äidistäsi?" "Äidistänikö?" "Niin. — Minkätähden en minä saa pitää siitä, mistä sinäkin? Minkätähden en saa elää sinun elämääsi, ajatella sinun ajatuksiasi ja toivoa sinun toiveitasi? Minkätähden työnnät minut luotasi nyt, kun minä ihailen sinua enemmän kuin nuo kaikki toiset!" "Mutta ethän tiedä mitä sanot! Ihailla? Minua!" "Luuletko mun sokeaksi?" — Marianne sanoi tämän hiljaa, melkein pilkallisesti. Sillä nyt oli voitto saavutettu ja tuo intohimoinen mielenpurkaus mennyt. "Marianne —," sanoi Börje pitkän vaitiolon jälkeen, "tuntuu kuin minä olisin toinen ja sinä olisit toinen ihminen, kuin ensi kerran tavatessamme." "Niin, sillä sinä olit hyvin tyhmä, Börje, ja minä olin vielä paljoa tyhmempi," vastasi Marianne rakastettavalla suoruudella. * * * * *
  • 61. Koko viikon oli niin kiirettä, että he tuskin ennättivät vaihtaa sanaa keskenään. Pojalle piti saataman uudet vaatteet, puutarha perattaman, peltosaven-ajo pantaman alkuun ja kaikki laitettaman sille kannalle, että he voivat olla poissa muutamia päiviä. He eivät matkustaneet junalla, vaan omilla hevosilla ja vaunuilla. Ilma oli kaunis, ja siten kulettiin kuten tahdottiin. Matka oli ollut herttainen, — ylös aamulla aikaisin, ruokakori hyvästi varustettu, ja heti äsken lehdistyneessä pyökkimetsässä. Nyt oli tultu Börjen kotiseutuun. Hän tunsi kaikki tiet ja jokaisen talon ja selitti kaikki Mariannelle. Tapansa mukaan ajoi hän itse, ja Marianne istui hänen vieressään. Torsten istui äidin polvelle nojautuen tähän; hän oli nukkunut. Mariannen mieli oli kummallinen, melkein juhlallinen. Ja Börje oli itse puheliaisuus. Hän huomautti Mariannelle sukuröykkiöitä, joita oli neljä aina yhdessä rypeessä, hän näytteli vuorenhalennaisia, joista meri pilkoitteli, hän käski hänet syvään hengittämään, että tuntisi rehevää, voimakasta ilmaa, — Börjen kotiseudun ilmaa. "Pian olemme perillä, Marianne." "Mitähän äiti minusta pitää!" Marianne ei enää sanonut sinun äitisi. Börje huomasi sen, katsahti häneen ja hymyili. "Äiti osaa sekä nähdä että kuulla." "Oh, Börje, minä pelkään kuitenkin, — sinun tähtesi." — Hän siveli poskeansa Börjen olkapäähän.
  • 62. "Sinä!" Paljon tunnusti tämä yksi ainoa huudahdus. "Tuolla asui Paulin äiti," sanoi Börje ja näytti pientä huonetta tien vieressä hiljentäen vähä hevosien vauhtia. Paulin muistoon yhdistyneestä vastenmielisyydestä ei ollut enää mitään jälellä. Se oli hävinnyt, — poissa. Todellisuus oli sen syrjäyttänyt. "Ja tuo pieni talo punaisine seinineen, puitten takana, näetkös — tuolla noin — se on minun kotoni. Tuo valkea talo tuolla kauvempana on veljeni. — Kuinka olen iloinen, kun sinä olet täällä minun kanssani." Marianne irroitti ainoastaan toisen kätensä ja pisti sen miehensä käsivarrelle, ikäänkuin pitääksensä häntä oikein kiinni. "Minä takaan, että äiti odottaa," sanoi hän, "ahaa — tuollapa hän onkin!" Vaunut kääntyivät matalasta portista sisään ja seisahtuivat oven eteen. Yhdellä ainoalla silmäyksellä oli Marianne tarkastanut vieraan, joka tuossa seisoi auringon valossa ja kotikutoisissa vaatteissa suurine, raitaisine esiliinoineen. Börje ihka elävänä! Torstenista tuli isänsä äidin näköinen, eihän siis muuta voinut kuin pitää hänestä! Tämän molemminpuolisen tutkistelevan silmäyksen perästä hymyilivät molemmat naiset toisilleen, ennenkuin edes ennättivät tervehtiäkään.
  • 63. Börje hyppäsi maahan ja auttoi Mariannea alas, joka vielä piteli nukkuvaa poikaansa käsivarsillaan. Ja sitten seisoivat nuo kaksi kilpailijaa silmä vasten silmää, yhteisen suuren, lämpimän luottamuksen yhdistäminä. He olivat sen ymmärtäneet, lukeneet sen toisiensa silmistä. Siinä ei tarvittu yhtään sanoja. "Suudelkaa häntä ensin," sanoi Marianne katsoen poikaansa. Hänessä oli taikauskoinen luulo, että yhdysside tulisi siten vielä vahvemmaksi. Ja mummo suuteli tuota pientä, sulki sitten sekä hänen että Mariannen vahvoihin, oivallisiin käsivarsiinsa ja työnsi heidät oven sisäpuolelle. "Noh?" sanoi Börje hänelle riemuitsevin silmin. Hän seisahtui silmänräpäykseksi kynnykselle sitä sanoakseen, hän ei voinut odottaa. "Erinomainen ihminen," vastasi äiti ja pyyhkäisi esiliinansa kulmalla jotain silmistään, "etpä ainakaan liian aikaisin antanut minun häntä nähdä." Hänen äänessään oli aivan Börjen nyreätä hyväntahtoisuutta. "Hyväksi on teille ollut, että olette saaneet ikävöidä toisianne näin kauvan," sanoi Börje tehden pientä poikamaista kiusaa. "Niin kai, kyllä kai niin! — Minä olisin voinut kuolla sillä ajalla, en saanut nähdä häntä, enkä poikaakaan." "Vai niin, te olette ollut kärsimätön, äiti! — Eimaar, te elätte vielä monta vuotta ja näette vielä paljon, ennenkuin kuolette."
  • 64. "Minä en kuitenkaan voi nähdä mitään rakkaampaa. Kas niin, käykää sisään nyt!" Äiti työnsi hänet tupaan pienen, siivon etehisen kautta. "Parasta lienee antaa pikkuisen maata, kunnes herää itsestään," sanoi hän Mariannelle, "minä olen tämän sisäkamarin varustanut teitä varten. Minä olen tehnyt vuoteen pikkuiselle vaatekoriini; minä luulen sen olevan kylläksi suuren." Börje seisahtui tupaan ja molemmat naiset astuivat yhdessä sisähuoneesen, jossa Marianne laski perillisensä tälle määrätylle vuoteelle, joka huomattiin olevan vallan parahultainen. "Ah, äiti, eikö Börje ollut hyvin paha, kun antoi meidän odottaa näin kauvan, ennenkuin saimme nähdä toisemme?" sanoi Marianne tarttuen anoppimuorinsa käsiin ja katsoen suoraan rehellisiin Börje- silmiin. "Hänpä lie parhain tietänyt, mikä oli hyvä." Äidillisen ylpeyden mielestä oli Börje kaikkitietäväinen ja kaikkiviisas kuin itse sallimus. Börjestä oli päivä herttainen. Hän riippui kiinni kotona jokaisessa pikkuseikassa luonteensa koko yksipäisellä rakkaudella, joka vanhaa ja totuttua piti aina lemmellisessä muistossa. Hänestä oli hupaista kuljettaa Mariannea kaikkialla, näyttää hänelle kaikkea ja kertoa hänelle kaikesta: lapsuudestaan, äidistään, heidän jokapäiväisestä elämästään, Paulista; hevosista, joilla hän oli ajanut, koirista, joista hän oli pitänyt. Kävely tuntui oikein pyhiinvaellus-matkalta. Ja Marianne oppi tällä tarkastusretkellä tuntemaan hänen
  • 65. menneisyytensä, — itse "alku-Börjen," kuten hän nauraen miestänsä kutsui tässä tilaisuudessa — paremmin kuin jos Börje olisi kokonaisia päiviä kuluttanut kertomiseen. Ja äiti ruokki heitä skoonelaisilla, tukevilla ruokalajeilla, oluttakin oli hän ennättänyt panna, vaikka se vielä maistui vähä liian nuorelta. "Jestan poo! äiti luulee varmaankin joulun olevan kaksi kertaa tänä vuonna," sanoi Börje nauraen pöytään istuessaan. "Ei minulla ole mitään joulua ollut viimeisenä kahtena vuonna," sanoi äiti. Sydämellisin lämpö piileskeli hänen tylyäänisessä vastauksessaan. Hän mahtoi suuresti kaivata poikaansa näinä jouluina. "Mutta tänä vuonna tulette meille," sanoi Börje. "Sen teen, jos Jumala suo ja te sen tahdotte." Hän tunsi itsensä vielä vähä ujoksi Mariannen läsnäollessa, vaikka hän paljonkin hänestä piti. Salaisesti hymyillen huomasi Börje, että äiti aina karttoi Mariannen nimeä eikä kutsunut häntä sinuksi. Mutta sellainen kyllä menisi ohitse! Börje oli niin iloinen — niin sydämellisen iloinen. Äiti ja Marianne … sitä kelpasi istua ja katsella. Marianne arveli, ettei äidin tarvitsisi asua näin yksinään, näin kaukana Börjestä; voisihan hän muuttaa heidän luokseen, jossa Paulin sija vielä oli tyhjänä. "Siunatkoon, lapsi, sitä en koskaan tahdo!" vastasi vanhus melkein pelästyneenä, "nuoret osaavat kyllä pesää rakentaa yhtä hyvin kuin
  • 66. vanhatkin, vaan he rakentavat semmoisen, joka heille sopii, ja vanhat tekevät parhaiten, kun pysyvät paikallaan." Puolisen jälestä kulkivat Marianne ja Börje ympäri tupaa, jolla aikaa isoäiti istui ja ravitsi silmiään katselemalla oikein sydämen halusta pojanpoikaansa, joka käydä lylleröitsi ympäriinsä upo uudessa koltissaan. "Ja katsos! Tässä on raamattu, jonka kaltainen Börjelläkin on," huudahti Marianne iloisesti. "Kuinka hyvästi muistan, kun ensikerran kävin Tomtössä! Minä kysyin, oliko hänellä tapana lukea sitä. 'Ei,' sanoi hän, 'mutta äidillä on yhtäläinen'." Melkein huomaamaton hymy vetäytyi äidin kasvoille; hän ymmärsi poikaansa. "Niin, tuo on minun sauvani ja jalkojeni valo," sanoi hän sitten vakavasti, "minulla ei ole koskaan ollut parempaa turvaa." — Sitten katsahti hän Marianneen. — "Vaan minusta on saman tekevää, mitä te uskotte," lisän hän, "sillä meidän Herramme antaa teille kyllä sen uskon, jota te tarvitsette. Hän ymmärtää asian paremmin kuin minä." Tässä karkeassa, hyväntahtoisessa suoruudessa oli jotakin, joka Mariannea miellytti enemmän kuin kaikki hyväilyt. Siinä ilmautui vankkuutta, luottavaisuutta — ihan kaikkea. Kun illalla erottiin, saattoi vanhus vieraansa heidän makuusuojaansa. Pikkuinen uinahteli aivan makeasti korissaan.
  • 67. "Niin, nukkukaa nyt tekin hyvästi," sanoi hän. "Minä olen tehnyt pehmeän vuoteen sinulle, rakas poikani. Harvoinpa sinua täällä saa nähdä!" "Ja häntä!" "Niin; hauskaa oli nähdä teitä." Börje asetti kätensä eräälle vanhalle pulpetille. "Tässä, Marianne," sanoi hän, "tässä on minun muinainen minuuteni; tässä säilyttää äiti kaikki minun kirjeeni. "Niin, vallan totta!" huudahti vanhus ja pisti kätensä taskuunsa, "minä olen ajatellut … minä olen ajatellut, että Mariannea" — nimi ei tahtonut tulla hänen huuliltaan, — "minä tarkoitan, että häntä huvittaisi lukea sinun kirjeitäsi. Minä olen ne pannut järjestykseen numeron jälkeen." Hän veti avaimen esiin, jonka antoi Börjelle. Marianne ei voinut mitään sanoa. Tämmöinen menettely poikansa vaimoa kohtaan oli niin liikuttavan hienotunteinen, että Mariannella ei ollut sanaakaan sen varalle. Tätä oli ajatellut tuo sivistymätön talonpoikaisvaimo, — ajatellut ihan itsestään! He puristivat toisiensa käsiä. Ei yhtään tarpeettomia hellyyden osoituksia! Sellaiset eivät Börjen äitiä miellyttäneet, vaan he olivat ymmärtäneet toisensa, ja tässä oli se side, joka ei ollut katkeava. Kun Marianne oli jäänyt yksin Börjen kanssa, meni hän hänen luokseen. "Börje, kuinka voit sinä pitää minua kaikesta tästä erilläni ja luulla sen olevan parasta?"
  • 68. "Se oli hyödyllistä." "Mutta semmoista umpimielisyyttä!" "Semmoinen on minun luonteeni." "Kaikkiako kohtaan?" Marianne hymyili vähä. Yksi poikkeus oli ollut, — hän, joka nuo kirjeet oli saanut. "Minusta on ollut hauskaa nähdä sinua täällä, — tässä vanhassa keskuudessa, josta minä paljon pidän," sanoi hän, "sen täytyi sulaa yhteen nykyisen kanssa. Ja nyt se on tehty, rotko on täytetty. Tule istumaan, Marianne. Minä olen hävennyt olla se kuin olen, nyt ei ole laita enään niin." Hän talutti Mariannea vanhanaikaisilla patjoilla päällystetylle seinärahille istumaan, vaan tämä ottikin pienen jakkaran ja asettui vastapäätä miestänsä. Hän taisi näin paremmin katsella Börjeä kasvoihin istuessaan kyynäspäät tämän polvilla ja nojaten leukaansa käsiä vasten. "Kun on antanut parhaan, niin ei tarvitse säästää pikkumurusia," sanoi Marianne hymyillen, "kun olemme nyt puheisiin päässeet, niin sano mulle, mitä sinä teit kaupungissa niin usein; minä olen ollut hirmuisen utelias." Börje punehtui ensin, vaan rohkaisi sitten mielensä. "Minä olen lukenut kieliä," sanoi hän. "Huh, eipä se käynyt vallan voimien ylitse. Mutta kuinka minä pelkäsin sinun saavan siitä tietoa."
  • 69. "Miksikä sitten?" "Olihan ikäänkuin häpeällistä alkaa minun ijälläni vielä koulupojan tavoin; ja sitten minä pelkäsin, etten onnistuisi." "Sinun sydämesi on ylpeä — kuules! Se juuri tekee sinun niin umpimieliseksi. Sinä pelkäät, että sinun tarvitsee antaa perää jollekulle." "Ehkä. — Minä olen aina luullut olevani nöyrä. Minä olen aina ollut valmis tunnustamaan toisten etevämmyyttä; mutta minä olen asettunut sitä vastaan," sanoi hän miettien. "Sinä väitit eräänä iltana minun olevan kunnianhimoisen; minä olen sitä sittemmin ajatellut. En tiedä, onko se totta. Vaan sen tiedän, että minullakin on pyrintöjä ja että minäkin tahtoisin saada — niin, en tahdo sanoa valtaa, sillä en minä tahdo tulla huomatuksi, — mutta minä tahtoisin tuota, jonka avulla voi ikäänkuin ojentaa kättänsä ja tuntea niissä ohjakset. Sitä ehkä kutsutaan vaikutukseksi. Minä tunnen vaan kuin tahtoisin tämän käteni olemaan vahvan, — jäykän ja vahvan. Tahdon tuntea, etten ole tullut maailmaan saamatta mitään aikaan. Minä tahdon kokonaan täyttää minulle uskotun paikan, vaan minä en halua mitään muuta. Jos sitä kutsut kunnianhimoksi, niin olen kunnianhimoinen." "Ja se on jo hyvin vanhaa," jatkoi Börje tyynesti, "se on aina pyrkinyt eteenpäin. Vaan minä en ole ollut vapaa. Isä piteli rahoja, ja hänellä oli valta. Minun sisuni kuohuu, kun häntä ajattelen. Onko kellään oikeutta kukistaa ihmistä sillä tavalla ja pidättää häntä edistymästä, kuin hän teki minulle! — Ja niin on laita ollut — ahdistusta aina. Tuo tapaus viimeksi Paulin kanssa puhalsi tulen enemmän hehkumaan. Sillä silloin täytyi minun koko voimallani ryhtyä jonkun kimppuun, etten olisi tullut vallan hupsuksi. Minulla ei
  • 70. saanut olla aikaa tuntea mitään. Täytyi vaan vaientaa sydämensä ääntä, pitää ajatuksensa jänteessä, katsoa eteensä eikä taaksensa. Tuo kokonaan, tuo — eitä jotain semmoista saattoi tapahtua, — että minä olisin paljas nolla, tyhjyys, siinä oli nöyryytys semmoinen, että minä olisin voinut… Se oli potkaus, josta päästäkseni minun täytyi hankkia itselleni hyvitystä vaikka millä hinnalla! Sinä et voi uskoa, kuinka sellainen voi minua kiihottaa! Se on kuin oas, kuin kirveltävä tunne minun rinnassani, se ei anna minulle rauhaa yöllä eikä päivällä, vaan ajaa minua työhön. Kuinka toisenlainen Börje minä olen kuin se, jonka kanssa sinä olit yhdessä kaksi vuotta sitten! Ihmeellistä on nytkin katsella taaksensa. Ja ulkonaisesti, ehkei kuitenkaan näy mitään erotusta. — Mutta kirjeissä tuolla on koko kehityshistoria. Äiti on samaa puuta kuin minäkin; hän on ymmärtänyt minua." Marianne tunsi piston sydämessään. Niin, kuinka vaiherikas tämä kehitys mahtoi olla, arvasi hän nyt katsellessaan noita viisaita kasvoja joissa ankara hillitsemisvoima ja sitkeä into kuvastui joko juonteessa. "Yhtä ainoata en ole koskaan sanonut äidille. En koskaan selittänyt." Syntyi äänettömyys. "Sinä olit sanomaisillasi jotakin ennen, jonka johdosta olit kahdella päällä," sanoi Marianne. "Niin minä tahdon vastata erääseen toiseen kysymykseesi, jonka myös teit eräänä iltana: minkätähden kielsin heitä äänestämästä minua valtiopäivämieheksi. Niin, — näetkös — minä en ole valmis vielä. Minä en tahdo eritä tasaisesta työstäni. En nyt. Tilaa on
  • 71. kehitettävä. Taloudellisen kantani pitää olla sellaisen, ettei se estä minua, ja sitten … ja sitten täytyy minun nähdä vähän enemmän maailmaa. Sille ihmiselle, joka ei ole saanut muita tietoja kuin mitä hänen ikäänkuin keksillä on täytynyt haalia itselleen ilman toisten apua, ja jonka kehitys ihmisenä on suurimmaksi osaksi kirjaviisautta, sille ovat mielestäni matkat suurena oikotienä sivistykseen. Minussa on vastustamaton tiedonhalu. Minä olen aina kadehtinut Paulia. Minä tahdon myös päästä näkemään. Vaan minä katselen luullakseni toisilla silmillä kuin hän, ja minulla luullakseni on toisenlainen säästö kotiin tullessani kuin hänellä. Tahdotko tulla mukaan — Marianne? Tahdotko jakaa kanssani? Tahdotko, että olemme kahden kaikessa? — kahden katselemme ja käsitämme ja tuomitsemme ja luemme, — kahden autamme toisiamme kaikissa?" Vastausta ei tarvittu. Mariannen kädet olivat vaipuneet Börjen polville ja olivat ristissä siinä. Hänen silmänsä tähystelivät ulos avaruuteen, kuin olisi hän siellä nähnyt pitkän, aavan tulevaisuusmaiseman. Iloja ja suruja oli tuleva toisensa perästä vaihdellen, onnen rauhaa ja kovia aikoja. Sen hän nyt tiesi. Hänen elämänsä näyttäisi kuin muidenkin ihmisten; ei romantilliselta eikä satumaiselta, vaan todelliselta ja jokapäiväiseltä. Mutta Börje oli hänelle niin rakas, että hän olisi voinut laskeutua polvilleen hänen eteensä; olisi voinut painaa hänen käsiään silmilleen tuntiessaan itsensä ylenmäärin onnelliseksi hänen omanaan; hänen, ilon auringon paisteessa tai pimeinä hetkinä, hänen suuressa ja pienessä, — aina, kun he vaan rakastivat toisiansa.
  • 72. VIITESELITYKSET: [1] Mitä hyvää, miellyttävää ja onnellista on. [2] Paremmin voi yksinään kuin huonossa seurassa. [3] Englantilainen nimitys neitosten kunniaksi pidetylle puheelle. Suom. muist. [4] Iduna oli nuoruuden jumalatar pohj. jum.-tarustossa; hänellä oli kultaisia omenoita, jotka tekivät jumalat ikuisesti nuoriksi. Suom. muist. [5] Hyvänä ystävänä. [6] Sensitiva on kasvin nimi, joka vetää lehtensä kokoon, kun sitä koskee. Suom. muist. [7] Vanha toveri. [8] Älä koske minuun; erään kasvin nimi. Suom. muist. [9] Pygmalion oli sadun mukaan Kypron kuningas ja sen ohessa taitava kuvanveistäjä; hän teki, kun ei löytänyt ketään mieleistään tyttöä, naisen kuvan norsunluusta ja rakastui siihen niin, että pyysi
  • 73. sille henkeä rakkauden jumalalta Venukselta, joka hänen pyyntönsä täyttikin, jonka jälkeen hän otti tytön puolisokseen. Suom. muist. [10] Olkaa varuillanne, armaani!
  • 74. *** END OF THE PROJECT GUTENBERG EBOOK MARIANNE-ROUVA: ROMAANI *** Updated editions will replace the previous one—the old editions will be renamed. Creating the works from print editions not protected by U.S. copyright law means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without paying copyright royalties. Special rules, set forth in the General Terms of Use part of this license, apply to copying and distributing Project Gutenberg™ electronic works to protect the PROJECT GUTENBERG™ concept and trademark. Project Gutenberg is a registered trademark, and may not be used if you charge for an eBook, except by following the terms of the trademark license, including paying royalties for use of the Project Gutenberg trademark. If you do not charge anything for copies of this eBook, complying with the trademark license is very easy. You may use this eBook for nearly any purpose such as creation of derivative works, reports, performances and research. Project Gutenberg eBooks may be modified and printed and given away—you may do practically ANYTHING in the United States with eBooks not protected by U.S. copyright law. Redistribution is subject to the trademark license, especially commercial redistribution. START: FULL LICENSE
  • 75. THE FULL PROJECT GUTENBERG LICENSE
  • 76. PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK To protect the Project Gutenberg™ mission of promoting the free distribution of electronic works, by using or distributing this work (or any other work associated in any way with the phrase “Project Gutenberg”), you agree to comply with all the terms of the Full Project Gutenberg™ License available with this file or online at www.gutenberg.org/license. Section 1. General Terms of Use and Redistributing Project Gutenberg™ electronic works 1.A. By reading or using any part of this Project Gutenberg™ electronic work, you indicate that you have read, understand, agree to and accept all the terms of this license and intellectual property (trademark/copyright) agreement. If you do not agree to abide by all the terms of this agreement, you must cease using and return or destroy all copies of Project Gutenberg™ electronic works in your possession. If you paid a fee for obtaining a copy of or access to a Project Gutenberg™ electronic work and you do not agree to be bound by the terms of this agreement, you may obtain a refund from the person or entity to whom you paid the fee as set forth in paragraph 1.E.8. 1.B. “Project Gutenberg” is a registered trademark. It may only be used on or associated in any way with an electronic work by people who agree to be bound by the terms of this agreement. There are a few things that you can do with most Project Gutenberg™ electronic works even without complying with the full terms of this agreement. See paragraph 1.C below. There are a lot of things you can do with Project Gutenberg™ electronic works if you follow the terms of this agreement and help preserve free future access to Project Gutenberg™ electronic works. See paragraph 1.E below.
  • 77. 1.C. The Project Gutenberg Literary Archive Foundation (“the Foundation” or PGLAF), owns a compilation copyright in the collection of Project Gutenberg™ electronic works. Nearly all the individual works in the collection are in the public domain in the United States. If an individual work is unprotected by copyright law in the United States and you are located in the United States, we do not claim a right to prevent you from copying, distributing, performing, displaying or creating derivative works based on the work as long as all references to Project Gutenberg are removed. Of course, we hope that you will support the Project Gutenberg™ mission of promoting free access to electronic works by freely sharing Project Gutenberg™ works in compliance with the terms of this agreement for keeping the Project Gutenberg™ name associated with the work. You can easily comply with the terms of this agreement by keeping this work in the same format with its attached full Project Gutenberg™ License when you share it without charge with others. 1.D. The copyright laws of the place where you are located also govern what you can do with this work. Copyright laws in most countries are in a constant state of change. If you are outside the United States, check the laws of your country in addition to the terms of this agreement before downloading, copying, displaying, performing, distributing or creating derivative works based on this work or any other Project Gutenberg™ work. The Foundation makes no representations concerning the copyright status of any work in any country other than the United States. 1.E. Unless you have removed all references to Project Gutenberg: 1.E.1. The following sentence, with active links to, or other immediate access to, the full Project Gutenberg™ License must appear prominently whenever any copy of a Project Gutenberg™ work (any work on which the phrase “Project Gutenberg” appears, or with which the phrase “Project Gutenberg” is associated) is accessed, displayed, performed, viewed, copied or distributed:
  • 78. This eBook is for the use of anyone anywhere in the United States and most other parts of the world at no cost and with almost no restrictions whatsoever. You may copy it, give it away or re-use it under the terms of the Project Gutenberg License included with this eBook or online at www.gutenberg.org. If you are not located in the United States, you will have to check the laws of the country where you are located before using this eBook. 1.E.2. If an individual Project Gutenberg™ electronic work is derived from texts not protected by U.S. copyright law (does not contain a notice indicating that it is posted with permission of the copyright holder), the work can be copied and distributed to anyone in the United States without paying any fees or charges. If you are redistributing or providing access to a work with the phrase “Project Gutenberg” associated with or appearing on the work, you must comply either with the requirements of paragraphs 1.E.1 through 1.E.7 or obtain permission for the use of the work and the Project Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9. 1.E.3. If an individual Project Gutenberg™ electronic work is posted with the permission of the copyright holder, your use and distribution must comply with both paragraphs 1.E.1 through 1.E.7 and any additional terms imposed by the copyright holder. Additional terms will be linked to the Project Gutenberg™ License for all works posted with the permission of the copyright holder found at the beginning of this work. 1.E.4. Do not unlink or detach or remove the full Project Gutenberg™ License terms from this work, or any files containing a part of this work or any other work associated with Project Gutenberg™. 1.E.5. Do not copy, display, perform, distribute or redistribute this electronic work, or any part of this electronic work, without prominently displaying the sentence set forth in paragraph 1.E.1
  • 79. with active links or immediate access to the full terms of the Project Gutenberg™ License. 1.E.6. You may convert to and distribute this work in any binary, compressed, marked up, nonproprietary or proprietary form, including any word processing or hypertext form. However, if you provide access to or distribute copies of a Project Gutenberg™ work in a format other than “Plain Vanilla ASCII” or other format used in the official version posted on the official Project Gutenberg™ website (www.gutenberg.org), you must, at no additional cost, fee or expense to the user, provide a copy, a means of exporting a copy, or a means of obtaining a copy upon request, of the work in its original “Plain Vanilla ASCII” or other form. Any alternate format must include the full Project Gutenberg™ License as specified in paragraph 1.E.1. 1.E.7. Do not charge a fee for access to, viewing, displaying, performing, copying or distributing any Project Gutenberg™ works unless you comply with paragraph 1.E.8 or 1.E.9. 1.E.8. You may charge a reasonable fee for copies of or providing access to or distributing Project Gutenberg™ electronic works provided that: • You pay a royalty fee of 20% of the gross profits you derive from the use of Project Gutenberg™ works calculated using the method you already use to calculate your applicable taxes. The fee is owed to the owner of the Project Gutenberg™ trademark, but he has agreed to donate royalties under this paragraph to the Project Gutenberg Literary Archive Foundation. Royalty payments must be paid within 60 days following each date on which you prepare (or are legally required to prepare) your periodic tax returns. Royalty payments should be clearly marked as such and sent to the Project Gutenberg Literary Archive Foundation at the address specified in Section 4, “Information
  • 80. about donations to the Project Gutenberg Literary Archive Foundation.” • You provide a full refund of any money paid by a user who notifies you in writing (or by e-mail) within 30 days of receipt that s/he does not agree to the terms of the full Project Gutenberg™ License. You must require such a user to return or destroy all copies of the works possessed in a physical medium and discontinue all use of and all access to other copies of Project Gutenberg™ works. • You provide, in accordance with paragraph 1.F.3, a full refund of any money paid for a work or a replacement copy, if a defect in the electronic work is discovered and reported to you within 90 days of receipt of the work. • You comply with all other terms of this agreement for free distribution of Project Gutenberg™ works. 1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™ electronic work or group of works on different terms than are set forth in this agreement, you must obtain permission in writing from the Project Gutenberg Literary Archive Foundation, the manager of the Project Gutenberg™ trademark. Contact the Foundation as set forth in Section 3 below. 1.F. 1.F.1. Project Gutenberg volunteers and employees expend considerable effort to identify, do copyright research on, transcribe and proofread works not protected by U.S. copyright law in creating the Project Gutenberg™ collection. Despite these efforts, Project Gutenberg™ electronic works, and the medium on which they may be stored, may contain “Defects,” such as, but not limited to, incomplete, inaccurate or corrupt data, transcription errors, a copyright or other intellectual property infringement, a defective or
  • 81. damaged disk or other medium, a computer virus, or computer codes that damage or cannot be read by your equipment. 1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the “Right of Replacement or Refund” described in paragraph 1.F.3, the Project Gutenberg Literary Archive Foundation, the owner of the Project Gutenberg™ trademark, and any other party distributing a Project Gutenberg™ electronic work under this agreement, disclaim all liability to you for damages, costs and expenses, including legal fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE. 1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a defect in this electronic work within 90 days of receiving it, you can receive a refund of the money (if any) you paid for it by sending a written explanation to the person you received the work from. If you received the work on a physical medium, you must return the medium with your written explanation. The person or entity that provided you with the defective work may elect to provide a replacement copy in lieu of a refund. If you received the work electronically, the person or entity providing it to you may choose to give you a second opportunity to receive the work electronically in lieu of a refund. If the second copy is also defective, you may demand a refund in writing without further opportunities to fix the problem. 1.F.4. Except for the limited right of replacement or refund set forth in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
  • 82. INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PURPOSE. 1.F.5. Some states do not allow disclaimers of certain implied warranties or the exclusion or limitation of certain types of damages. If any disclaimer or limitation set forth in this agreement violates the law of the state applicable to this agreement, the agreement shall be interpreted to make the maximum disclaimer or limitation permitted by the applicable state law. The invalidity or unenforceability of any provision of this agreement shall not void the remaining provisions. 1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the trademark owner, any agent or employee of the Foundation, anyone providing copies of Project Gutenberg™ electronic works in accordance with this agreement, and any volunteers associated with the production, promotion and distribution of Project Gutenberg™ electronic works, harmless from all liability, costs and expenses, including legal fees, that arise directly or indirectly from any of the following which you do or cause to occur: (a) distribution of this or any Project Gutenberg™ work, (b) alteration, modification, or additions or deletions to any Project Gutenberg™ work, and (c) any Defect you cause. Section 2. Information about the Mission of Project Gutenberg™ Project Gutenberg™ is synonymous with the free distribution of electronic works in formats readable by the widest variety of computers including obsolete, old, middle-aged and new computers. It exists because of the efforts of hundreds of volunteers and donations from people in all walks of life. Volunteers and financial support to provide volunteers with the assistance they need are critical to reaching Project Gutenberg™’s goals and ensuring that the Project Gutenberg™ collection will
  • 83. remain freely available for generations to come. In 2001, the Project Gutenberg Literary Archive Foundation was created to provide a secure and permanent future for Project Gutenberg™ and future generations. To learn more about the Project Gutenberg Literary Archive Foundation and how your efforts and donations can help, see Sections 3 and 4 and the Foundation information page at www.gutenberg.org. Section 3. Information about the Project Gutenberg Literary Archive Foundation The Project Gutenberg Literary Archive Foundation is a non-profit 501(c)(3) educational corporation organized under the laws of the state of Mississippi and granted tax exempt status by the Internal Revenue Service. The Foundation’s EIN or federal tax identification number is 64-6221541. Contributions to the Project Gutenberg Literary Archive Foundation are tax deductible to the full extent permitted by U.S. federal laws and your state’s laws. The Foundation’s business office is located at 809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up to date contact information can be found at the Foundation’s website and official page at www.gutenberg.org/contact Section 4. Information about Donations to the Project Gutenberg Literary Archive Foundation Project Gutenberg™ depends upon and cannot survive without widespread public support and donations to carry out its mission of increasing the number of public domain and licensed works that can be freely distributed in machine-readable form accessible by the widest array of equipment including outdated equipment. Many
  • 84. small donations ($1 to $5,000) are particularly important to maintaining tax exempt status with the IRS. The Foundation is committed to complying with the laws regulating charities and charitable donations in all 50 states of the United States. Compliance requirements are not uniform and it takes a considerable effort, much paperwork and many fees to meet and keep up with these requirements. We do not solicit donations in locations where we have not received written confirmation of compliance. To SEND DONATIONS or determine the status of compliance for any particular state visit www.gutenberg.org/donate. While we cannot and do not solicit contributions from states where we have not met the solicitation requirements, we know of no prohibition against accepting unsolicited donations from donors in such states who approach us with offers to donate. International donations are gratefully accepted, but we cannot make any statements concerning tax treatment of donations received from outside the United States. U.S. laws alone swamp our small staff. Please check the Project Gutenberg web pages for current donation methods and addresses. Donations are accepted in a number of other ways including checks, online payments and credit card donations. To donate, please visit: www.gutenberg.org/donate. Section 5. General Information About Project Gutenberg™ electronic works Professor Michael S. Hart was the originator of the Project Gutenberg™ concept of a library of electronic works that could be freely shared with anyone. For forty years, he produced and distributed Project Gutenberg™ eBooks with only a loose network of volunteer support.
  • 85. Project Gutenberg™ eBooks are often created from several printed editions, all of which are confirmed as not protected by copyright in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. Most people start at our website which has the main PG search facility: www.gutenberg.org. This website includes information about Project Gutenberg™, including how to make donations to the Project Gutenberg Literary Archive Foundation, how to help produce our new eBooks, and how to subscribe to our email newsletter to hear about new eBooks.
  • 86. Welcome to our website – the perfect destination for book lovers and knowledge seekers. We believe that every book holds a new world, offering opportunities for learning, discovery, and personal growth. That’s why we are dedicated to bringing you a diverse collection of books, ranging from classic literature and specialized publications to self-development guides and children's books. More than just a book-buying platform, we strive to be a bridge connecting you with timeless cultural and intellectual values. With an elegant, user-friendly interface and a smart search system, you can quickly find the books that best suit your interests. Additionally, our special promotions and home delivery services help you save time and fully enjoy the joy of reading. Join us on a journey of knowledge exploration, passion nurturing, and personal growth every day! ebookbell.com