March 2007 - Posts
I have been asked this week for a performance comparison between WCF and other distributed communication technologies, and I didn't have any.
Luckily, today, a new MSDN article called: A Performance Comparison of Windows Communication Foundation (WCF) with Existing Distributed Communication Technologies was published, and gives me the information I need.
The article concludes that:
"When migrating distributed applications written with ASP.NET Web Services, WSE, .NET Enterprise Services and .NET Remoting to WCF, the performance is at least comparable to the other existing Microsoft distributed communication technologies. In most cases, the performance is significantly better for WCF over the other existing technologies. Another important characteristic of WCF is that the throughput performance is inherently scalable from a uni processor to quad processor.
To summarize the results, WCF is 25%—50% faster than ASP.NET Web Services, and approximately 25% faster than .NET Remoting. Comparison with .NET Enterprise Service is load dependant, as in one case WCF is nearly 100% faster but in another scenario it is nearly 25% slower. For WSE 2.0/3.0 implementations, migrating them to WCF will obviously provide the most significant performance gains of almost 4x."
Additionally, many people ask me about the performance of Windows Workflow Foundation. Back in November I posted a link to another MSDN article that discusses this and point some very interesting considerations.
Enjoy!
In the last couple of days I gave a few WF sessions. The audience had a good time and went away with valuable knowledge about WF.
You can find the slide decks and demos from those sessions in my presentations page.
If you have any feedback about the sessions, I'd like to have it.
Enjoy!
The Data Programmability Team has been working hard to get some new data tools into the next version of Visual Studio "Orcas" in order to increase developers productivity and help to adapt the new features that will ship in this version like ADO.Net Entity Framework.
They have put together some short screencasts that show their work, and present the new tools:
XML Editor (watch the screencast)
- Create schemas from a Xml file in one click inside the IDE.
- Relate a new Xml file to existing schema and generate a default instance,
- Enable Intellisense for editing Xml file that was related to a schema.
- Instant validation for the Xml file as you type.
Xslt Debugger (watch the screencast)
- Automatic display of the results of a sample Xml file being transformed.
- Set breakpoint into an Xslt file or the input Xml file and start debugging
- Watch the result file as it being created by the transformation
Xsd Designer (watch the screencast)
- Navigate and work with the new Xml Schema Explorer pane in Visual Studio.
- Search for items in the Schema Explorer and navigate to them in the schema file
- Show most likely root elements
- Sort and filter the schema display and navigate easily
EDM Wizard (watch the screencast)
- Generate an Entity Data Model from a database, import SP's, tables and views
- Generate an Object Model based on the data objects imported by the wizard.
EDM Designer (watch the screencast)
- Work with the Database Designer and interact with the Entity Modeler
- Manage changes in the database and sync with the Entity Model and mapping.
I can't wait to get my hands on those tools (still not available in the latest Orcas CTP).
Enjoy!
I have just received the message telling me that the WF session planed for TODAY, was postponed to an unknown date. On behalf of Microsoft I am very sorry for the last minute notice, and I hope to see you in this session when we reschedule. You can still catch me today at HP Raanana in the Israeli Architects User Group.
I will post here the new date for the Premier Customers session.
If you missed my Windows Workflow Foundation session at the Microsoft Developers Academy, and you don't want to see the video, you have a chance to catch it this week:
See you there!
The slide decks are already available for download in My Presentations Page.
Enjoy!
Windows Workflow Foundation (WF) vs. Biztalk Server?
Many customers tend to ask about the relation between WF and Biztalk Server. Is WF the next version of Biztalk Server? Will the WF Rule Engine replace the Biztalk BRE (Business Rules Engine)? Typically, people are looking for guidelines or the appropriate questions to answer in order to make the right decision.
The main difference between Biztalk Server and WF is that Biztalk is a product for BPM (Business Process Management) and EAI (Enterprise Application Integration), which comes with a price. WF is a framework for developers to build solutions on top of.
As a product, Biztalk Server consists of some layers / components that help it to do its job. One of them is the Orchestration Layer which is similar to WF. In fact, Biztalk Server vNext will replace the Orchestration Layer with WF. For the rest of the layers, there are no similar components in WF. For instance, if you want to build a business process that talk to several systems / platforms, WF has no out-of-the-box adapters for it, and developers will have to build them on their own. Also, there is not Transformation Layer in WF. WF receives .net objects as parameters and not XML Messages, and therefore doesn’t have to transform schemas. I can only assume that in the future there will be a Transform Activity that will execute an Xslt, but today, customer will have to develop that.
The Monitoring and Administration Layer is not covered by WF. Although we have the Tracking Service which allows us to pull data out of the process and save it wherever we wish, but we do not have an administration and monitoring applications such as Biztalk Server BAM, and we will have to work hard to get there.
For the Business Rules Engine – there are many differences between the WF Rules Engine and the Biztalk BRE, from the Vocabulary that BRE has, and up to the algorithm that is used to execute the rules. Each of the approaches has its pros and cons, and I don't know what will happen with both of them in the next version of Biztalk Server.
Few questions you have to ask yourself in order to compare between Windows Workflow Foundation (WF) vs. Biztalk Server:
- Do I need to work with other systems / platforms? Can I benefit from using Biztalk Adapters?
- Do I need to change the message structure / schema? Can Biztalk Mapper help me doing it?
- Do I want my solution to be able to scale out? WF runs In-Process and has threads limitations as a .Net application, while Biztalk is a very scalable deployable solution.
- Do I need very complex administration and monitoring capabilities? Is the WF Tracking Service fine for what I need?
These questions can give you a good place to start with when you have to choose between WF and Biztalk Server. But, the fact that you answered "Yes" on all of them doesn't automatically mean that you have to buy Biztalk. Sometimes the price you'll pay developing solutions will be cheaper than buying Biztalk Server.
The final decision doesn’t have to be choosing between those two. You can definitely decide that the best thing for you is to choose them both. In those cases, processes that are internal for your system (i.e. no integration with other systems / platform), that do not require advanced administration, but do required high performance, will be implemented using WF, while integration scenarios will use Biztalk Server.
I hope you find it useful, and if you have some more guidelines, please comment.
Enjoy!
Add ExternalDataExchangeService by Config - ExternalDataExchangeServiceSection
It is very easy to use configuration file in order to configure the runtime services that will be added to the workflow runtime when it starts: You should create a configuration section, and add the services.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="WorkflowRuntime"
type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>
<WorkflowRuntime Name="MyApplication">
<Services>
<add type="System.Workflow.Runtime.Hosting.DefaultWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add type="..." />
</Services>
</WorkflowRuntime>
</configuration>
With ExternalDataExchangeService it is a different story. ExternalDataExchangeService, as with the WorkflowRuntime contains a list of services in it. So, how can one configure it with its services in the configuration file?
First Approach
One approach is not to add ExternalDataExchangeService as one of the services in the configuration file. Then, when added with code, to supply the configuration section that lists its services:
1. Define the configuration section in the top of the configuration file, and add the services to the ExternalDataExchangeService.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="WorkflowRuntime"
type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="ExternalDataExchangeServices"
type="System.Workflow.Activities.ExternalDataExchangeServiceSection, System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>
<WorkflowRuntime Name="MyApplication">
<Services>
<add type="System.Workflow.Runtime.Hosting.DefaultWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</Services>
</WorkflowRuntime>
<ExternalDataExchangeServices>
<Services>
<add type="Bursteg.Samples.WF.Services.EvaluationService, Bursteg.Samples.WF.Services" />
</Services>
</ExternalDataExchangeServices>
...
</configuration>
Notice that the list of runtime services does not include the ExternalDataExchangeService.
2. Using code, add the ExternalDataExchangeService and supply the name of the configuration section:
ExternalDataExchangeService dataService =
new ExternalDataExchangeService("ExternalDataExchangeServices");
workflowRuntime.AddService(dataService);
Second Approach
What I don't like about the above approach is that is involves both code and configuration. Although it is sometimes useful, I prefer doing it all by code or doing it all by configuration.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="WorkflowRuntime"
type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="ExternalDataExchangeServices"
type="System.Workflow.Activities.ExternalDataExchangeServiceSection, System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>
<WorkflowRuntime Name="MyApplication">
<Services>
<add type="System.Workflow.Runtime.Hosting.DefaultWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add type="System.Workflow.Activities.ExternalDataExchangeService, System.Workflow.Activities, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ConfigurationSection="ExternalDataExchangeServices"/>
</Services>
</WorkflowRuntime>
<ExternalDataExchangeServices>
<Services>
<add type="Bursteg.Samples.WF.Services.EvaluationService, Bursteg.Samples.WF.Services" />
</Services>
</ExternalDataExchangeServices>
...
</configuration>
Notice here that the ExternalDataExchangeService is added as one of the runtime services in the configuration file, and supplies the configuration section name as one of the parameters.
Enjoy!
Back in February, Paul Andrew (Technical Product Manager of WF) has announced that this march we will have the first CTP of BPEL (Business Process Execution Language) activities for WF. Earlier today, March CTP of BPEL Activities became available for download.
The plan is that WF and Biztalk Server vNext (Built on top of WF) will implement OASIS BPEL 2.0 standard, but in the meanwhile the March CTP implements BPEL for Web Services Version 1.1.
From the download page:
"BPEL for Windows Workflow Foundation (WF) is an add on for Windows Workflow Foundation in the .NET Framework 3.0. BPEL is the Business Process Execution Language and this download is an unsupported Community Technology Preview (CTP) for using this technology with WF. The download, which is aimed at software developers, provides import and export tools for BPEL and includes WF activities representing BPEL for the WF designer in Visual Studio 2005.
Developers using Visual Studio 2005 can benefit from the WF designer for the modification of BPEL workflows."
Enjoy!
מכירים את התמונה הזאת שכשיש הפסקת חשמל אז יושבים בבית עם נרות ומדברים? אומרים שאיזה מזל שיש לנו טלפון פשוט שלא מחובר לחשמל...
היום הרגשתי ממש ככה. החל משעה 16:00 בערך לא הייתי מחובר לאינטרנט (בגלל הנפילה של בזק בינלאומי) והרגשתי כאילו אני מנותק מכל העולם!
לא רחוק היום שחיבור לאינטרנט יהיה אחד השירותים שכל בית מתחבר אליהם, בדיוק כמו מים, חשמל וטלפון, ואז באמת המושג "הפסקת אינטרנט" יתפוס... תזכרו מי המציא אותו ...
איך היתה לכם ההפסקה?
פוסט זה הוא פוסט המשך בסדרה "טיפים וטריקים: כתיבת פוסטים באתר הבלוגים".
אחרי שהחלטת מי קהל היעד של הבלוג שלך, והחלטת באיזו שפה אתה מתכוון לכתוב, רצוי לבחור Theme מתאים. עבור עברית יש באתר הבלוגים מספר Themes ייעודיים לכתיבה בעברית.
אבל, למרות שבעת כתיבת הפוסט והפרסום שלו, הכל נראה בסדר, הבעיה מתגלה דווקא אצל מי שמנוי על ה- RSS Feed של הבלוג שלכם, וזה נראה ככה:

