Distributed NET Programming in C 1st Edition Tom Barnaby (Auth.) pdf download
Distributed NET Programming in C 1st Edition Tom Barnaby (Auth.) pdf download
https://ebookname.com/product/distributed-net-programming-
in-c-1st-edition-tom-barnaby-auth/
https://ebookname.com/product/beginning-net-game-programming-in-
vb-net-1st-edition-david-weller/
https://ebookname.com/product/u-x-l-american-
decades-1920-1929-1920-29-edition-tom-pendergast/
https://ebookname.com/product/visual-basic-net-programming-1st-
edition-harold-davis/
https://ebookname.com/product/henry-viii-and-history-1st-edition-
thomas-betteridge/
Biomimetics Nature Based Innovation 1st Edition Yoseph
Bar-Cohen (Author)
https://ebookname.com/product/biomimetics-nature-based-
innovation-1st-edition-yoseph-bar-cohen-author/
https://ebookname.com/product/death-revisited-the-excavation-of-
three-bronze-age-barrows-and-surrounding-landscape-at-apeldoorn-
wieselseweg-1st-edition-arjan-louwen/
https://ebookname.com/product/introduction-to-pharmacology-2ed-
edition-hollinger-m-a/
https://ebookname.com/product/alone-together-robert-b-edgerton/
https://ebookname.com/product/cambodia-2008-7th-edition-nick-ray/
The Germanic Languages 1 Blg Edition Wayne Harbert
https://ebookname.com/product/the-germanic-languages-1-blg-
edition-wayne-harbert/
Distributed .NET
Programming in C#
10M BARNABY
Ali rights reserved. No part of this work may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording, or by any information
storage or retrieval system, without the prior written permission ofthe copyright owner and the
publisher.
ISBN 978-1-59059-039-3 ISBN 978-1-4302-1107-5 (eBook)
DOI 10.1007/978-1-4302-1107-5
Trademarked names may appear in this book. Rather than use a trademark symbol with every
occurrence of a trademarked name, we use the names only in an editorial fashion and to the
benefit ofthe trademark owner, with no intention ofinfringement ofthe trademark.
Technical Reviewer: Gordon Wilmot
Editorial Directors: Dan Appleman, Peter Blackburn, Gary Cornell, Jason Gilmore,
Karen Watterson, John Zukowski
Managing Editor: Grace Wong
Project Manager: Alexa Stuart
Copy Editor: Ami Knox
Production Editor: Kari Brooks
Compositor: Susan Glinert Stevens
Artist: Cara Brunk, Blue Mud Productions
Indexer: Valerie Robbins
Cover Designer: Kurt Krames
Manufacturing Manager: Tom Debolski
Marketing Manager: Stephanie Rodriguez
The information in this book is distributed onan "as is" basis, without warranty. Although every
precaution has been taken in the preparation ofthis work, neither the author nor Apress shall
have any liability to any person or entity with respect to any loss or damage caused or alleged to
be caused directly or indirectly by the information contained in this work.
To my Mom and Dad,
who had no idea what they were starting
when they bought me a
TI-99/4A computer almost 20 years ago.
Or did they?
Contents at a Glance
Foreword .................................................................................................................. xv
About the Author .............................................................................................. xvii
About the Technical Reviewer .................................................................. xix
Acknowledgments ................................................................................................. xxi
Introduction and AFAQ
(Anticipated Frequently Asked Questions) ........................................ xxiii
Chapter 1 The Evolution of Distributed Programming ................. 1
Chapter 2 This Is •NET ............................................................................ 27
Chapter 3 Introduction to . NET Remoting ....................................... 91
Chapter 4 Distributed Programming with .NET Remoting ........ 119
Chapter 5 Additional Remoting Techniques ................................... 175
Chapter 6 Understanding XML Web Services ................................... 237
Chapter 7 Understanding COM Interop ............................................. 273
Chapter 8 Leveraging Component Services ..................................... 289
Chapter 9 •NET Message Queuing ........................................................ 357
Appendix Data Access with ADO. NET.................................................. 395
Index ........................................................................................................................ 469
v
Contents
Foreword ................................................................................................................ xv
vii
Contents
viii
Contents
Serialization ...................................................................................................... 84
Using the Serializable Attribute ........................................................................ 85
ISerializable and Formatters ............................................................................. 87
Summary ................................................................................................................... 89
X
Contents
xi
Contents
xii
Contents
xiii
Foreword
COM ON A WIRE, also known as DCOM, was a great boon to the distributed pro-
grammer. Under the model ofDCOM, a client was able to interact with COM objects
located literally anywhere, without requiring a change of code base. Using the indi-
rection provided by AppiDs, stubs, proxies, and channels, our distributed endeavors
involved little more than the use of declarative tools such as dcomcnfg.exe and the
Component Services snap-in. However, all was not well in the world ofDCOM (or
COM for that matter). Although the clicking of check boxes made COM-based
remoting appear quite simple on the surface, we suffered through numerous registry
conflicts, a lifetime of passing interface pointers by reference, and the dreaded
prospect of crossing firewalls.
Just as ADO.NET has nothing to do with classic ADO, the .NET Remoting story
has nothing to do with classic DCOM. The most obvious case in point is the fact
that .NET assemblies are not registered with the system registry. Given this, we
have no AppiD. Without an AppiD, we have no RemoteServerName value, which
means no reference to oleaut32.dll and thus no more COM-based stub and proxies.
In short, everything we knew about interacting with types across the wire has
changed dramatically.
Under .NET, we are provided with dozens of new remoting constructs. Not only
do we need to contend with numerous TLAs (three-letter acronyms) such as WKO,
CAO, and the like, but we are also required to be content with new spins on existing
ideas (for example, the distinction between "real" versus "transparent" proxies) as
well as the role ofXML configuration files.
Many programmers who are faced with the task of learning the story of .NET
distributed programming turn to MSDN. Here, they are confronted with numerous
code examples, partial white papers, and diagrams that require a 21-inch monitor
to view in their entirety. This approach is bound to lead to frustration and a dis-
jointed knowledge base. What is sorely needed is a practical, approachable, and in-
depth treatment of how all of these new technologies fit together in the context of
an Enterprise application.
Tom's latest book (the one currently in your grasp) provides such a treatment.
Here, you will find logical and clear explanations that (surprise, surprise) actually
provide insight to the richness of the .NET Remoting layer. Not only does Tom
pound out the gory details of this suite of new TLAs, but he also rounds out your
understanding by providing coverage of numerous related Enterprise-centric tech-
nologies such as building configured components (a.k.a. COM+), .NET messaging,
Web services, and interoperability with classic COM types.
XV
Foreword
For a number of years now, Tom and I have worked together here at Intertech,
Inc. (http: I /www. intertech- inc. com). I have witnessed him teach numerous courses
on the topics of classic COM and .NET (including his Expert Distributed .NET
class). I have also had the pleasure to work with him on numerous development
efforts. I can speak from the heart when I say you are in good hands.
Enjoy!
Andrew Troelsen
Partner and Trainer, Intertech, Inc.
Minneapolis, MN
xvi
About the Author
xvii
About the
Technical Reviewer
xix
Acknowledgments
WRITING A BOOK is by far the hardest thing I have ever done. Yet it would have been
completely impossible if I didn't have the help and support of the following folks:
Thanks to everyone at Apress. Gary Cornell, for taking a chance on me, a
complete unknown wishing to write about a hot topic. Ami "Damn Yer Good"
Knox, for being even more analytical than I in regards to writing. Grace Wong and
Kari Brooks for keeping the great wheels of book production churning even ifl was
burning (out). And a huge thanks to Alexa Stuart, who somehow kept this project
running smoothly in spite of me. Finally thanks to Peter Blackburn.
Thanks to my technical editor, Gordon Wilmot, who not only provided great
feedback, but also a tremendous amount of encouragement.
Thanks to Kelly Kari for proofreading several chapters. But more importantly,
thanks for actually laughing at my attempts at humor scattered throughout.
Thanks to everyone at Intertech. I feel privileged to work for a company filled with
such talented and dedicated individuals. Thanks to all my cohorts, Steve Close (Java is
toast), Gina Accawi (XML is just a big string), and Andrew "Gunnar" Sondgeroth (see
Steve Close) for providing a challenging, fun, and invigorating work environment.
Special thanks to Andrew Troelsen for contributing an appendix, and whose, urn,
unique brand of encouragement ultimately lead to this book. Finally, thanks to
Tom Salonek, founder of Intertech, for somehow tolerating the bizarre antics of us
admitted prima donnas.
Thanks to Rabi, my cat, for keeping my shoulders warm while I worked.
Finally, and most important of all, many, many thanks to my wife Tammy and son
Max. Nobody sacrificed more for the sake of this book. I will be forever grateful.
xxi
Introduction and AFAO..
(Anticipated Frequently
Asked Questions)
THE SUBJECT OF DISTRIBUTED PROGRAMMING is vast. To implement distributed appli-
cations properly, you must understand everything from low-level networking
details to high -level architectural issues .. NET is a brand new platform deserving of
several thousand pages of documentation. So the challenge I faced when writing
this book was this: how do I combine these two immense subjects into a single,
digestible volume?
My answer: I don't. In other words, I had to make assumptions regarding the
level of experience of the reader, which is tough given that .NET is such a new tech-
nology. Even harder, though, I had to make difficult decisions about what the book
would and would not be. On a few issues I was resolute. The book would not be a
regurgitation of documentation. The book would not be a thousand-page boat
anchor covering dozens of subjects and none of them well.
Rather than list other things this book is not, however, I want to discuss what
this book is. I think of it as a guided tour through the fundamental technologies you
use to build distributed applications with .NET, such as .NET Remoting, Web services,
serialization, COM+, and MSMQ. These technologies are the tools we developers
use to craft distributed applications. And they are complex enough in themselves
to warrant in-depth examination. The focus, then, is on the use of each technology
and the role it plays in a distributed application. Think of it as pulling each tool out
of the box, examining it, and experimenting with it to get a sense of the problems it
can solve. Like any craft, distributed programming is best learned by doing, but
wherever possible I discuss the pros and cons of using one tool over another.
In an attempt to set the proper expectations (and to head off some angry e-mails),
I've compiled the following list of anticipated questions.
xxiii
Introduction and AFAQ (Anticipated Frequently Asked Questions)
xxiv
Introduction and AFAQ (Anticipated Frequently Asked Questions)
reason to repeat the fine work Microsoft has done to document every option of
every tool, every method of every class, every parameter of every method, and so
on. I do, however, see the need for a book that leads the reader through a logical
progression of topics while clarifying complex concepts. I also wanted to produce a
book that was beach-bag friendly-that is, a book you could carry around in your
briefcase, backpack, laptop case, or beach bag without breaking your back. Hope-
fully, this book meets these goals.
XXV
CHAPTER 1
The Evolution of
Distributed Programming
"It's like, how much more black can this be?
and the answer is none. None more black."
-Nigel Thfnel (This Is Spinal Tap)
speaking on the state of software development.
1
Chapter 1
programming is this: if one computer can complete a task in 5 seconds, then five
computers working together in parallel should complete the task in 1 second.
Of course, it is never quite that easy. The problem is the phrase "working
together in parallel." It is difficult to get five computers on a network to cooperate
efficiently. In fact, the application software must be specifically designed for this to
be effective. As an analogy, consider a single horse pulling a carriage. A horse is a
powerful animal, but, in terms of power-to-weight ratios, an ant is many times
stronger (we will just assume ten times stronger). So, if I gather and harness
enough ants to equal the mass of the horse, I can move ten times the amount of
material in the carriage. A perfect example of distributing the workload, right? The
calculations are reasonable, but hopefully you are chuckling at the ludicrous
vision of millions of ants with tiny harnesses pulling together.
Layering an Application
As demonstrated with the horse-vs.-ant analogy, distributed computing raises the
issue of coordinating the work of several computers. There is also the issue of
decomposing the application into tasks that can be distributed. Luckily, here you
can draw on the lessons learned from earlier applications. Over the years, it has
become clear that most business applications consist of three primary sets of
logic: presentation, business, and data source.
• Presentation logic. This is the part of the application that the end users use
to enter orders, look up customer information, and view business reports.
To the user, this is the application.
• Business logic. This is the heart of the application and where developers
spend most of their time and effort. It contains the business rules that
define the way the business is run. For example, business rules specify when
customers receive discounts, how shipping costs are calculated, and what
information is required on an order.
• Data source logic. This is where orders, customer information, and other
facts are saved for future reference. Luckily, database products such as SQL
Server and Oracle take care of most of the work. But you still have to design
the data layout and the queries you will use to retrieve the data.
2
The Evolution of Distributed Programming
This may seem like a surprising principle for a book about distributed programming.
However, this principle is based on a simple, undeniable fact of computing:
invoking a method on an object in a different process is hundreds of times slower
than doing the same on an in-process object. Move the object to another machine
on a network, and the method call can be another ten times slower.
So when should you distribute? The trite answer is only when you have to. But
you are probably looking for a little more detail, so let's consider a few examples,
starting with the database layer. Typically an application's database runs on a separate,
dedicated server-in other words, it is distributed relative to the other layers.
There are several good reasons for this:
• A database can contain and relate data shared by many applications. This is
only possible, however, if each application server is accessing a single
database server, rather than their own local copy.
• Databases are designed to run as a separate physical layer. They expose the
ultimate "chunky" interface: the Structured Query Language (SQL). (See
Principle 3 for details on chunky interfaces.)
3
Chapter 1
Therefore, the decision to distribute the data source logic is typically made the
moment you decide to use a database. However, the decision to distribute the pre-
sentation logic is a little more complex. First of all, unless all the application users
walk up to a common terminal (like an ATM), then some aspect of the presentation
layer must be distributed to each user. The question is how much. The trend lately,
of course, is to execute the bulk of the logic on the server and send simple HTML to
client Web browsers. This is actually in keeping with the principle to distribute
sparingly. However, it also requires each user interaction to travel to the server so
that it can generate the appropriate response.
Before the proliferation of the Web, it was more common to execute the entire
presentation logic on each client machine (in keeping with Principle 2). This pro-
vides faster interaction with the user since it minimizes round trips to the server,
but also requires user interface updates to be deployed throughout the user base.
In the end, the choice of which client you use has little to do with distributed
design principles, and everything to do with the desired user experience and
deployment issues.
So the data logic almost always executes on a separate computer, and the pre-
sentation layer frequently does. That leaves us with the business layer, and the
most complex set of issues. Sometimes, the business layer is deployed to each
client. Other times it is kept on the server. In many cases, the business layer itself is
decomposed into two or more components. Those components related to user
interface interaction are deployed to the client, and those related to data access
are retained on the server. This holds to the next principle, which is to localize
related concerns.
As you can see, you have many distribution options. When, why, and how you
distribute is driven by a variety offactors-many of which compete. So the next
few principles offer further guidelines.
4
The Evolution of Distributed Programming
will easily eclipse any parallel processing gains. Multiply this by a few thousands
users, and you have a scenario that can devastate performance. Relating this to the
earlier horse and carriage analogy, this is the equivalent of harnessing each leg of
the horse rather than the entire horse.
Machine 1
Machine 4
Add product to cart
Gatabasj
So how can you leverage the power of distributed programming, namely par-
allel processing, while still localizing related concerns? Buy another horse. That is,
duplicate the entire application and run it on another dedicated server. You can
use load balancing to route each client request to a particular server. This archi-
tecture is shown in Figure 1-2. Web-based applications often use this model by
hosting the identical Web site on several Web servers, a setup sometimes referred
to as a Web farm .
Duplicating and load balancing application servers is a great way to increase
the capacity, or scale, of an application. You do need to very conscious, however, of
how you manage state. For more details, see Principle 4.
5
Another Random Document on
Scribd Without Any Related Topics
imaginings, when the intense stillness around him was broken by the
peals of distant convent bells, ringing with silvery clearness through
the evening calm.
Suddenly Otto paused, all his life-blood rushing to his heart.
At the lofty flight of stairs, by which the descent is made from
Ara Coeli, stood Stephania.
She had come out of the venerable church, filled with the
devout impressions of the mass just recited. The chant still rang in
her ears as she passed down the long line of uneven pillars, which
we see to-day, and across the sculptured tombs set in the pavement
which the reverential tread of millions has worn to smooth
indistinctness. Now the last rays of the sun flooded all about her,
mellowing the tints of verdure and drooping foliage, and softening
the outlines of the Alban hills.
As she looked down she saw the German king and met his
upturned gaze. For a moment she seemed to hesitate. The sunlight
fell on her pale face and touched with fire the dark splendour of her
hair. Slowly she descended the long flight of stairs.
They faced each other in silence and Otto had leisure to steal a
closer look at her. He was struck by the touch of awe which had
suddenly come upon her beauty. Perhaps the evening light
spiritualized her pure and lofty countenance, for as Otto looked upon
her it seemed to him that she was transformed into a being beyond
earthly contact and his heart sank with a sense of her remoteness.
Timidly he lifted her hand and pressed his lips upon it.
Silence intervened, a silence freighted with the weight of
suspended destinies. There was indeed more to be felt between
them, than to be said. But what mattered it, so the hour was theirs?
The narrow kingdom of to-day is better worth ruling than the widest
sweep of past and future, but not more than once does man hold its
fugitive sceptre. Otto felt the nearness of that penetrating sympathy,
which is almost a gift of divination. The mere thought of her had
seemed to fill the air with her presence.
Steadily, searchingly, she gazed at the thoughtful and earnest
countenance of Otto, then she spoke with a touch of domineering
haughtiness:
"Why are you here?"
He met her gaze eye in eye.
"I was planning for the future of Rome,—and dreaming of the
past."
She bent her proud head, partly in acknowledgment of his
words, partly to conceal her own confusion.
"The past is buried," she replied coldly, "and the future dark and
uncertain."
"And why may it not be mine,—to revive that past?"
"No sunrise can revive that which has died in the sunset glow."
"Then you too despair of Rome ever being more than a memory
of her dead self?"
She looked at him amusedly.
"I am living in the world—not in a dream."
Otto pointed to the Capitoline hill.
"Yet see how beautiful it is, this Rome of the past!" he spoke
with repressed enthusiasm. "Is it not worth braving the dangers of
the avalanches that threaten to crush rider and horse—even the
wrath of your countrymen, who see in us but unbidden, unwelcome
invaders? Ah! Little do they know the magic which draws us hither to
their sunny shores from the gloom of our Northern forests! Little
they know the transformation this land of flowers works on the
frozen heart, that yearns for your glowing, sun-tinted vales!"
"Why did you come to Rome?" she questioned curtly. "To remind
us of these trifles,—and incidentally to dispossess us of our time-
honoured rights and power?"
Otto shook his head.
"I came not to Rome to deprive the Romans of their own,—
rather to restore to them what they have almost forgotten—their
glorious past."
"It is useless to remind those who do not wish to be reminded,"
she replied. "The avalanche of centuries has long buried memory
and ambition in those you are pleased to call Romans. Desist, I beg
of you, to pursue a phantom which will for ever elude you, and
return beyond the Alps to your native land!"
"And Stephania prefers this request?" Otto faltered, turning
pale.
"Stephania—the consort of the Senator of Rome."
There was a pause.
Through the overhanging branches glimmered the pale disk of
the moon. A soft breeze stirred the leaves of the trees. There was a
hushed breathlessness in the air. Fantastic, dream-like, light and
shadows played on the majestic tide of the Tiber, and all over the
high summits of the hills mysterious shapes, formed of purple and
gray mists, rose up and crept softly downward, winding in and out
the valleys, like wandering spirits, sent on some hidden, sorrowful
errand.
Gazing up wistfully, Stephania saw the look of pain in Otto's
face.
"I ask what I have," she said softly, "because I know the temper
of my countrymen."
"What would you make of me?" he replied. "On this alone my
heart is set. Take it from me,—I would drift an aimless barque on
the tide of time."
She shook her head but avoided his gaze.
"You aim to accomplish the impossible. Crows do not feed on
the living, and the dead do not rise again. Ah! How, if your miracle
does not succeed?"
Otto drew himself up to his full height.
"Gloria Victis,—but before my doom, I shall prove worthy of
myself."
Suddenly a strange thought came over him.
"Stephania," he faltered, "what do you want with me?"
"I want you to be frankly my foe," exclaimed the beautiful wife
of Crescentius. "You must not pass by like this, without telling me
that you are. You speak of a past. Sometimes I think it were better,
if there had been no past. Better burn a corpse than leave it
unburied. All the friends of my dreams are here,—their shades
surround us,—in their company one grows afraid as among the
shroudless dead. It is impossible. You cannot mean the annihilation
of the past, you cannot mean to be against Rome—against me!"
Otto faced her, pale and silent, vainly striving to speak. He
dared not trust himself. As he stepped back, she clutched his arm.
"Tell me that you are my enemy," she said, with heart-broken
challenge in her voice.
"Stephania!"
"Tell me that you hate me."
"Stephania—why do you ask it?"
"To justify my own ends," she replied. Then she covered her
face with her hands.
"Tell me all," she sobbed. "I must know all. Do you not feel how
near we are? Are you indeed afraid to speak?"
She gazed at him with moist, glorious eyes.
Striding up and down before the woman, Otto vainly groped for
words.
"Otto," she approached him gently, "do you believe in me?"
"Can you ask?"
"Wholly?"
"What do you mean?"
"I thought,—feared,—that you suffered from the same malady
as we Romans."
"What malady?"
"Distrust."
There was a pause.
"The temple is beautiful in the moonlight," Stephania said at
last. "They tell me you like relics of the olden time. Shall we go
there?"
Otto's heart beat heavily as by her side he strode down the
narrow path. They approached a little ruined temple, which ivy had
invaded and overrun. Fragments lay about in the deep grass. A
single column only remained standing and its lonely capital, clear cut
as the petals of a lily, was outlined in clear silhouette against the
limpid azure.
At last he spoke—with a voice low and unsteady.
"Be not too hard on me, Stephania, for my love of the world
that lies dead around us. I scarcely can explain it to you. The old
simple things stir strange chords within me. I love the evening more
than the morning, autumn better than spring. I love all that is
fleeting, even the perfume of flowers that have faded, the pleasant
melancholy, the golden fairy-twilight. Remembrance has more power
over my soul than hope."
"Tell me more," Stephania whispered, her head leaning back
against the column and a smile playing round her lips. "Tell me
more. These are indeed strange sounds to my ear. I scarcely know if
I understand them."
He gazed upon her with burning eyes.
"No—no! Why more empty dreams, that can never be?"
She pointed in silence to the entrance of the temple.
Otto held out both hands, to assist her in descending the
sloping rock. She appeared nervous and uncertain of foot. Hurriedly
and agitated, anxious to gain the entrance she slipped and nearly
fell. In the next moment she was caught up in his arms and clasped
passionately to his heart.
"Stephania—Stephania," he whispered, "I love you—I love you!
Away with every restraint! Let them slay me, if they will, by every
death my falsehood deserves,—but let it be here,—here at your
feet."
Stephania trembled like an aspen in his strong embrace, and
strove to release herself, but he pressed her more closely to him,
scarcely knowing that he did so, but feeling that he held the world,
life, happiness and salvation in this beautiful Roman. His brain was in
a whirl; everything seemed blotted out,—there was no universe, no
existence, no ambition, nothing but love,—love,—love,—beating
through every fibre of his frame.
The woman was very pale.
Timidly she lifted her head. He gazed at her in speechless
suspense; he saw as in a vision the pure radiance of her face, the
star-like eyes shining more and more closely into his. Then came a
touch, soft and sweet as a rose-leaf pressed against his lips and for
one moment he remembered nothing. Like Paris of old, he was
caught up in a cloud of blinding gold, not knowing which was earth,
which heaven.
For a moment nothing was to be heard, save the hard breathing
of these two, then Otto held Stephania off at an arm's length, gazing
at her, his soul in his eyes.
"You are more beautiful than the angels," he whispered.
"The fallen angels," was her smiling reply.
Then with a quick, spontaneous movement she flung her bare
arms round his neck and drew him toward her.
"And if I did come toward you to prophesy glory and the
fulfilment of your dreams?" she murmured, even as a sibyl. "You
alone are alive among the dead! What matters it to me that your
love is hopeless, that our wings are seared? My love is all for the
rejected! I love the proud and solitary eagle better than the stained
vulture."
He felt the fire of the strange insatiate kiss of her lips and
reeled. It seemed as if the Goddess of Love in the translucence of
the moon, had descended, embracing him, mocking to scorn the
anguish that consumed his heart, but to vanish again in the lunar
shadows.
"Stephania—" he murmured reeling, drunk with the sweetness
of her lips.
Never perhaps had the beautiful Roman bestowed on mortal
man such a glance, as now beamed from her eyes upon the youth.
The perfume of her hair intoxicated his senses. Her breath was on
his cheek, her sweet lips scarce a hand's breath from his own.
Had Lucifer, the prince of darkness, himself appeared at this
moment, or Crescentius started up like a ghost from the gaping
stone floor, Stephania could scarcely have changed as suddenly as
she did, to the cold impassive rigidity of marble. Following the
direction of her stony gaze, Otto beheld emerging as it were from
the very rocks above him a dark face and mailed figure, which he
recognized as Eckhardt's. Whether or not the Margrave was
conscious of having thus unwittingly interrupted an interview,—if he
had seen, his own instincts at once revealed to him the danger of his
position. Eckhardt's countenance wore an expression of utter
unconcern, as he passed on and vanished in the darkness.
For a moment Otto and Stephania gazed after his retreating
form.
"He has seen nothing," Otto reassured her.
"To-morrow," she replied, "we meet here again at the hour of
the Angelas. And then," she added changing her tone to one of
deepest tenderness, "I will test your love,—your constancy,—your
loyalty."
They faced each other in a dead silence.
"Do not go," he faltered, extending his hands.
She slowly placed her own in them. It was a moment upon
which hung the fate of two lives. Otto felt her weakness in her look,
in the touch of her hands, which shivered, as they lay in his, as
captive birds. And the long smothered cry leaped forth from his
heart: What was crown, life, glory—without love! Why not throw it
all away for a caress of that hand? What mattered all else?
But the woman became strong as he grew weak.
"Go!" she said faintly. "Farewell,—till to-morrow."
He dropped her hands, his eyes in hers.
Giving one glance backward, where Eckhardt had disappeared,
Stephania first began to move with hesitating steps, then seized by
an irresistible panic, she gathered up her trailing robe and ran
precipitately up the steep path, her fleeting form soon disappearing
in the moonlight.
Otto remained another moment, then he too stepped out into
the clear moonlit night. In silent rumination he continued his way
toward the Aventine.
Past and future seemed alike to have vanished for him. Time
seemed to have come to a stand-still.
Suddenly he imagined that a shadow stealthily crossed his path.
He paused, turned—but there was no one.
Calmly the stars looked down upon him from the azure vault of
heaven.
And like a spider in his web, Johannes Crescentius sat in Castel
San Angelo.
CHAPTER VIII
THE GOTHIC TOWER
CHAPTER X
THE TEMPLE OF NEPTUNE
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookname.com