אז גם אם השתמשתם ב Theme בעברית, וגם אם הבלוג שלכם הוא אנגלי והחלטתם לכתוב בעברית מדי פעם, חשוב לבצע את הפעולה הבאה:
בעת עריכת הפוסט שלכם (לא משנה אם דרך האתר, דרך Windows Live Writer או כל עורך אחר), עברו לתצוגת ה- HTML שלו, ועטפו את הפוסט בתג div המגדיר קריאה מימין לשמאל:
<div align=right dir=rtl>
Your post HTML comes here...
</div>
ואז, דרך ה- RSS, זה יראה
ככה.
פוסט זה הוא פוסט המשך בסדרה "טיפים וטריקים: כתיבת פוסטים באתר הבלוגים".
בלי להכנס לחשיבות של לשים תמונות בפוסטים שאתה כותב (פוסט שלם יוקדש לנושא הזה מאוחר יותר), חשוב לדעת איך לעשות את זה.
היכרות עם הגלריה
כשאתה מחוברים (Signed In) לאתר, גש לבלוג שלך ומשם ל- Dashboard. שים לב לכפתורים העליונים המאפשרים לך גישה לבלוגים שאתה מנהל (לרוב אחד), לגלוריות וספרייות הקבצים שלך. אם תכנס לגלריה שלך, תראה מסך כזה:
במסך זה תוכל לראות כמה מקום ניצלת מתוך שטח הגלריה שהוקצה לך (20Mb~), כמה תמונות סה"כ העלית, מהי התמונה האחרונה וכו'. מעל לפרטי הגלריה תמצא כפתור המאפשר לך לבחור איזו גלריה לנהל (במידה ויש לך יותר מגלריה אחת). מצד שמאל יש את סרגל הכלים לניהול הגלריה:
תחת Settings, במסך Title and Description תוכל להגדיר את שם הגלריה שלך. באופן ראשוני השם הוא שם היוזר שלך / שם הבלוג, אבל ניתן להפוך אותה לשם משמעותי יותר (איך היית רוצה שגוגל יציג את הגלריה שלך בתוצאות החיפוש?). בנוסף תוכל להגדיר שם תיאור, ותיאור Meta data שיעזור לגוגל לאנדקס אותה.
תחת Manage Contents תוכל לנהל את ה- Tags / Keywords בדומה לניהול התגיות בבלוג. חשוב לדעת שאין התאמה בין רשימת התגיות בבלוג לבין רשימת התגיות בגלריה, והאתר לא מייצר לך אוטומטית את התגיות מהבלוג גם בגלריה.
אם תכנס ל All Photos (תחת Manage Contents), תראה את רשימת כל התמונות בגלר השלך. לכל תמונה, תראה Preview, מספר הפעמים שצפו בתמונה הזאת (גם אם זה דרך הפוסט שבו היא מופיעה), ותהיה לך אפשרות לעדכן את הפרטים של התמונה / למחוק וכו'. הכפתור האחרון (Referrals) יציג לך את הקישורים לתמונה הזאת.
הוספת תמונה חדשה
מלבד היכולת לסנן את הרשימה ע"פ התגיות שיצרת קודם, תוכל להוסיף תמונות חדשות (ניתן גם להוסיף תמונה חדשה דרך Common Tasks -> Publish New Photo).העלאת תמונה מאד מזכירה פרסום פוסט בבלוג: יש כותרת, תיאור, ניתן לקשר תגיות וניתן גם לתת שם לדף שיכיל את התמונה (בטאב Options).
כדי להעלות את התמונה, יש ללחוץ על Upload Photo, לבחור את התמונה מהמחשב שלך, לתת כותרת (אופציונאלי) ולשמור.
הוספת התמונה לפוסט
מתוך הגלריה ניתן להכנס ולהסתכל על כל תמונה, ולראות את הגדלים שקיימים לתמונה (בעת שמירת התמונה נוצרים מספר עותקים שלה בכל מיני גדלים). ניתן לבחור את הגודל המתאים, להסתכל כמובן, אבל יותר חשוב להעתיק את ה- Shortcut אליו.
כעת, בעת כתיבת פוסט, ניתן להשתמש בלחצן הוספת התמונה, להזין את ה- URL המלא או היחסי לתמונה וזהו.
התהליך נראה קצת מסובך? נכון. בשביל זה כדאי לעבור ל- Windows Live Writer... :)
If you missed my Windows Workflow Foundation session at the Microsoft Developers Academy, and you don't want to see the video, you have a chance to catch it this month:
Description of the session:
Do you like playing with Lego? Want to learn how to play Advanced Lego? If you do – Don't miss this talk! Windows Workflow Foundation let you build business processes using smart Lego bricks! In this session, learn when and where to use WF and how to take it to places you never thought it can get! Learn how to use WF advanced techniques and see how you can apply sophisticated behavior with the Business Rules Engine. You'll walk away with insight into the power of workflows within a line-of-business application.
וגם בעברית:
אוהב לשחק בלגו? רוצה ללמוד "לגו מתקדם" ? אם כן – אל תרשה לעצמך לפספס את ההרצאה הזאת!
Windows Workflow Foundation מאפשרת לך להרכיב תהליכים עסקיים באמצעות אבני לגו חכמות! בוא ללמוד מתי ואיך כדאי להשתמש בטכנולוגיה ואיך ניתן לקחת אותה למקומות שלא חשבת שניתן! בוא לראות איך לבנות Custom Activities מתקדמים, ואיך להשתמש במנוע חוקים העסקיים ע"מ לתת לאפליקציה שלך התנהגות מתוחכמת. מההרצאה הזאת תצא עם תובנות משמעותיות לגבי השימוש ב- Windows Workflow Foundation.
See you there...
Enjoy!
Oracle LINQ, Entity Framework Support
Although Microsoft has 2 events dedicated for data providers writers, Oracle has no support, nor roadmap to support LINQ and ADO.Net Entity Framework. As Christian Shay (Product Manager in the .NET and Windows group at Oracle) says, this is a feature they are considering for a future release...
Too bad...
Enjoy!
פוסט זה הוא פוסט המשך בסדרה "טיפים וטריקים: כתיבת פוסטים באתר הבלוגים".
כשהתחלתי לכתוב בבלוג שלי, פרסמתי את הפוסט הראשון, וחיכיתי שבוע עד שגוגל יבצע Index וימצא אותי. כעבור כמה ימים חיפשתי את השם שלי בגוגל ואמנם מצאתי, אבל הופתעתי לגלות שלא הייתי התוצאה הראשונה שנמצאה. מסתבר שיש עוד כמה Guy Burstein שפזורים להם בעולם וגוגל החליט לשים אותם לפני...
לגוגל יש אלגוריתם בשם PageRank שקובע ציון עבור כל דף שהוא מבצע לו אינדקס. בלי להכנס לפרטים טכניים מדי לגבי איך האלגוריתם עובד, הרעיון בגדול הוא שאתר מקבל רייטינג גבוה יותר ככל שיותר אתרים מצביעים עליו (מכילים אליו לינקים). כמובן שלא כל ההצבעות שוות משקל – אם דף שהציון שלו גבוה מצביע על דף כלשהו, אז הוא יקבל יותר ניקוד מאשר אם אתר אנונימי יצביע עליו.
מסקנה – כדי שהבלוג שלך יקבל רייטינג גבוה, יש לדאוג להרבה אתרים "כבדים" שיצביעו עליו. ואז כשמישהו יחפש פיתרון לבעיה שהוא נתקל בה ובין היתר הבלוג שלך מכיל את הפיתרון, הרי שהוא יוצב בתוצאות החיפוש במקום יותר גבוה. כנ"ל לגבי חיפוש השם שלך. קורה לי הרבה פעמים שאני שומע איזה שם ואני מחפש עליו (אפילו יש על זה פועל רשמי באנגלית – To Google someone), אני מצפה למצוא את הבלוג שלו במקום הראשון.
אז מה עושים? דבר ראשון, כדאי לך לשנות את השם של הבלוג שלך לשם משמעותי, למשל - שיכיל את השם שלך. כנסו ל- Dashboard, תחת Global Settings לכו ל- Title Description and News ותנו Title מתאים.
לאחר מכן, דואגים להשאיר הפניות לבלוג שלכם מכל מיני אתרים חשובים (Domains אחרים). זה אומר Comments בבלוגים אחרים, כתיבת הודעות בפורומים וחתימה עם השם שלכם + לינק לבלוג. טוקבקים באתרי חדשות, User ב- Linked In ו... אין גבול לדמיון.
מדי פעם יש "התקפה" על אתר הבלוגים, ופתאום מקבלים עשרות Comments לפוסטים שמכילים בסה"כ לינקים לכל מיני אתרים מפוקפקים. המטרה היא פשוט לזכות ברייטינג נוסף.
מה לא עושים בשביל הרייטינג?
בהצלחה!
הכותרת היא החלק החשוב היותר בפוסט שלך!
פוסט זה הוא פוסט המשך בסדרה "טיפים וטריקים: כתיבת פוסטים באתר הבלוגים".
תחשבו על הפעם האחרונה שקיבלתם מייל שהנושא שלו היה: "ענק!!! חובה רמקולים! לשמוע עד הסוף!". אני אישית זורק ישר את המיילים האלה, אבל לכל אחד יש את התגובה המיידית קבועה למיילים מהסוג הזה.
כנ"ל גם לגבי פוסטים בבלוגים.
אם קהל היעד של הבלוג שלך הם ה"קוראים הסדרתיים", כמו קוראי עמוד הבית של אתר הבלוגים או קוראי ה- RSS Feed שלו, הדבר הראשון שהם רואים הוא כותרת הפוסט שלך. רק אם הכותרת מספיק מושכת, הקורא יכנס פנימה לתוך הפוסט. דוגמא טובה לכותרת שמושכת את העין היא:
Windows Vista 100% working Keygen של תמיר חסון, ובאופן כללי הכותרות בבלוג של ליאור צורף (סחתיין ליאור!).
אם הבלוג שלך הוא טכני, וקהל היעד שלך הוא בין היתר אנשים שיגיעו אליו דרך מנועי חיפוש, העצה הטובה ביותר שאני יכול לתת היא לתת לפוסטים את השם שיקל על מציאת הפוסטים שלך במנוע החיפוש. למשל "תהליך התקנת ויסטה" (חפשו בגוגל) הוא שם מצויין. דוגמא נוספת היא ציטוט של טקסט ה- Exception שקיבלת. הרי אם אתה קיבלת Exception שהטקסט שלו הוא:
"Resolver must be specified. The default resolver (PNRP) is not available." (חפשו בגוגל) תיעדת את הפיתרון בפוסט, ונתת לו שם טוב, סביר להניח שמחר מישהו אחר יחפש בדיוק את אותה שגיאה וימצא את הפוסט שלך. דוגמא טובה נוספת היא שימוש בכמה שיותר מילות חיפוש בכותרת הפוסט. אם מעניין אותך ללמוד על שימוש ב- BDC כאשר מחברים בין MOSS ל- CRM, ותחפש את 3 המילים האלה בגוגל, נחש לאן תגיע...
אני בחרתי להשתמש בטיפ הזה בין היתר כשאני מתחיל ללמוד טכנולוגיה חדשה. אני יודע שאני דבר ראשון מחפש את המחרוזת
Getting Started with XXX במטרה למצוא חומרים רלוונטים, לכן סביר להניח שהפוסט הראשון שלי בכל טכנולוגיה יקרא כך לטובת הבאים אחרי.
אני חושב שזה אחד הטיפים החשובים ביותר שאני יכול לתת בנושא כתיבת פוסטים. לי לקח הרבה זמן להגיע למסקנה הזאת, וזה רק אחרי שהבנתי מה דרך הפעולה שלי בתור מי שקורא הרבה בלוגים באופן סדרתי, וגם מבלה הרבה זמן בחיפוש חומרים ותשובות באינטרנט.
בהצלחה!
More Posts
Next page »