<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8389214606941174691</id><updated>2012-02-02T13:32:15.618-08:00</updated><category term='toolkit'/><category term='xaml'/><category term='tools'/><category term='solution'/><category term='Windows Backup'/><category term='bugs'/><category term='bug'/><category term='free'/><category term='annotations'/><category term='Impromptu 6'/><category term='nview'/><category term='SQLXML 3'/><category term='cs'/><category term='test'/><category term='Code'/><category term='WF'/><category term='make'/><category term='Hell'/><category term='Windows Server 2008 R2'/><category term='nhiberate'/><category term='ASP.net configuration'/><category term='configuration'/><category term='variant'/><category term='mess'/><category term='tips'/><category term='ORM'/><category term='installer'/><category term='com library'/><category term='performance'/><category term='eclipse'/><category term='compensations'/><category term='glitches'/><category term='takeown'/><category term='do not use'/><category term='Services'/><category term='PDC 2008'/><category term='Windows Vista'/><category term='XSLT'/><category term='xsd'/><category term='Dynamic datatype'/><category term='walkthrough'/><category term='envdte'/><category term='DLL'/><category term='SP1'/><category term='Mediawiki'/><category term='Problems'/><category term='indigo'/><category term='Entity Framework 4'/><category term='Development'/><category term='try'/><category term='crap'/><category term='visual studio 2005'/><category term='IIS 6'/><category term='errors'/><category term='NHibernate'/><category term='fix'/><category term='IIS7'/><category term='C# 4'/><category term='64Bit'/><category term='Windows Server 2003'/><category term='error'/><category term='setup'/><category term='designer'/><category term='mail'/><category term='Microsoft'/><category term='disadvantages'/><category term='GetProperty(T)'/><category term='debugging'/><category term='converter'/><category term='delete files'/><category term='IT'/><category term='.Net'/><category term='windows communication foundation'/><category term='change'/><category term='runtime binding'/><category term='icacls'/><category term='wsdl'/><category term='WCF Data Services'/><category term='Oracle'/><category term='SOA'/><category term='ackward'/><category term='mingw'/><category term='Universal installer'/><category term='download'/><category term='Profiler'/><category term='exception handling'/><category term='exhausted'/><category term='IronXSLT'/><category term='Windows Workflow'/><category term='enterprise'/><category term='cogdmor.ini'/><category term='XSLCompiledTransform'/><category term='comments'/><category term='Team Edition'/><category term='XSLT 2'/><category term='Injection'/><category term='HOWTO'/><category term='svcutil'/><category term='catch'/><category term='tricks'/><category term='visual studio 2008'/><category term='ANTS'/><category term='shared heap'/><category term='must have'/><category term='cygwin'/><category term='finally'/><category term='error 9009'/><category term='experience'/><category term='Windows Workflow 4'/><category term='Attempted to read or write protected memory'/><category term='UDDI'/><category term='config'/><category term='vb'/><category term='C#'/><category term='costs'/><category term='pass arrays'/><category term='E-Mail'/><category term='Oracle 10'/><category term='cdt'/><category term='WCF'/><category term='bluescreen'/><category term='visual studio 2010'/><category term='http://tempuri.org/'/><category term='Cognos'/><category term='Silverlight'/><category term='binding'/><title type='text'>Tech Talk</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-5716654373766676395</id><published>2011-08-18T15:55:00.000-07:00</published><updated>2011-08-19T09:40:31.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mingw'/><category scheme='http://www.blogger.com/atom/ns#' term='cdt'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='make'/><category scheme='http://www.blogger.com/atom/ns#' term='fix'/><title type='text'>How to fix Cygwin (make)</title><content type='html'>If you are using Eclipse on Windows, CDT and Cygwin you might see funny meaningful errors like:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;make: *** target pattern contains no `%'.&amp;nbsp; Stop.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;make: *** multiple target patterns.&amp;nbsp; Stop.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some of them occur only after the second build, others pop up continuously. &lt;br /&gt;&lt;br /&gt;This is most likely happening due to the fact that Cygwin &lt;i&gt;make &lt;/i&gt;is broken with the current 3.81 release.&lt;br /&gt;&lt;br /&gt;After wasting many hours I came to &lt;a href="http://www.cygwin.com/ml/cygwin-announce/2006-07/msg00008.html"&gt;this announcement&lt;/a&gt; dating to &lt;b&gt;9 Jul 2006&lt;/b&gt; related to make 3.81 from Christopher Faylor from Redhat on the Cygwin announce list:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Note that the --win32 command line option and "MAKE_MODE" environment&lt;br /&gt;variable are no longer supported in Cygwin's make.  If you need to use a&lt;br /&gt;Makefile which contains MS-DOS path names, then please use a MinGW&lt;br /&gt;version of make.&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Cygwin"&gt;Wikipedia describes Cygwin&lt;/a&gt;&amp;nbsp; as:&lt;br /&gt;&lt;br /&gt;"Unix-like environment and command-line interface for &lt;span style="font-size: small;"&gt;&lt;b&gt;Microsoft Windows&lt;/b&gt;&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;In other this means that the make for Windows lacks Windows support.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This raises the following question:&lt;br /&gt;&lt;br /&gt;Which user of&amp;nbsp; the Unix-like environment and command-line interface for &lt;span style="font-size: small;"&gt;&lt;b&gt;Microsoft Windows&lt;/b&gt;&lt;/span&gt;. would ever miss the support&amp;nbsp; for MS-DOS aka &lt;span style="font-size: small;"&gt;&lt;b&gt;Windows&lt;/b&gt;&lt;/span&gt; path names in the 2 most important development tool besides gcc?&lt;br /&gt;&lt;br /&gt;I hope Chris is not thinking about shipping the next  Redhat distro with a make that does not support Unix style path names. I mean this is fast way to increase your number of "fans" on Facebook but............&lt;br /&gt;&lt;br /&gt;At least he is not only breaking it but also pointing in the right direction:&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;See: &lt;a href="http://mingw.org/"&gt;http://mingw.org/&lt;/a&gt; for details on downloading a version of make&lt;br /&gt;which understands MS-DOS path names.  Please! direct any questions about&lt;br /&gt;the MinGW version of make to the appropriate MinGW mailing list.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/mingw/files/MinGW/make/mingw32-make-3.80-3/mingw32-make-3.80.0-3.exe/download"&gt;Here you can download a version of mingw make&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I installs by default to C:\MinGW\bin\mingw32-make.exe&lt;br /&gt;&lt;br /&gt;Then I just copied it to my cygwin\bin directory. After doing the only reasonable thing with the cygwin make, in other words deleting it, I just renamed mingw32-make.exe to make.exe and since then everything builds fine.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Robert Walker also pointed out that he offers &lt;a href="http://sites.rwalker.com/cygwin/"&gt;some packages for download &lt;/a&gt;that contain all the necessary fixes.I tried 3.82-1 and its just works fine. Thanks!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-5716654373766676395?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/5716654373766676395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=5716654373766676395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5716654373766676395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5716654373766676395'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2011/08/how-to-fix-cygwin-make.html' title='How to fix Cygwin (make)'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-5871498220051337258</id><published>2010-08-17T07:28:00.000-07:00</published><updated>2010-08-17T07:56:04.293-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='com library'/><category scheme='http://www.blogger.com/atom/ns#' term='envdte'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2010'/><title type='text'>Visual Studio 2010 COM-Interface Bugfest</title><content type='html'>"EnvDTE is an assembly-wrapped COM library containing the objects and members for Visual Studio core automation."&lt;br /&gt;&lt;br /&gt;But unfortunately the implementation the the VS 2010 RTM version the library is pretty much unusable. Some methods like EnvDTE.Project.Delete() are not even implemented.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/TGqf4WqVHdI/AAAAAAAAAJo/W-kXWckLAyk/s1600/envdte_project_delete_notimplemented_exception.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 117px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/TGqf4WqVHdI/AAAAAAAAAJo/W-kXWckLAyk/s400/envdte_project_delete_notimplemented_exception.jpg" alt="" id="BLOGGER_PHOTO_ID_5506389284918468050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Others like EnvDTE._Solution.Remove(Project project) have buggy implementations. Removing a project with _Solution.Remove(Project project) will work, but when you try to add the same project from a different location using the _Solution.AddFromFile method you will end up with the error message "A project with that name is already opened in the solution". Once you removed it you have to restart Visual Studio if you ever want to be able to add the project to the solution.&lt;br /&gt;&lt;br /&gt;As we speak the Visual Studio 2010 automation COM-Interface is not usable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-5871498220051337258?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/5871498220051337258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=5871498220051337258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5871498220051337258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5871498220051337258'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/08/visual-studio-2010-com-interface.html' title='Visual Studio 2010 COM-Interface Bugfest'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lzlxCOYiDHU/TGqf4WqVHdI/AAAAAAAAAJo/W-kXWckLAyk/s72-c/envdte_project_delete_notimplemented_exception.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-6705832108690938234</id><published>2010-05-07T03:14:00.000-07:00</published><updated>2010-05-11T01:08:12.330-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compensations'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow 4'/><title type='text'>Workflow 4 Bugfest - no compensations</title><content type='html'>&lt;a href="http://msdn.microsoft.com/en-us/library/dd489432.aspx"&gt;According to msdn&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Compensation in Windows Workflow Foundation (WF) is the mechanism by which previously completed work can be undone or compensated (following the logic defined by the application) when a subsequent failure occurs. This section describes how to use compensation in workflows."&lt;br /&gt;&lt;br /&gt;Ok. Lets start with this very simple example:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/S-PtIvwmp1I/AAAAAAAAAJI/FIe7-JDI0IY/s1600/CompensableBug1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 225px; height: 400px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/S-PtIvwmp1I/AAAAAAAAAJI/FIe7-JDI0IY/s400/CompensableBug1.jpg" alt="" id="BLOGGER_PHOTO_ID_5468475107072976722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But when you execute it you will find that...&lt;br /&gt;&lt;br /&gt;Pufffff, it's gone!&lt;br /&gt;&lt;br /&gt;None of our handlers is ever called. Our transaction is down the drain.&lt;br /&gt;&lt;br /&gt;Hmm, maybe the transaction was not successful and this is the reason why none of handlers got called.&lt;br /&gt;&lt;br /&gt;Lets try this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/S-PtIySa3FI/AAAAAAAAAJQ/fTF-ob-o51c/s1600/CompensableBug2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 170px; height: 400px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/S-PtIySa3FI/AAAAAAAAAJQ/fTF-ob-o51c/s400/CompensableBug2.jpg" alt="" id="BLOGGER_PHOTO_ID_5468475107751681106" border="0" /&gt;&lt;/a&gt;But when you execute it you will find that...&lt;br /&gt;&lt;br /&gt;the last message is "Do Transaction" then&lt;br /&gt;&lt;br /&gt;Pufffffs, it's gone.&lt;br /&gt;&lt;br /&gt;But on the other hand what happens if we delete the throw?&lt;br /&gt;&lt;br /&gt;Then we see that the confirmed handler gets called at the end of our workflow.&lt;br /&gt;&lt;br /&gt;This means:&lt;br /&gt;&lt;br /&gt;If we use CompensableActivity and everything in our workflow completes successfully, the transaction gets "autocommitted". Otherwise its puffff gone.&lt;br /&gt;&lt;br /&gt;But this behavior can be changed from outside.&lt;br /&gt;&lt;br /&gt;Lets wrap the first example into one of this mysterious Try/Catch Block and let him handle the exception.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/S-QBNzU9jDI/AAAAAAAAAJg/6veQ-IMQaAg/s1600/CompensableBug4.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 272px; height: 400px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/S-QBNzU9jDI/AAAAAAAAAJg/6veQ-IMQaAg/s400/CompensableBug4.jpg" alt="" id="BLOGGER_PHOTO_ID_5468497184162679858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What we now see that all of a sudden our CancellationHandler gets called.&lt;br /&gt;&lt;br /&gt;I am confused now.&lt;br /&gt;&lt;br /&gt;First thing is that I would never expect my Compensation to just puffff. I mean I do serious thing in a compensation. This makes especially no sense to me, if a successful Compensation auto-commits and the end of the workflow. An even less if failed compensation calls the cancellationhadler only if it is wrapped into a Try/Catch block that handles the exception.&lt;br /&gt;&lt;br /&gt;Update: In the &lt;a href="http://social.msdn.microsoft.com/Forums/en/wfprerelease/thread/d54bd44a-24b7-4b0b-aa3c-f4553e00c820"&gt;MSDN  Forum Steve Danielson investigated the issue&lt;/a&gt;  and gave an excellent hint on the difference  between C# Try/Catch and Workflow Try/Catch. This covers the behavior for CompensableAction as well&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-6705832108690938234?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/6705832108690938234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=6705832108690938234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/6705832108690938234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/6705832108690938234'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/05/workflow-4-bugfest-no-compensations.html' title='Workflow 4 Bugfest - no compensations'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lzlxCOYiDHU/S-PtIvwmp1I/AAAAAAAAAJI/FIe7-JDI0IY/s72-c/CompensableBug1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-2431670873624865156</id><published>2010-05-07T01:22:00.000-07:00</published><updated>2010-05-11T00:51:35.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='catch'/><category scheme='http://www.blogger.com/atom/ns#' term='finally'/><category scheme='http://www.blogger.com/atom/ns#' term='exception handling'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow 4'/><category scheme='http://www.blogger.com/atom/ns#' term='try'/><title type='text'>Workflow 4 Bugfest - The Exception handling bug</title><content type='html'>I currently dig into Workflow 4 (Final). After Workflow 3 really drove me nuts with its unbearable performance I was first positively impressed by Workflow 4. The designer as well as the workflow execution speed is there where I expect it to be.&lt;br /&gt;I &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=35ec8682-d5fd-4bc3-a51a-d8ad115a8792&amp;amp;displaylang=en"&gt;downloaded the samples&lt;/a&gt; and went through the basic shapes section. All fine here.&lt;br /&gt;&lt;br /&gt;But my impression is about to change, as Workflow 4 seems to contain a number of serious bugs.&lt;br /&gt;&lt;br /&gt;This becomes very evident if you look at the execution of the finally block in a try/catch activity.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx"&gt;According to msdn&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;"&lt;span id="en1_ec75a8729d59a1e10aaf3d11cdfd28ef" class="sentence"&gt;The &lt;span&gt;&lt;span class="input"&gt;finally&lt;/span&gt;&lt;/span&gt; block is useful for cleaning up any  resources allocated in the &lt;a id="ctl00_MTCS_EnCP_ctl01" href="http://msdn.microsoft.com/de-de/library/0yd65esw.aspx" onclick="javascript:Track('ctl00_MTCS_EnCP_src1|ctl00_MTCS_EnCP_ctl01',this);"&gt;try&lt;/a&gt;  block as well as &lt;span style="font-weight: bold;"&gt;running any code that must execute even if there is an  exception.&lt;/span&gt;&lt;/span&gt;  &lt;span id="en2_aa64781a67d4b3a47b306ce41568fdd7" class="sentence"&gt;&lt;span style="font-weight: bold;"&gt;Control is always passed to the finally block  regardless of how the try block exits&lt;/span&gt;."&lt;/span&gt;&lt;p&gt;  &lt;/p&gt;&lt;br /&gt;The most simple form of a try-Catch Activity is this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/S-PZFvxzoII/AAAAAAAAAIQ/H2jrvQ_4_cM/s1600/TryCatchBug.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 208px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/S-PZFvxzoII/AAAAAAAAAIQ/H2jrvQ_4_cM/s320/TryCatchBug.jpg" alt="" id="BLOGGER_PHOTO_ID_5468453065305858178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/S-PZF_nkBlI/AAAAAAAAAIY/WhfOcFUkXmw/s1600/TryCatchBug2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 209px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/S-PZF_nkBlI/AAAAAAAAAIY/WhfOcFUkXmw/s320/TryCatchBug2.jpg" alt="" id="BLOGGER_PHOTO_ID_5468453069557859922" border="0" /&gt;&lt;/a&gt;Please note that there is no Exception handler in the "Catches" section. I simply want the Exception to propagate, but before it does that I want to make sure my code block in finally is executed no matter what happens.&lt;br /&gt;&lt;br /&gt;But if you now execute the code, you will find out that the code in our finally block never gets executed....&lt;br /&gt;&lt;br /&gt;This will not change if you add an exception handler, that does not handle the specific exception.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/S-PZGCkCFLI/AAAAAAAAAIg/_DX-_qdfSmA/s1600/TryCatchBug3.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 222px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/S-PZGCkCFLI/AAAAAAAAAIg/_DX-_qdfSmA/s320/TryCatchBug3.jpg" alt="" id="BLOGGER_PHOTO_ID_5468453070348358834" border="0" /&gt;&lt;/a&gt;To make things worse we will see, that even if we handle the specific exception and and want to rethrow it, our finally is never executed.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/S-PZGa-VGfI/AAAAAAAAAIo/_oEtIg0mJt8/s1600/TryCatchBug4.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 301px; height: 320px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/S-PZGa-VGfI/AAAAAAAAAIo/_oEtIg0mJt8/s320/TryCatchBug4.jpg" alt="" id="BLOGGER_PHOTO_ID_5468453076901108210" border="0" /&gt;&lt;/a&gt;Actually the only time the finally gets executed in case of an exception is when the Exception is handled and not propagated.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/S-PfQ-_xcrI/AAAAAAAAAIw/1r3IEm2vVH0/s1600/TryCatchBug6.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 210px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/S-PfQ-_xcrI/AAAAAAAAAIw/1r3IEm2vVH0/s320/TryCatchBug6.jpg" alt="" id="BLOGGER_PHOTO_ID_5468459855439295154" border="0" /&gt;&lt;/a&gt;This means:&lt;br /&gt;&lt;br /&gt;In Workflow 4 you cannot propagate an exception and execute a finally block.&lt;br /&gt;&lt;br /&gt;In other words:&lt;br /&gt;&lt;br /&gt;You cannot use a finally block.&lt;br /&gt;&lt;br /&gt;Update: In the &lt;a href="http://social.msdn.microsoft.com/Forums/en/wfprerelease/thread/d54bd44a-24b7-4b0b-aa3c-f4553e00c820"&gt;MSDN Forum Steve Danielson&lt;/a&gt; gave an excellent hint on the difference between C# Try/Catch and Workflow Try/Catch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-2431670873624865156?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/2431670873624865156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=2431670873624865156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2431670873624865156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2431670873624865156'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/05/workflow-4-bugfest-exception-handling.html' title='Workflow 4 Bugfest - The Exception handling bug'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lzlxCOYiDHU/S-PZFvxzoII/AAAAAAAAAIQ/H2jrvQ_4_cM/s72-c/TryCatchBug.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-8055339979807662410</id><published>2010-04-16T06:06:00.000-07:00</published><updated>2010-04-16T10:13:03.079-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='mess'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>The WCF Data Services Toolkit mess</title><content type='html'>Related to custom data providers for WCF Data Services I am just looking at the &lt;a href="http://www.odata.org/developers/odata-sdk#/media/7579/odataprovidertoolkit.zip"&gt;Data Service Provider toolkit&lt;/a&gt; and I notice several things.&lt;br /&gt;&lt;br /&gt;1.) You obviously need tons of glue code to expose the most simple classes like.&lt;br /&gt;&lt;br /&gt;public Class B&lt;br /&gt;{&lt;br /&gt;  public string NoIdProperty {get;set;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public Class A&lt;br /&gt;{&lt;br /&gt;  public B MyB { get;set; }&lt;br /&gt;  public int MyIDProperty { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;2.) The whole System.Data.Services.Providers Namespace is as good as undocumented. At what point in time/in which order the fuctions in IDataServiceQueryProvider are called? Only reverse engineering or many breakpoints/stepping through will tell you.&lt;br /&gt;&lt;br /&gt;3.) The whole namespace smells like entity framework to me (e.g. looking at the ResourceTypeKind enum).&lt;br /&gt;&lt;br /&gt;4.) The whole data services error reporting/debugging is not even close to real life requirements. I definitely need more details that just "Something blew up somewhere". I need something like the WCF tracing facilities before I can ever think about getting a Data Service into a production environment.&lt;br /&gt;&lt;br /&gt;5.) The toolkit code is a mess.&lt;br /&gt;I only looked at the RO examples, but just looking at the typed and untyped examples you find many differences in the glue code. They do really questionable things like storing their own &lt;span style="color: rgb(51, 204, 255);font-family:courier new;" &gt;ResourceTypeAnnotions &lt;/span&gt;types in the &lt;span style="font-family:courier new;"&gt;CustomState &lt;/span&gt;properties of the  that is obviously needed to store a missing link from the &lt;span style="color: rgb(51, 204, 255);font-family:courier new;" &gt;ResourceTypeRessourceTypes &lt;/span&gt;to the &lt;span style="color: rgb(51, 204, 255);font-family:courier new;" &gt;RessourceSets&lt;/span&gt;.&lt;br /&gt;They do really messy things like in GetQueryRootForResourceSet(ResourceSet) function (typed/ro example) that are all but intuitive.&lt;br /&gt;They need a whole bunch of helper and extensions classes (glue), only to make your own interfaces somehow usable.&lt;br /&gt;&lt;br /&gt;In short: the Custom Data Service Providers interface feels like it was not designed for what we are trying to do here.&lt;br /&gt;&lt;br /&gt;I really love the idea of WCF Data Services that expose objects, because they close a significant gap in current data access architecture.&lt;br /&gt;&lt;br /&gt;Maybe I did not get the concept of custom data service providers or I am just too stupid, but so far it looks the current ADO .NET Data Service implementation will never match my expectations.&lt;br /&gt;&lt;br /&gt;Maybe Microsoft should consider dumping the current implementation and start a rewrite that is designed for exposing objects over WCF, instead of just entity framework over HTTP. Trying to fix the current code seems to be a big waste of their and my time. But at least Microsoft should do their homework in regards to documentation before thinking about extensions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-8055339979807662410?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/8055339979807662410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=8055339979807662410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/8055339979807662410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/8055339979807662410'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/04/wcf-data-services-toolkit-mess.html' title='The WCF Data Services Toolkit mess'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-302435656386939104</id><published>2010-02-24T07:50:00.000-08:00</published><updated>2010-02-25T04:42:11.361-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delete files'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2008 R2'/><category scheme='http://www.blogger.com/atom/ns#' term='takeown'/><category scheme='http://www.blogger.com/atom/ns#' term='icacls'/><title type='text'>How many clicks I need to delete a file owned by "TrustedInstaller"</title><content type='html'>If you have the problem with this crap Vista based Windows Server 2008 that you want to delete a file owned by "TrustedInstaller", how many clicks do you need?&lt;br /&gt;&lt;br /&gt;1.) Right Click on the file&lt;br /&gt;2.) Left Click on "Properties"&lt;br /&gt;3.) Left Click "Security Tab"&lt;br /&gt;4.) Left Click "Advanced" Button&lt;br /&gt;5.) Left Click "Owner" Tab&lt;br /&gt;6.) Left Click "Edit" Button&lt;br /&gt;7.) Left Click UAC "Continue" Button&lt;br /&gt;8.) Left Click "Administrators"&lt;br /&gt;9.) Left Click "OK" Button&lt;br /&gt;10.) Left Click "OK" Button of Security Dialog&lt;br /&gt;11.) Left Click "OK" Button&lt;br /&gt;12.) Left Click "Edit" Button&lt;br /&gt;13.) Left Click UAC "Continue" Button&lt;br /&gt;14.) Left Click "Administrators" Button&lt;br /&gt;15.) Left Click "Full Control" Checkbox&lt;br /&gt;16.) Left Click "OK" Button&lt;br /&gt;17.) Left Click "OK" Button&lt;br /&gt;18.) Right Click "File"&lt;br /&gt;19.) Left Click "Delete"&lt;br /&gt;20.) Left Click "Continue" Button&lt;br /&gt;21.) Left Click UAC "Continue" Button&lt;br /&gt;&lt;br /&gt;And you need to do this for every single file.&lt;br /&gt;&lt;br /&gt;Are you fucking kidding me?&lt;br /&gt;&lt;a href="http://www.tipandtrick.net/2008/how-to-take-ownership-and-full-control-permissions-of-files-and-folders-in-vista/"&gt;&lt;br /&gt;Thanks god&lt;/a&gt; there are a few commandline utilities that do the job just as expected:&lt;br /&gt;&lt;br /&gt;start an elevated "cmd"&lt;br /&gt;&lt;br /&gt;Use:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;takeown /f &amp;lt;FileOrDirectory&amp;gt; /r /a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;icacls &amp;lt;FileOrDirectory&amp;gt; /grant administrators:F /t&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-302435656386939104?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/302435656386939104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=302435656386939104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/302435656386939104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/302435656386939104'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/02/how-many-clicks-i-need-to-delete-file.html' title='How many clicks I need to delete a file owned by &quot;TrustedInstaller&quot;'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-7934326013786271267</id><published>2010-02-16T06:08:00.000-08:00</published><updated>2010-02-18T09:11:30.670-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='converter'/><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='svcutil'/><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><title type='text'>XSD to NHibernate-WCF contract converter</title><content type='html'>Guess you want to generate a WCF Data Contract from an XSD. In this case you use svcutil with /dconly option. This tool is based on&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204);font-family:courier new;" &gt;XsdDataContractImporter&lt;/span&gt;, so it can convert XSD files the same way, as svcutil does it.&lt;br /&gt;&lt;br /&gt;But what do you do if you want to persist your object with NHibernate? You cannot do this with the contract generated from svcutil. The core of the problem is, that though you can switch the collection type with the /ct: options to IList. the &lt;a href="http://blogs.msdn.com/drnick/archive/2010/02/11/fix-to-generate-contract-code-for-dates.aspx"&gt;generated data contract will not build&lt;/a&gt;. Second issue is that all the properties are generated public but not virtual public as we need this for NHibernate.&lt;br /&gt;&lt;br /&gt;As svcutil is basically a wrapper around framework classes, I slapped together a small custom XSD to Class converter that generates classes that can be directly filled with NHibernate. All the customization is encapsulated in xsdconverter.cs. So feel free to change the frontend (WPF here) to whatever you like.&lt;br /&gt;&lt;br /&gt;90% of the code is dedicated to another feature of the generator. It is capable of generating code comments from your &lt;xs:annotation&gt;&amp;lt;xs:annotations&amp;gt; elements. This code is based on the code released by &lt;a href="http://xsd2code.codeplex.com/"&gt;Xsd2Code&lt;/a&gt; project.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.evotegra.de/docs/WPFXSDConverter.zip"&gt;You can get it here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Due to some &lt;a href="http://blogs.msdn.com/drnick/archive/2010/02/11/fix-to-generate-contract-code-for-dates.aspx"&gt;unlucky limitations of System.Runtime.Serialization (see comments)&lt;/a&gt; using the NHibernate option the serialized object may not be valid against the schema. As long as you do not require valid XML against your schema (and you probably won't) this restriction does not matter though.&lt;br /&gt;&lt;/xs:annotation&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-7934326013786271267?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/7934326013786271267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=7934326013786271267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/7934326013786271267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/7934326013786271267'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/02/xsd-to-nhibernate-wcf-contract.html' title='XSD to NHibernate-WCF contract converter'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-7926634907475626659</id><published>2010-02-15T13:03:00.001-08:00</published><updated>2010-02-24T10:15:39.881-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Enjoy the WCF Data Services sandwich</title><content type='html'>For 60 years in IT, there are lot of the ever repeating questions in every project.&lt;br /&gt;&lt;br /&gt;Among them:&lt;br /&gt;&lt;br /&gt;How do I load/persist my object in my relational database?&lt;br /&gt;&lt;br /&gt;Who hopes Microsoft is finally giving the the answer with &lt;a href="http://my-tech-talk.blogspot.com/2010/02/entity-framework-4-light-of-net-orm.html"&gt;Entity Framework 4 will be disappointed&lt;/a&gt;. EF 4 is nailed on my SQL-Server relational tables. But what's a data-access layer worth that exports relational tables? Well, it's simply not what I call a data-access layer. It is a relational table presentation layer, but nothing more. For me a good data-access layer returns at least data transfer objects, that totally abstract the physical storage. Given that fact that I don't like the idea of stacking up a table presentation layer with my own projection framework, EF4 can't be part of any serious architecture I use.&lt;br /&gt;&lt;br /&gt;But what about WCF Data Services?&lt;br /&gt;&lt;br /&gt;Among the ever returning questions in IT there is also the following question.&lt;br /&gt;How can I forward the query from my client to my object repository if I want it to?&lt;br /&gt;&lt;br /&gt;The problem with DDD repositories, is that you basically need the exact number of functions as the number of query possibilities you want to have.&lt;br /&gt;&lt;br /&gt;Following example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;class A&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public string&lt;/span&gt; PropA { &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;; };&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public string&lt;/span&gt; PropB { &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;; };&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public string&lt;/span&gt; PropC { &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;; };&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How many operations you want to implement until you get the flexibility you need?&lt;br /&gt;&lt;br /&gt;Maybe&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;GetAByPropA(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GetAByPropB(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GetAByPropC(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GetAByPropAorB(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle,&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particleB);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GetAByPropAandB(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle, &lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GetAByPropAorC(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle, &lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particleB);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course you would not implement&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GetAByPropAorB(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particle,&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;particleB);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;but maybe&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GetAByQuery(&lt;span style="color: rgb(0, 204, 204);"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 0, 153);"&gt;string&lt;/span&gt;&amp;gt;, &lt;span style="color: rgb(0, 204, 204);"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0, 204, 204);"&gt;Operator&lt;/span&gt;&amp;gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But what are the Operators....&lt;br /&gt;&lt;br /&gt;You have 2 options now.&lt;br /&gt;&lt;br /&gt;1.) You accept that you cannot implement all the operations you basically need. That means to accept the gap. That means you need to do client side filtering. That means your data-access layer puts much more load on the whole system than necessary&lt;br /&gt;2.) you find yourself writing your own query language.&lt;br /&gt;&lt;br /&gt;So either I take the ugly 90% solution or I waste my project time writing a query language instead of implementing business cases. From my point of view this sounds like the choice between black death and cholera. Basically this is the moment to realize we have just broken through the ceiling of current SOA patterns.&lt;br /&gt;&lt;br /&gt;But wait. Microsoft promises me they have the answer. It's called WCF Data Services!&lt;br /&gt;&lt;br /&gt;What are WCF Data Services related to classic WCF services?&lt;br /&gt;&lt;br /&gt;In classic WCF you expose operations. In WCF Data Services you expose objects. WCF Data Services come with a built in functionality to perform queries on a collection of objects exposed through the service.&lt;br /&gt;&lt;br /&gt;In .Net terms this means, I can perform a Linq query on the collection of my client proxy object. The client serializes my query through OData protocol, which is then deserialized on the server to a Linq expression again. And with my Linq expression I can basically forward the query directly to my data store. This means I retrieve only the exact data requested and return just the amount of data necessary.&lt;br /&gt;&lt;br /&gt;Awesome! All I do is to expose my object, and this is it! Bye 100 insuffient operations, bye you hateful custom query language.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/ee720180.aspx"&gt;I watched the videos&lt;/a&gt;, everything looks absolutely idiot proof. Lets try it.&lt;br /&gt;&lt;br /&gt;I tried it on .Net 3.5 getting the latest update, as well on .Net 4 with Visual Studio 2010 RC.&lt;br /&gt;&lt;br /&gt;But as I do not like Entity Framework I used my really simply WCF contract. I exposed it through my Data Service and....&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-family:courier new;"&gt;Request Error. The server encountered an error processing the request. See server logs for more details.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Who knows where there is the log for the ASP.Net development server?&lt;br /&gt;&lt;br /&gt;To save you the same amount of frustration I recommend you slap the following attribute on your DataService&lt;t&gt; class.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[&lt;span style="color: rgb(102, 204, 204);"&gt;ServiceBehavior&lt;/span&gt;(IncludeExceptionDetailInFaults = &lt;span style="color: rgb(51, 51, 255);"&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In .Net 3.5 the error message you now get is even less on the first glance.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;"The XML page cannot be displayed"&lt;/p&gt;To save you some more frustration I recommend to use FireFox as your default browser. In case of invalid XML IE simply does let you view the source of the document. Although FireFox comes up with a similar "XML processing error" message, you can at least always show the source of the page and sometimes this will get you to the source of the problem.&lt;br /&gt;&lt;br /&gt;If you get meaningful exceptions like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke ....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;this probably means the same as the the error message:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"MyType is not entity type"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;? What does that mean?&lt;br /&gt;&lt;br /&gt;With WCF Data Services you just cannot expose WCF data contracts. Basically WCF Data Services are missing WCF compatibility. Well.....&lt;br /&gt;&lt;br /&gt;You can only expose objects that have either:&lt;br /&gt;&lt;br /&gt;a public set &amp;amp; gettable property: ID (yes, case sensitive)&lt;br /&gt;or&lt;br /&gt;a public set &amp;amp; gettable property: &amp;lt;classname&amp;gt;ID&lt;br /&gt;or are decorated with the&lt;br /&gt;[&lt;span style="color: rgb(102, 204, 204);font-family:courier new;" &gt;DataServiceKeyAttribute&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;What does that mean?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;MyClass&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public string &lt;/span&gt;Name { &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Not working. And be careful with just slapping [&lt;span style="color: rgb(102, 204, 204);font-family:courier new;" &gt;DataServiceKeyAttribute(&lt;span style="color: rgb(153, 51, 0);"&gt;"Name"&lt;/span&gt;)&lt;/span&gt;] on your class. As Name is not a unique identifier of your class you may see some unexpected results if you query provider return 2 objects with the same name. Make sure you test this choice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;enum  &lt;/span&gt;myEnum&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;one&lt;/span&gt;,&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;two&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;MyClass&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public string &lt;/span&gt;ID { &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(0, 204, 204);"&gt;myEnum &lt;/span&gt;MyEnum &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;{ &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;not working&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;MyOtherClass&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public string &lt;/span&gt;Name { &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;MyClass&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public string &lt;/span&gt;ID { &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;public &lt;/span&gt;&lt;span style="color: rgb(0, 204, 204);"&gt;MyOtherClass &lt;/span&gt;MyOtherClass &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;{ &lt;span style="color: rgb(0, 0, 153);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 153);"&gt;set&lt;/span&gt;;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;not working as B has no unique identifier on its own.&lt;br /&gt;&lt;br /&gt;It looks like we have to approach the question from the other side. So what is working?&lt;br /&gt;&lt;br /&gt;Well, basically if you want to transport your own classes not much. If you have no access to source of the class basically nothing. But I have my WCF data contracts! What happened?&lt;br /&gt;&lt;br /&gt;If you look the &lt;a href="http://msdn.microsoft.com/en-us/data/ee720180.aspx"&gt;Microsoft Pod casts&lt;/a&gt; on the subject you see that most their examples are based on the Entity Framework. And if you look closer you find all the limitations in Entity Framework  currently are found in Data Services as well. In other words Entity Framework are perfect partners. But this in fact means that both technologies are quite tightly coupled. This makes sense if you consider that &lt;span style="font-style: italic;"&gt;WCF Data Services&lt;/span&gt; were called &lt;span style="font-style: italic;"&gt;ADO.Net Data Services&lt;/span&gt; before. The original design was obviously not for exposing object but database entities. For me it feels the&lt;/t&gt; whole concept was originally intended to give Silverlight developers access to a remote SQL-Server database because Silverlight runs in sand boxed context of the browser behind a firewall.&lt;br /&gt;&lt;br /&gt;But in fact this is what you get.&lt;br /&gt;&lt;t&gt;&lt;br /&gt;So what basically happened is that they &lt;a href="http://blogs.msdn.com/astoriateam/archive/2007/09/27/astoria-data-sources-and-system-layering.aspx"&gt;nailed the Data Services on Entity Framework&lt;/a&gt; which is nailed on relational SQL Server tables. In short: WCF Data Services are intended to provide a web based access to relational SQL server tables.&lt;br /&gt;&lt;br /&gt;Now you tell me something about decoupled architecture..... Basically amazing how you manage to nail not only some software components but 3 complete technology frameworks together.&lt;br /&gt;&lt;br /&gt;If you try to expose your object or only your WCF data contract through WCF Data Services, you probably will not recognize your object anymore when your implementation finally suffices WCF Data Services.&lt;br /&gt;&lt;br /&gt;At the end the result is more than disappointing. If you do not like the SQL-Server, Entity Framework, Data Services Sandwich you can put this technologies aside and wait for Microsoft to publish something more generally usable. Maybe some when somewhere on CodePlex?&lt;br /&gt;&lt;br /&gt;More and more it seems the whole .Net 4 release seems to be full set of half ready technologies. WF4 is missing State Machines, the ORM Entity Framework 4 is missing (o)bjects and (m)appings, WCF Data Services are missing WCF, industry standards like XSLT 2 are completely missing. Maybe it's time for Microsoft to rename .Net 4 to .Net 3.75. For me it looks like it looks like Microsoft lost sight in the Cloud.&lt;br /&gt;&lt;br /&gt;Please correct me if I got something completely wrong. I am more than happy to correct my findings. Please use the comment function for this.&lt;br /&gt;&lt;br /&gt;Update: With the move from &lt;span style="font-style: italic;"&gt;ADO.Net Data Services&lt;/span&gt; to &lt;span style="font-style: italic;"&gt;WCF Data Services&lt;/span&gt; Microsoft obviously realized that the current implementation does currently not fulfill the expectations implied by the term WCF.&lt;br /&gt;That is why they come up with a custom &lt;a href="http://blogs.msdn.com/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx"&gt;Data Service Provider Interface&lt;/a&gt; that allows you to plug in new models into WCF Data Services.&lt;br /&gt;&lt;/t&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-7926634907475626659?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/7926634907475626659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=7926634907475626659' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/7926634907475626659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/7926634907475626659'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/02/enjoy-wcf-data-services-sandwich.html' title='Enjoy the WCF Data Services sandwich'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-9071505306005201353</id><published>2010-02-15T10:58:00.000-08:00</published><updated>2010-02-22T06:10:31.377-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nhiberate'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework 4'/><title type='text'>Entity Framework 4 - The light of .Net ORM dawn?</title><content type='html'>For 60 years in IT, there are lot of the ever repeating questions in every project.&lt;br /&gt;Among them:&lt;br /&gt;&lt;br /&gt;In what format I do send my data to the consuming system?&lt;br /&gt;Well, finally we solved this....  That's XML. Checked.&lt;br /&gt;&lt;br /&gt;How do I get my data to the consuming system?&lt;br /&gt;Well, that's WCF for all .NET folks. Checked.&lt;br /&gt;&lt;br /&gt;How do I load/persist my object in my relational database?&lt;br /&gt;Well, hmm, uhhh.&lt;br /&gt;&lt;br /&gt;I promise the number of different relational data access/persistence implementations in .Net are only little lower than the number of .Net apps running on this planet using that technology. How we do data-access is a question of the style of each developer and thus dependent on the person not the technology. This of course is additional risk to every .Net project at a quite low level.&lt;br /&gt;Compared to Java, in the area of ORM .NET seems to be light years behind. What Microsoft shipped as Entity-Framework 1.0 was as good as the WF-WCF 3 integration or in other words.... simply beyond every comment. But with is the upcoming .Net 4 ships the new Entity-Framework 4. So is there finally the light of dawn coming into the .Net ORM world?&lt;br /&gt;&lt;br /&gt;I tried it and the result was bringing me back to earth quickly. Guess  you have&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;B&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public string &lt;/span&gt;Id { &lt;span style="color: rgb(51, 51, 255);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(51, 51, 255);"&gt;set &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;A &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public string &lt;/span&gt;Name { &lt;span style="color: rgb(51, 51, 255);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(51, 51, 255);"&gt;set &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public List&lt;/span&gt;&amp;lt;B&amp;gt; Bs { &lt;span style="color: rgb(51, 51, 255);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(51, 51, 255);"&gt;set&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and you want to map this to a database you find out that...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/e0092fa1-46d5-4727-ab8c-faa61cac091e"&gt;you cannot do that with the standard approach of Entity-Framework 4&lt;/a&gt;.  Here you can only move a property from entity A to B if there is a 1 : 1 relationship between those tables.&lt;br /&gt;&lt;br /&gt;Out of the box EF4 is just a lazyload DataSet 2.0 with autogenerated query,update, insert commands. But it is nailed on my relational tables. The other problem I see here is that out of the box EF4 currently supports SQL-Server only. If you want other database support you need &lt;a href="http://blogs.msdn.com/adonet/archive/2008/09/05/devart-s-new-providers-support-the-ado-net-entity-framework.aspx"&gt;3rd-party provider&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;From an architecture point of view this is good enough for "Click and Shoot" applications, but not for serious applications that require abstraction of the data from the underlying storage.&lt;br /&gt;&lt;br /&gt;If you want to use EF4 in this scenarios, you &lt;a href="http://blogs.msdn.com/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx"&gt;need to switch to POCO mode&lt;/a&gt;.  It looks like you have to sacrifice most of the the tools and code generation support though. There are some POCO templates for code generation, but if I look at the &lt;a href="http://blogs.msdn.com/adonet/archive/2010/02/18/entity-framework-poco-template-updated-for-visual-studio-2010-release-candidate.aspx"&gt;known defects list&lt;/a&gt;, this whole thing does not look quite production ready. It looks like the EF evolution from DataSet 2.0 to an serious ORM tool is ongoing, but I would not make a bet it happens with this release. So hopefully with EF 5 we can expect some more mature solution here.&lt;br /&gt;&lt;br /&gt;Meanwhile related to true ORM instead in the light of dawn we have to walk in utter darkness?&lt;br /&gt;&lt;br /&gt;No.&lt;br /&gt;&lt;br /&gt;I looked into NHibernate lately and although it does not completely meet my (too high?) expectations of an *Object* Relational Mapper, you can do a lot more things with it than you can do with EF4. It really feels like a mature ORM framework to me.&lt;br /&gt;&lt;br /&gt;So I cannot map the exact above example but at least I can map what gets me at least to the same usability I intended.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;B&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt; public virtual string Id { &lt;span style="color: rgb(51, 51, 255);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(51, 51, 255);"&gt;set &lt;/span&gt;}&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;class &lt;/span&gt;A &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public virtual string &lt;/span&gt;Name { &lt;span style="color: rgb(51, 51, 255);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(51, 51, 255);"&gt;set &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public virtual IList&lt;/span&gt;&amp;lt;B&amp;gt; Bs { &lt;span style="color: rgb(51, 51, 255);"&gt;get&lt;/span&gt;;&lt;span style="color: rgb(51, 51, 255);"&gt;set&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is pretty much a basic problem for &lt;a href="https://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt;. But you can solve a lot more problems with it, like inheritance, cyclic references, Write/Read batching (in other words performance tuning),it supports lazy load with different proxies...&lt;br /&gt;There is a (not quite impartial) comparison of &lt;a href="http://ayende.com/Blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx"&gt;Entity Framework 4 vs NHibernate&lt;/a&gt;. The comparison ends with the pro's of EF4 being "A better Linq provider and it's from Microsoft".&lt;br /&gt;The downside of NH is of course, that is not just "Import tables" click and shoot. As you have some choice on the mappings you have more complexity and more handwriting and configuration.&lt;br /&gt;&lt;br /&gt;Maybe I have to give up my idea of *the* ORM. It seems you have to forget about the "O". The best that can be done is an "E" or "Entity" Relational Mapper, where "Entity" is a technology related subset of "Object". And the the bigger your subset is the better is your ERM tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-9071505306005201353?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/9071505306005201353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=9071505306005201353' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/9071505306005201353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/9071505306005201353'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/02/entity-framework-4-light-of-net-orm.html' title='Entity Framework 4 - The light of .Net ORM dawn?'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-4508788851288661232</id><published>2010-01-26T03:02:00.000-08:00</published><updated>2010-01-31T14:37:47.027-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='do not use'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Backup'/><category scheme='http://www.blogger.com/atom/ns#' term='errors'/><title type='text'>Do not use Windows Backup!</title><content type='html'>At the time we speak this application is FUBAR, or in other words "fucked up beyond all repair".&lt;br /&gt;&lt;br /&gt;Why?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I never saw a completely successful backup, neither on my Vista Box nor on my Windows 7 box.&lt;/li&gt;&lt;li&gt;You only waste hours or days running backups that are never successful, scanning your disk with chkdsk of sfc, searching the net, searching the registry, screwing up your systems registry, or formatting your disk.&lt;/li&gt;&lt;li&gt;The errors are just cryptic hexadecimal numbers like 0x80070057, 0x80070570 without any reference to the cause of the error.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;When I first started Windows Backup on Windows 7 I kept getting error &lt;span style="font-weight: bold;"&gt;0x800700002&lt;/span&gt; which quite obviously means, that a registry key named &lt;span style="font-family:courier new;"&gt;ProfileImagePath&lt;/span&gt; below &lt;span style="font-family:courier new;"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList&lt;/span&gt; was pointing to a directory &lt;span style="font-family:courier new;"&gt;%systemroot%\system32\config\systemprofile&lt;/span&gt; that did not exist on my machine. In this case I could convince Windows Backup to go on after I manually created this directory for Windows Backup.&lt;br /&gt;That was it? No. After that I got some obvious &lt;span style="font-weight: bold;"&gt;0x80070570 &lt;/span&gt;followed of course by a  &lt;span style="font-weight: bold;"&gt;0x8007000D&lt;/span&gt; and on my Vista Box all I naturally get is &lt;span style="font-weight: bold;"&gt;0x80070079&lt;/span&gt;. In the meantime I ran  hours of chkdsk /r or sfc /scannow. In the end I assumed that maybe my backup hard drive had some kind of problem and reformatted it.&lt;br /&gt;&lt;br /&gt;What I did not know at this point was that this meant the end for my "Windows Backup" on my machine. When I now start Windows Backup all I get is &lt;span style="font-weight: bold;"&gt;0x80070057&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/S17SfoUw4kI/AAAAAAAAAHw/EfY_NrT02mM/s1600-h/Clipboard01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/S17SfoUw4kI/AAAAAAAAAHw/EfY_NrT02mM/s320/Clipboard01.jpg" alt="" id="BLOGGER_PHOTO_ID_5431009641497682498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It took Microsoft half a year of investigation to find out that this error  in fact is related to some problems they have with &lt;a href="http://social.technet.microsoft.com/Forums/en/w7itprogeneral/thread/64f2b570-3b92-409c-a2d5-134dd2dd6287"&gt;non-US locale settings&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The closest I ever got was a single unreproducible backup that ended "successfully with errors". But when I checked the log I found this error message:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Error while backing up "C:\Windows\System32\config\systemprofile\myFolder". The system cannot find the file specified (0x80070002))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The surprising part is, that this folder never existed and never will exist on my system. This raises the question, why a *backup* program starts seeing ghost files, which of course it later fails to find??&lt;br /&gt;&lt;br /&gt;It also raises the question, what specifications, development and quality assurance process they have at Microsoft, that allows them to ship *twice* a solution that throws hexadecimal errors messages in a users face? From a software engineering perspective this is bare amateur level. If Microsoft wants to know, why the people love Apple, then here you got the answer. They would not ship crap like this once.&lt;br /&gt;&lt;br /&gt;The reason could be simple. Because it feels like the core of Windows Backup is some component Microsoft bought and then tried to cram somehow into Windows. I would not wonder if there is just some sort of (former) third party backup.exe running under the hood.&lt;br /&gt;&lt;br /&gt;As we speak of backup, means the security of your data, using Windows Backup you must ask yourself the following questions:&lt;br /&gt;&lt;br /&gt;Do you really want to trust your data to a backup program&lt;br /&gt;&lt;ul&gt;&lt;li&gt;that is incapable of giving a useful error message?&lt;/li&gt;&lt;li&gt;that needs folders to be manually created to work at all?&lt;/li&gt;&lt;li&gt;that tries to backup files that do not exist?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;that is dependent on US locale settings?&lt;/li&gt;&lt;li&gt;that even after the Vista desaster, Microsoft itself was unable to fix in the 3 years time until Windows 7?&lt;/li&gt;&lt;/ul&gt;So the conclusion is simple:&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;If you love your data,&lt;br /&gt;do not use Windows Backup!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-4508788851288661232?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/4508788851288661232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=4508788851288661232' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/4508788851288661232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/4508788851288661232'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/01/do-not-use-windows-backup.html' title='Do not use Windows Backup!'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lzlxCOYiDHU/S17SfoUw4kI/AAAAAAAAAHw/EfY_NrT02mM/s72-c/Clipboard01.jpg' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-7217925469449434813</id><published>2010-01-19T12:17:00.000-08:00</published><updated>2011-07-29T07:34:30.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pass arrays'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>How to pass arrays from .Net C# to Oracle</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Guess you have the following query&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;select&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; * &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;where&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table.id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(:&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;and you want to pass a number of IDs in the binding variable &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;from C# to your Oracle SQL. If you now check the types of binding variables available for this job, you find out that this Oracle only supports scalar types as binding variables. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;If you now dig further you find a couple of bright solution that are all based on splitting up some string (varchar2) into several elements. But due to the fact, that the length of varchar2 binding variables is limited to 4/32K SQL/PLSQL this is not a scalable solution to the problem.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Even if you think you are smart, and you try a string replace of :MyIDList with the elements like 'a','b','c' let me assure you that the limit for written elements in an in statement is 1000. Also your performance will degrade significantly, as the query cache won't recognize the SQL as being executed before and therefore Oracle has to recompile it with every execution.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;span style="font-weight: bold;"&gt;Is it impossible to pass an variable length array to SQL?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Let me put it straight!&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Yes and No.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;In pure SQL it is impossible to pass a variable length array to SQL.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;But in PL/SQL it is not.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;"Yes great", you think, "but I need it in SQL!" &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;The trick is a PL/SQL wrapper to SQL!&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Simply use the following ingredients:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Define 2 global types (and don't try to be smart here. We need IDType for couple of reasons):&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;OR&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;REPLACE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;type&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDTYPE &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;as&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;object&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;varchar2&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;20&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;OR&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;REPLACE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;type&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDTABLETYPE &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;as&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;of&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;In PL/SQL now create a package&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;OR&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;REPLACE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;PACKAGE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MYPACKAGE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;as&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;type&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; stringTableType &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;is&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;of&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;varchar2&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;20&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;index&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;by&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;binary_integer;&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;procedure&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;GetMyTableByIDs&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;IN&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; stringTableType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;p_outRefCursor &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;out&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; RefCursorType&lt;/span&gt;&lt;br /&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;OR&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;REPLACE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;PACKAGE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;BODY&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MYPACKAGE&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;as&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;TYPE &lt;span style="color: black;"&gt;RefCursorType&lt;/span&gt; IS REF CURSOR;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;procedure&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;GetMyTableByIDs&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;IN&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; stringTableType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;p_outRefCursor &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;out&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; RefCursorType&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;as&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;IDTableType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;begin&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;iMyIDList&lt;/span&gt; := &lt;span style="color: black;"&gt;IDTableType&lt;/span&gt;&lt;span style="color: black;"&gt;()&lt;/span&gt;;&lt;/span&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.Extend(&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.count);&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;for&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; i &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.First&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;..&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.Last&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;loop&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;:=&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;));&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;loop;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;open&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; p_outRefCursor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;for&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;s&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;elect&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; * &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;where&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table.id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(select&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table(&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;))&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;GetMyTableByIDs&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;What is going on here?&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;First thing you notice is that we have 2 very similar array (table) types.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Globally we defined the &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;type&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDTABLETYPE &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;as&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;of&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: green; font-family: Courier; font-size: 10pt;"&gt;-- IDType is varchar2(20)&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;This is in Oracle terms a "Nested Table". This type is available in SQL and PL/SQL. IDType brings the property "ID" of type varchar2(20).&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;In PL/SQL we defined the very similar type:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;type&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; stringTableType &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;is&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;of&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;varchar2&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;20&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;index&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;by&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;binary_integer;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;This is an "index by table" or "associative array" in oracle terms. Associative arrays are better understood as "HashTable" and are available in PL/SQL only. For a more detailed explanation of the differences please have a look at "&lt;a href="http://www.williamrobertson.net/documents/collection-types.html"&gt;Collection Types in PL/SQL&lt;/a&gt;".&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;span style="font-weight: bold;"&gt;But why do you copy the arrays one by one?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Because you now see that Oracle has obviously 2 different development units for SQL and PL/SQL. And they do not seem to talk very much together.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;The result of 3 days in short:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;There is no way to pass a nested table as parameter to a stored procedure in C#&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;There is no way to use a associative array in SQL&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;There is no way to assign/initialize a nested table to/with an associative array&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Great, but how do we use it in C#?&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;OracleConnection&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt; conn = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;OracleConnection&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"MyConnectionString");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;OracleCommand&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt; cmd = conn.CreateCommand();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;cmd.CommandText = &lt;span style="color: #a31515;"&gt;"MyPackage.GetMyTableByIDs"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;cmd.CommandType = &lt;span style="color: #2b91af;"&gt;CommandType&lt;/span&gt;.StoredProcedure;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;cmd.BindByName = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;cmd.Parameters.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;OracleParameter&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"p_outRefCursor"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;OracleDbType&lt;/span&gt;.RefCursor)).Direction = &lt;span style="color: #2b91af;"&gt;ParameterDirection&lt;/span&gt;.Output;&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;cmd.Parameters.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;OracleParameter&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"p_MyIDList"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;OracleDbType&lt;/span&gt;.Varchar2) &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;{ &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;CollectionType = &lt;span style="color: #2b91af; font-weight: bold;"&gt;OracleCollectionType&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.PLSQLAssociativeArray&lt;/span&gt;, &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;Value = &lt;span style="font-style: italic; font-weight: bold;"&gt;my_list_with_ids&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.ToArray()&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;da = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;OracleDataAdapter&lt;/span&gt;(cmd);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;da.Fill(myDataSet);&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;It's not working!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;I can't find neither&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;cmd.BindByName = &lt;span style="color: blue;"&gt;true&lt;/span&gt;; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;nor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;OracleCollectionType&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;.PLSQLAssociativeArray&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;The constraint of the solution is that you have to use &lt;a href="http://www.oracle.com/technology/tech/windows/odpnet/index.html"&gt;Oracle .NET driver&lt;/a&gt; (Oracle.DataAccess) instead of the the Microsoft (System.Data.OracleClient) driver. But with .Net 4 the Microsoft's Oracle driver is marked deprecated anyway. So get used to it.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;This is it. The only way to pass an array to a SQL.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;"Holy shivers!" you think. This is a lot of glue for a simple task like this!&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Basically yes, BUT&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;You can do 3 things now:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;1.) I use a macro that converts my SQL into PL/SQL by automatically replacing the binding variable :MyIDList with the PL/SQL Parameter p_myIDList.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;2.) You can tune your performance significantly by rewriting your SQL&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;3.) You can clean up your code a lot by using default values&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Improve overall performance&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Our former SQL &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;s&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;elect&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; * &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;where&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table.id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(select&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table(&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;))&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;becomes unbearable slow with a large number of ID's and lines in table. What you can do now is to rewrite our SQL to&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;s&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;elect&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; * &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;where&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table.id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;join&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(select&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table(&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;))&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;IdFilter&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;on&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;IdFilter&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;And if you want to develop in SQL and simply convert it with our macro you can add the following function to your package:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;FUNCTION&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; GetDefaultTable &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;param &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;varchar2&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;RETURN&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDTableType&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;is&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;begin&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;return&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; IDTableType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;IDType&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;param&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;));&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;and rewrite your regular SQL to:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;s&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;elect&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; * &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;where&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table.id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;join&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(select&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table(&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;MyPackage.GetDefaultTable(:&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;))&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;IdFilter&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;on&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;table&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;IdFilter&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;.&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;id&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;Use PL/SQL defaults:&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;A feature of our PL/SQL is that you can define default values for all parameters.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;In a simple case this is:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;procedure&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; Get&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;SomeThing&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;param1&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;varchar2&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;default&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;'&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;SomeDefaultValue&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;'&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;but what do we do with our associative array?&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;The fancy part about default parameters is that the value can be a call to function.....&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;So&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;procedure&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; Get&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;SomeThing&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;MyIDList&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;IN&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; stringTableType &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;default&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; GetDefaultTable&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;'&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;DefaultValueForElement&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;'&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;p_&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;param1&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;varchar2&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;default&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;'&lt;/span&gt;&lt;span lang="EN-GB" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;SomeDefaultValue&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: red; font-family: Courier; font-size: 10pt;"&gt;'&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;,&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt;p_outRefCursor &lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;out&lt;/span&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: black; font-family: Courier; font-size: 10pt;"&gt; RefCursorType&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US" style="-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: white; color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;works nice and easy. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;in combination with the line in C#&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;; font-size: 10pt;"&gt;cmd.BindByName = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;what you can do now is only pass parameters that differ from their defaults what can be used to write a much nicer code. Instead of passing all the parameters defined a for each procedure defined (results in a clunky piece of code), you just just set the parameter for any stored procedure if the associated value is non-default.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="font-family: Arial; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-7217925469449434813?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/7217925469449434813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=7217925469449434813' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/7217925469449434813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/7217925469449434813'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/01/how-to-pass-arrays-from-net-c-to-oracle.html' title='How to pass arrays from .Net C# to Oracle'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-5467044846458269711</id><published>2010-01-08T01:09:00.000-08:00</published><updated>2010-01-08T01:31:15.831-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2008 R2'/><category scheme='http://www.blogger.com/atom/ns#' term='SQLXML 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS7'/><category scheme='http://www.blogger.com/atom/ns#' term='64Bit'/><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><title type='text'>How to install SQLXML 3 on IIS 7 (Windows Server 2008 64 Bit)</title><content type='html'>The &lt;a href="http://msdn.microsoft.com/en-us/library/ms171744.aspx"&gt;release notes of SQLXML 4.1&lt;/a&gt; state, that if you need SQLXML with ISAPI (Internet Information Server) support, the latest version for you is &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=51D4A154-8E23-47D2-A033-764259CFB53B&amp;amp;displaylang=en"&gt;SQLXML 3 SP3&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you try to install it on a Windows Server 2008 R2 64Bit you might see 2 issues with that:&lt;br /&gt;&lt;br /&gt;After installing you click "&lt;span style="font-style: italic;"&gt;Start - SQLXML 3.0 - Configure IIS Support&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;If you get the error&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"An error occurred connecting to 'server'. This server does not exist or is unavailable."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;apply the following solution&lt;br /&gt;&lt;p style="font-style: italic;"&gt;Click  "Start  -  Administrative Tools - Server Manager"&lt;/p&gt;&lt;p&gt;in the Server Manager go to &lt;/p&gt;&lt;p style="font-style: italic;"&gt; "Roles - Webserver (IIS)"&lt;/p&gt;&lt;p&gt;Go to section "&lt;span style="font-style: italic;"&gt;Role Services&lt;/span&gt;" &lt;/p&gt;&lt;p&gt;verify that  all of "IIS 6 Management Compatibilty" packages are installed.&lt;/p&gt; After I installed the IIS 6 compatibility packages the SQLXML 3 snapin starts and connects just fine.&lt;br /&gt;&lt;br /&gt;The second error can occur if you attempt to call one of the xml templates and IIS just gives a 500 error 0x800700c1. Permissions and all appear correct. The IIS Virtual Direcotry Manager for SQLXML 3.0 throws an error when I attempt to Restart Application DLL "Error occurred unloading the application".&lt;br /&gt;&lt;br /&gt;Then apply the following solution:&lt;br /&gt;&lt;p&gt;1. Open IIS Manager, Select Application Pools.&lt;/p&gt; &lt;p&gt;2. Under Actions pane, Select 'Set Application Pool Defaults'.&lt;/p&gt; &lt;p&gt;3. Set 'Enable 32-bit Applications' to 'True'. (&lt;a href="http://forums.iis.net/p/1150780/1880190.aspx#1880190"&gt;Solution found here&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-5467044846458269711?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/5467044846458269711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=5467044846458269711' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5467044846458269711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5467044846458269711'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2010/01/how-to-install-sqlxml-3-on-iis-7.html' title='How to install SQLXML 3 on IIS 7 (Windows Server 2008 64 Bit)'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-4163086420330745215</id><published>2009-12-15T04:04:00.000-08:00</published><updated>2009-12-15T04:08:01.237-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Attempted to read or write protected memory'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>A fix for: "Attempted to read or write protected memory " in Visual Studio</title><content type='html'>I got this error after installing the WPF Toolkit and not closing all my Visual Studios before installing. The error was thrown by Visual Studio when I invoked F5 to run my WPF application in debug mode.&lt;br /&gt;In my case the fix was simple:&lt;br /&gt;Goto: Tools - Import and Export Settings - Reset all Settings&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-4163086420330745215?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/4163086420330745215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=4163086420330745215' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/4163086420330745215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/4163086420330745215'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/12/fix-for-attempted-to-read-or-write.html' title='A fix for: &quot;Attempted to read or write protected memory &quot; in Visual Studio'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-3723969885460197633</id><published>2009-09-04T06:59:00.000-07:00</published><updated>2009-09-08T03:18:29.045-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nview'/><category scheme='http://www.blogger.com/atom/ns#' term='shared heap'/><category scheme='http://www.blogger.com/atom/ns#' term='exhausted'/><category scheme='http://www.blogger.com/atom/ns#' term='solution'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='fix'/><title type='text'>How to fix: "shared heap exhausted or damaged"</title><content type='html'>The error can occur because your desktop heap is  too small. This happened to me especially after opening a large number of windows.&lt;br /&gt;&lt;br /&gt;Nview then filled up the application log with the error message:&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-family:courier new;"&gt;NVIEW :  Explorer: shared heap exhausted or damaged&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Quick Solution:&lt;br /&gt;&lt;br /&gt;1.) Start Regedit:&lt;br /&gt;&lt;br /&gt;2.) Browse to&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3.) Open the "Windows" key&lt;br /&gt;&lt;br /&gt;In the string you find a section like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;....Windows SharedSection=1024,&lt;span style="font-weight: bold;"&gt;4096&lt;/span&gt;,512....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Edit the second value e.g.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Windows SharedSection=1024,&lt;span style="font-weight: bold;"&gt;8192&lt;/span&gt;,512&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/SqEesIiePQI/AAAAAAAAAF4/S4s7vsLu7SY/s1600-h/Clipboard02.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 141px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/SqEesIiePQI/AAAAAAAAAF4/S4s7vsLu7SY/s320/Clipboard02.jpg" alt="" id="BLOGGER_PHOTO_ID_5377613173612231938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Click OK&lt;br /&gt;&lt;br /&gt;4.) Restart Windows&lt;br /&gt;&lt;br /&gt;To verify this solution is the correct one for you can:&lt;br /&gt;&lt;br /&gt;1. ) &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5cfc9b74-97aa-4510-b4b9-b2dc98c8ed8b&amp;amp;displaylang=en"&gt;Download dheapmon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.) Open a command shell (Start - Run - "CMD")&lt;br /&gt;&lt;br /&gt;3.) Change your directory to the location of the executables (e.g. C:\kktools\dheapmon8.1\x86)&lt;br /&gt;&lt;br /&gt;4.) Type: &lt;span class="userInput"&gt;&lt;a href="http://support.microsoft.com/?scid=kb%3Ben-us%3B914216&amp;amp;x=10&amp;amp;y=8"&gt;&lt;span style="font-family:courier new;"&gt;dheapinst.exe -y srv*http://msdl.microsoft.com/download/symbols&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;5.) Type: &lt;span style="font-family:courier new;"&gt;dheapmon -l&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;6.) Type: &lt;span style="font-family:courier new;"&gt;dheapmon&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="userInput"&gt;Now you see:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/SqEgNn5Sf3I/AAAAAAAAAGA/MxtZNxTjb2g/s1600-h/Clipboard03.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 162px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/SqEgNn5Sf3I/AAAAAAAAAGA/MxtZNxTjb2g/s320/Clipboard03.jpg" alt="" id="BLOGGER_PHOTO_ID_5377614848476741490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="userInput"&gt;If you see a high utilization of the  &lt;/span&gt;&lt;span class="userInput"&gt;"WinSta0\Default " session e.g.&lt;/span&gt;&lt;span class="userInput"&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WinStation\Desktop            Heap Size(KB)    Used Rate(%)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; WinSta0\Default                            4096          95,6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;then the above solution will do the job for you because:&lt;br /&gt;&lt;br /&gt;"&lt;/span&gt;&lt;a href="http://support.microsoft.com/?scid=kb%3Ben-us%3B184802&amp;amp;x=15&amp;amp;y=10"&gt;The second SharedSection value (3072) is the size of the     desktop heap for each desktop that is associated with the "interactive" window     station &lt;i style="font-weight: bold;"&gt;WinSta0&lt;/i&gt;. User objects like hooks, menus, strings, and windows consume     memory in this desktop heap."&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;Warning&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As always be careful with what you do. Modifying your registry has the  potential to render your system useless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-3723969885460197633?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/3723969885460197633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=3723969885460197633' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3723969885460197633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3723969885460197633'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/09/how-to-fix-shared-heap-exhausted-or.html' title='How to fix: &quot;shared heap exhausted or damaged&quot;'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lzlxCOYiDHU/SqEesIiePQI/AAAAAAAAAF4/S4s7vsLu7SY/s72-c/Clipboard02.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-1307738848907114349</id><published>2009-08-27T02:35:00.000-07:00</published><updated>2009-09-28T12:44:05.319-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XSLCompiledTransform'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT 2'/><title type='text'>Where is Microsoft's  XSLT 2?</title><content type='html'>In &lt;span style="font-weight: bold;"&gt;January 2007&lt;/span&gt; you found this &lt;a href="http://blogs.msdn.com/xmlteam/archive/2007/01/29/xslt-2-0.aspx"&gt;announcement in the Microsoft XML Team Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"We are pleased to note that XSLT 2.0 and XPath 2.0 are now W3C Recommendations.  Microsoft contributed thousands of person-hours to the W3C efforts that developed these standards and is committed assist with the further development of XML standards at W3C.&lt;br /&gt;....&lt;br /&gt;Neither are yet implemented over standalone documents in our libraries, mainly because we have a policy of not implementing W3C specifications in the core System.Xml and MSXML libraries until they are official Recommendations. "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As XSLT 2 is still not found in any library  published by Microsoft, given their policies XSLT 2 is 2.5 years overdue.&lt;br /&gt;&lt;br /&gt;Even worse. I think no one has ever heard of XSLT 2 by Microsoft again. Just lately Microsoft has released the MSXML 6 ServicePack 3. Still nothing about XSLT 2.&lt;br /&gt;&lt;br /&gt;XSLT 1 is simply insufficient. Without the non XSLT 1 function node-set() you cannot even sum up two related fields like here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;Totalvalue&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       &amp;lt;xsl:value-of select="sum(./nominal * ./prices)"/&amp;gt;&amp;lt;!-- Not working in XSLT 1 --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/Totalvalue&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What about alternatives? There is for example &lt;a href="http://saxon.sourceforge.net/"&gt;Saxon&lt;/a&gt; that is both available for .Net and Java. But unfortunately Saxxon is still working as an interpreter. This eliminates this choice for high performance XSLT transformations, e.g. if you need to deserialize the result of the transformation into objects.&lt;br /&gt;&lt;br /&gt;So for high performance scenarios there is still no available XSLT 2 processor on the market for .Net which is, after Microsoft contributed thousands of hours to the standard, quite awkward in my eyes.&lt;br /&gt;&lt;br /&gt;I think it is definitely time for Microsoft to bring XSLT 2 to the masses, including a high performance XSLTCompiledtransform2 library for .Net.&lt;br /&gt;&lt;br /&gt;In order to raise the pressure, please &lt;a href="http://blogs.msdn.com/xmlteam/contact.aspx"&gt;write the Microsoft XML team&lt;/a&gt; why you need XSLT 2.&lt;br /&gt;&lt;br /&gt;On 23.09.2009 is asked through their team blog the following....&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-style: italic;"&gt;"Hi,&lt;br /&gt;&lt;br /&gt;I recently found out that IBM published a public beta regarding XSLT 2. Intel is obviously working on XSLT 2 as well.&lt;br /&gt;&lt;br /&gt;What is the status of XSLT 2 at Microsoft?&lt;br /&gt;&lt;br /&gt;Thanks,"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The answer to my question comes a week later...&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0); font-style: italic;"&gt;"Hi,&lt;br /&gt;&lt;br /&gt;While XML continues to be a key part of our platform going forward, we have decided not to pursue an XSLT 2.0 implementation at this time. If there is a specific XSLT task you’re trying to accomplish and are having difficulty with XSLT 1.0, please let us know and we’ll do our best to help.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;P."&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-1307738848907114349?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/1307738848907114349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=1307738848907114349' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1307738848907114349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1307738848907114349'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/08/where-is-microsofts-xslt-2.html' title='Where is Microsoft&apos;s  XSLT 2?'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-2729988727681871278</id><published>2009-03-28T14:12:00.001-07:00</published><updated>2009-09-19T02:14:07.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='crap'/><title type='text'>Biggest crap ever! Windows Vista</title><content type='html'>&lt;ul&gt;&lt;li&gt;Frequent Bluescreens&lt;/li&gt;&lt;li&gt;Applications that stop working one day to the next&lt;/li&gt;&lt;li&gt;WLAN stops connecting to any network one day to the next even after replacing hardware&lt;br /&gt;&lt;/li&gt;&lt;li&gt;5 reinstalls in 1 year with absolutely nothing but 3 games installed&lt;/li&gt;&lt;li&gt;Biggest mess in configuration dialogs ever&lt;/li&gt;&lt;li&gt;Tons of stupid questions&lt;/li&gt;&lt;li&gt;Inconsistencies in what files are in a directory&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Thanks Microsoft for the biggest crap a computer has ever seen. Windows Vista.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-2729988727681871278?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/2729988727681871278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=2729988727681871278' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2729988727681871278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2729988727681871278'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/03/biggest-crap-since-windows-98-windows.html' title='Biggest crap ever! Windows Vista'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-9222805822432275557</id><published>2009-03-13T09:20:00.000-07:00</published><updated>2009-03-13T09:22:24.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comments'/><category scheme='http://www.blogger.com/atom/ns#' term='svcutil'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Code Comments with svcutil</title><content type='html'>Unfortunately svcutil does not create comments from your XML annotations in your XSD or service WSDL. The more complex your data model gets the more the more you will miss this feature.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://my-tech-talk.blogspot.com/2009/03/injecting-code-into-net-assemblies.html"&gt;Well, you can be helped now.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-9222805822432275557?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/9222805822432275557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=9222805822432275557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/9222805822432275557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/9222805822432275557'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/03/code-comments-with-svcutil.html' title='Code Comments with svcutil'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-2031097419083275015</id><published>2009-03-13T06:12:00.000-07:00</published><updated>2009-03-13T11:11:40.544-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comments'/><category scheme='http://www.blogger.com/atom/ns#' term='svcutil'/><category scheme='http://www.blogger.com/atom/ns#' term='Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><category scheme='http://www.blogger.com/atom/ns#' term='annotations'/><title type='text'>Injecting Code into .NET Assemblies</title><content type='html'>What you need for this kind of surgery is:&lt;br /&gt;1.) &lt;a href="http://www.red-gate.com/products/reflector/"&gt;Reflector&lt;/a&gt;&lt;br /&gt;2.) &lt;a href="http://sebastien.lebreton.free.fr/reflexil/"&gt;Reflexil&lt;/a&gt; (Reflector plugin)&lt;br /&gt;3.) Your &lt;a href="http://www.evotegra.de/docs/svcutilImportCommentExtension.zip"&gt;DLL&lt;/a&gt; or custom Assembly to call some code&lt;br /&gt;4.) 10 Minutes time&lt;br /&gt;&lt;br /&gt;The patient:&lt;br /&gt;svcutil.exe  (C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\svcutil.exe)&lt;br /&gt;&lt;br /&gt;The enhancement: &lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.evotegra.de/docs/svcutilImportCommentExtension.zip"&gt;svcutilImportCommentExtension&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Primary Mission Goal:&lt;br /&gt;Pimp svcutil to create nice code comments in my DataContracts from my annotations in XSD ( /dconly Option )&lt;br /&gt;Secondary Mission Goal:&lt;br /&gt;Pimp svcutil to create nice code comments in my WCF proxies from my WCF Service WSDL&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.) Copy the patient&lt;br /&gt;&lt;br /&gt;2.) Start Reflector and&lt;br /&gt;a.) Open the copy of svcutil.exe&lt;br /&gt;b.) Open the DLL&lt;br /&gt;&lt;br /&gt;3.) Right click on svcutil and select "Go to entry Point".&lt;br /&gt;&lt;br /&gt;4.) Click on &lt;span style="font-family:courier new;"&gt;Main(string[] args)&lt;/span&gt;  in &lt;span style="font-family:courier new;"&gt;"return (int) runtime.Run();"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/SbpyAlQdI3I/AAAAAAAAAEQ/4BrUDse7cn0/s1600-h/DotNetInjectCode01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 274px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/SbpyAlQdI3I/AAAAAAAAAEQ/4BrUDse7cn0/s320/DotNetInjectCode01.jpg" alt="" id="BLOGGER_PHOTO_ID_5312684064763618162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5.) Click on &lt;span style="font-family:courier new;"&gt;ExecuteToolMode &lt;/span&gt;in "&lt;span style="font-family:courier new;"&gt;return this.ExecuteToolMode(toolMode, inputModule);&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;6.) Click on &lt;span style="font-family:courier new;"&gt;ImportDataContracts &lt;/span&gt;in "&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;.ImportDataContracts(inputModule)&lt;/span&gt;;"&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/SbpyA-b1MVI/AAAAAAAAAEY/4APq60ld8RI/s1600-h/DotNetInjectCode02.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 274px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/SbpyA-b1MVI/AAAAAAAAAEY/4APq60ld8RI/s320/DotNetInjectCode02.jpg" alt="" id="BLOGGER_PHOTO_ID_5312684071522218322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7.) Click on &lt;span style="font-family:courier new;"&gt;ImportDataContracts &lt;/span&gt;in "&lt;span style="font-family:courier new;"&gt;module.ImportDataContracts()&lt;/span&gt;;"&lt;br /&gt;&lt;br /&gt;8.) Click on "Tools - Reflexil 0.9"&lt;br /&gt;&lt;br /&gt;9.) Right click Line 7 "Call .... WriteConversionErrors" and select "Create New"&lt;br /&gt;Choose&lt;br /&gt;Opcode: &lt;span style="font-family:courier new;"&gt;ldstr&lt;/span&gt;&lt;br /&gt;Operand Type: &lt;span style="font-family:courier new;"&gt;string&lt;/span&gt;&lt;br /&gt;Operand: &lt;span style="font-family:courier new;"&gt;Calling svcutil extension....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finish with selecting "Insert &lt;u&gt;before&lt;/u&gt; selection"&lt;br /&gt;&lt;br /&gt;10.) Right click Line 7 which now contains our "ldstr..." and select "Create New"&lt;br /&gt;Choose&lt;br /&gt;Opcode: &lt;span style="font-family:courier new;"&gt;Call&lt;/span&gt;&lt;br /&gt;Operand Type: &lt;span style="font-family:courier new;"&gt;Method Reference&lt;/span&gt;&lt;br /&gt;Operand: &lt;span style="font-family:courier new;"&gt;svcutilImportCommentExtension - svcutilImportCommentExtension.dll - ContractGenTest - CommentWriter - &lt;/span&gt;&lt;u style="font-family: courier new;"&gt;Hello(System.String) : System.Void&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/SbpyBcdTODI/AAAAAAAAAEg/ag2P_tPLIbs/s1600-h/DotNetInjectCode03.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/SbpyBcdTODI/AAAAAAAAAEg/ag2P_tPLIbs/s320/DotNetInjectCode03.jpg" alt="" id="BLOGGER_PHOTO_ID_5312684079581444146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finish with selecting "Insert &lt;u&gt;after&lt;/u&gt; selection"&lt;br /&gt;&lt;br /&gt;11.) Right click Line 8 which now contains our "call Hello(..)." and select "Create New"&lt;br /&gt;Choose&lt;br /&gt;Opcode: &lt;span style="font-family:courier new;"&gt;ldarg.0&lt;/span&gt;&lt;br /&gt;Operand Type: &lt;span style="font-family:courier new;"&gt;None&lt;/span&gt;&lt;br /&gt;Operand:&lt;br /&gt;&lt;br /&gt;Finish with selecting "Insert &lt;u&gt;after&lt;/u&gt; selection"&lt;br /&gt;&lt;br /&gt;12.) Right click Line 9 which now contains our "ldarg.0" and select "Create New"&lt;br /&gt;Choose&lt;br /&gt;Opcode: &lt;span style="font-family:courier new;"&gt;ldfld&lt;/span&gt;&lt;br /&gt;Operand Type: Field Reference&lt;br /&gt;Operand: &lt;span style="font-family:courier new;"&gt;svcutil - svcutil.exe - Microsoft.Tools.ServiceModel.SvcUtil - ImportModule - &lt;/span&gt;&lt;u style="font-family: courier new;"&gt;schemas : System.Xml.XmlSchemaSet&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;13.) Right click Line 10 which now contains our "ldfld schemas" and select "Create New"&lt;br /&gt;Choose&lt;br /&gt;Opcode: &lt;span style="font-family:courier new;"&gt;ldarg.0&lt;/span&gt;&lt;br /&gt;Operand Type: &lt;span style="font-family:courier new;"&gt;None&lt;/span&gt;&lt;br /&gt;Operand:&lt;br /&gt;&lt;br /&gt;Finish with selecting "Insert &lt;u&gt;after&lt;/u&gt; selection"&lt;br /&gt;&lt;br /&gt;14.) Right click Line 11 which now contains our "ldarg.0" and select "Create New"&lt;br /&gt;Choose&lt;br /&gt;Opcode: &lt;span style="font-family:courier new;"&gt;ldfld&lt;/span&gt;&lt;br /&gt;Operand Type: &lt;span style="font-family:courier new;"&gt;Field Reference&lt;/span&gt;&lt;br /&gt;Operand: &lt;span style="font-family:courier new;"&gt;svcutil - svcutil.exe - Microsoft.Tools.ServiceModel.SvcUtil - ImportModule - &lt;/span&gt;&lt;u style="font-family: courier new;"&gt;codeCompileUnit : System.CodeDom.CodeCompileUnit&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Finish with selecting "Insert &lt;u&gt;after&lt;/u&gt; selection"&lt;br /&gt;&lt;br /&gt;15.) Right click Line 12 which now contains our "ldfld codeCompileUnit" and select "Create New"&lt;br /&gt;Choose&lt;br /&gt;Opcode: &lt;span style="font-family:courier new;"&gt;Call&lt;/span&gt;&lt;br /&gt;Operand Type: &lt;span style="font-family:courier new;"&gt;Method Reference&lt;/span&gt;&lt;br /&gt;Operand: &lt;span style="font-family:courier new;"&gt;svcutilImportCommentExtension - svcutilImportCommentExtension.dll - ContractGenTest - CommentWriter - &lt;/span&gt;&lt;u style="font-family: courier new;"&gt;WriteComments(System.Xml.Schema.SchemaSet,System.CodeDom.CodeCompileUnit) &lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/SbpyBmL4mGI/AAAAAAAAAEw/7LxzNQ2Fox4/s1600-h/DotNetInjectCode05.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/SbpyBmL4mGI/AAAAAAAAAEw/7LxzNQ2Fox4/s320/DotNetInjectCode05.jpg" alt="" id="BLOGGER_PHOTO_ID_5312684082192750690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finish with selecting "Insert &lt;u&gt;after&lt;/u&gt; selection"&lt;br /&gt;&lt;br /&gt;This is how ImportDataContracts should look like now....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/SbpzOK1fVwI/AAAAAAAAAE4/aLB78NqHsa4/s1600-h/DotNetInjectCode06.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 252px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/SbpzOK1fVwI/AAAAAAAAAE4/aLB78NqHsa4/s320/DotNetInjectCode06.jpg" alt="" id="BLOGGER_PHOTO_ID_5312685397700990722" border="0" /&gt;&lt;/a&gt;(Note that the Dissambler part should still display the unchanged code as we did not save it yet. This screenshot is taken from a already modified version...)&lt;br /&gt;&lt;br /&gt;Now click on the symbol "svcutil.exe" in the reflector and select "Save as". You will now get a warning that svcutil is a signed assembly. Select "Remove Strong Name - Remove Strong Name and update referencing assemblies" and &lt;u&gt;both&lt;/u&gt; windows. Now select "Save as" again and replace the file.&lt;br /&gt;&lt;br /&gt;Now when you call svcutil you should get....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/Sbp1z6qebBI/AAAAAAAAAFQ/F6rnBlB1y1g/s1600-h/DotNetInjectCode09.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 162px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/Sbp1z6qebBI/AAAAAAAAAFQ/F6rnBlB1y1g/s320/DotNetInjectCode09.jpg" alt="" id="BLOGGER_PHOTO_ID_5312688245218110482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and have some nice comments in your code collected from all your&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;xs:annotation&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;xs:documentation&amp;gt;.....&amp;lt;/xs:documentation&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;tags.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/Sbp1zz-F9XI/AAAAAAAAAFY/OZWijxHa198/s1600-h/DotNetInjectCode10.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 197px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/Sbp1zz-F9XI/AAAAAAAAAFY/OZWijxHa198/s320/DotNetInjectCode10.jpg" alt="" id="BLOGGER_PHOTO_ID_5312688243421345138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sweet.&lt;br /&gt;&lt;br /&gt;If you do the same for ImportServiceContracts() function you will be even able to create fully documented WCF proxies....&lt;br /&gt;&lt;br /&gt;Just make sure you this time you call&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;CommentWriter&lt;/span&gt;.WriteComments(WsdlImporter &lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;importer&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;, CodeCompileUnit compileUnit)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;using the&lt;br /&gt;&lt;br /&gt;Operand: &lt;span style="font-family:courier new;"&gt;svcutil - svcutil.exe - Microsoft.Tools.ServiceModel.SvcUtil - ImportModule - &lt;/span&gt;&lt;u style="font-family: courier new;"&gt;wsdlImporter: System.ServiceModel.Description&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;instead of the &lt;span style="font-family:courier new;"&gt;SchemaSet&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;This is how ImportServiceContracts should look like after your surgery...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/SbpzOQoW0pI/AAAAAAAAAFI/QiDqY9u9Wog/s1600-h/DotNetInjectCode08.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 252px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/SbpzOQoW0pI/AAAAAAAAAFI/QiDqY9u9Wog/s320/DotNetInjectCode08.jpg" alt="" id="BLOGGER_PHOTO_ID_5312685399256519314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To bad comments don't get exported in WCF WSDL's? Well think again and get &lt;a href="http://wcfextras.codeplex.com/"&gt;WCFExtras&lt;/a&gt;. A very nice WCF Extension to get XMLComments into WCF WSDL's as well as a working flat WSDL and support for Soap Headers.&lt;br /&gt;&lt;br /&gt;Mission accomplished&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-2031097419083275015?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/2031097419083275015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=2031097419083275015' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2031097419083275015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2031097419083275015'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/03/injecting-code-into-net-assemblies.html' title='Injecting Code into .NET Assemblies'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_lzlxCOYiDHU/SbpyAlQdI3I/AAAAAAAAAEQ/4BrUDse7cn0/s72-c/DotNetInjectCode01.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-866741683770710761</id><published>2009-03-03T01:46:00.000-08:00</published><updated>2009-03-07T03:43:52.506-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='IronXSLT'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Using Precompiled XSLT in .NET</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Using XSLT in .NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you specify a file using&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;XSLCompiledTranform&lt;/span&gt;.Load(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;filename)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;the first thing XSLCompiledTranform is going to do is to &lt;a href="http://msdn.microsoft.com/de-de/library/system.reflection.emit%28VS.80%29.aspx"&gt;emit&lt;/a&gt;/compile a set of unloadable &lt;a href="http://msdn.microsoft.com/de-de/library/system.reflection.emit%28VS.80%29.aspx"&gt;DynamicMethods&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Although this is going really fast this overhead costs around 50 - 200ms. So if total time for your conversion is around that time, using precompiled XSLT's can really improve things quite a bit. We use this scenario to do high performance yet standard translations in WCF-Services.&lt;br /&gt;&lt;br /&gt;To precompile your XSLT's you have 2 options:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The XSLTCompiler XSLTC.exe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First option is shipped with .NET 3.5 there and is a tool called &lt;span style="font-family:courier new;"&gt;XSLTC.exe&lt;/span&gt; which is basically a wrapper around the &lt;span style="font-family:courier new;"&gt;static &lt;span style="color: rgb(0, 204, 204);"&gt;XSLCompiledTransform&lt;/span&gt;.CompileToType()&lt;/span&gt; function. There is an &lt;a href="http://blogs.msdn.com/antosha/archive/2007/05/28/xsltc-compile-xslt-to-.net-assembly.aspx"&gt;excellent article&lt;/a&gt; by Anton Lapounov&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;. It even gives you some tips to speed things further up using ngen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I previously stated that &lt;span style="font-family:courier new;"&gt;XSLTC.exe&lt;/span&gt; can only compile one XSLT per assembly, but Andrew proved me wrong.&lt;br /&gt;I tried:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;XSLTC.exe *.xslt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;which won't work but if you take a closer look at the options&lt;br /&gt;&lt;span style=";font-family:Courier New;font-size:85%;"  &gt;&lt;span  lang="EN-US" style="font-size:10;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;xsltc [options] [/class:&lt;name&gt;] &lt;source&gt; [[/class:&lt;name&gt;] &lt;source&gt;...]&lt;/source&gt;&lt;/name&gt;&lt;/source&gt;&lt;/name&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;XSLTC.exe /out:MyXSLT.dll a.xslt b.xslt c.xslt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;should compile the XSLT's into a single assembly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;IronXSLT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Second option for this job is called &lt;a href="http://www.tkachenko.com/blog/archives/000703.html"&gt;IronXSLT&lt;/a&gt;. It is a Visual Studio plug in, that allows you to create a XSLT Library Project. You simply add your XSLT's to the project and after you build the solution they will be compiled into one DLL assembly. I installed it and it works fine with Visual Studio 2008 SP1. After you installed it you have a new project type called XSLT - XSLT Library. To configure it right click it in the solution explorer and select "Properties".&lt;br /&gt;&lt;br /&gt;The problem. Unfortunately it seems that its creator Oleg Tkachenko has &lt;a href="http://www.tkachenko.com/blog/archives/000703.html"&gt;abandoned his project&lt;/a&gt;  and no download is working anymore on the &lt;a href="http://www.tkachenko.com/blog/archives/000703.html"&gt;projects website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I found one of the last working IronXSLT downloads &lt;a href="http://www.dodownload.net/document-tools/ironxslt_03_download.html"&gt;here&lt;/a&gt; . I will try to contact Oleg in order to get the source published somewhere.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Performance Comparison&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Attached to the already above mentioned &lt;a href="http://blogs.msdn.com/antosha/archive/2006/07/16/xslcompiledtransform-slower-than-xsltransform.aspx#comments"&gt;article of Anton Lapounov&lt;/a&gt; there is some test code attached.&lt;br /&gt;&lt;br /&gt;I ran a couple of test and got the following results:&lt;br /&gt;&lt;br /&gt;using XSLTranform class&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&lt;br /&gt;XSLTranform&lt;/span&gt;.Load(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;filename)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 35,86 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 1,533 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 1,450 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 1,441 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 1,504 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 51,94 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 51,29 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 49,46 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 51,10 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 48,77 ms&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;using XSLCompiledTranform loading tranformation from file&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&lt;br /&gt;XSLCompiledTranform&lt;/span&gt;.Load(&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;filename)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Load time: 51,86 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 2,640 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 2,556 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 2,704 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 2,644 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 56,89 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 1,909 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 1,680 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 4,948 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 1,427 ms&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;using XSLCompiledTranform loading XSLTC precompiled Transformation&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;XSLCompiledTranform&lt;/span&gt;.Load(type T)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 5,252 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 0,057 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 0,034 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 0,061 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Load time: 0,031 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 8,936 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 2,302 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 1,545 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 1,457 ms&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transform time: 1,505 ms&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;using XSLCompiledTranform loading XSLTC precompiled and ngen'd Transformation&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&lt;br /&gt;XSLCompiledTranform&lt;/span&gt;.Load(type T)&lt;br /&gt;&lt;br /&gt;Load time: 4,596 ms&lt;br /&gt;Load time: 0,052 ms&lt;br /&gt;Load time: 0,035 ms&lt;br /&gt;Load time: 0,032 ms&lt;br /&gt;Load time: 0,031 ms&lt;br /&gt;------------------------&lt;br /&gt;Transform time: 2,917 ms&lt;br /&gt;Transform time: 2,446 ms&lt;br /&gt;Transform time: 1,584 ms&lt;br /&gt;Transform time: 1,457 ms&lt;br /&gt;Transform time: 1,472 ms&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-866741683770710761?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/866741683770710761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=866741683770710761' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/866741683770710761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/866741683770710761'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/03/using-precompiled-xslt-in-net.html' title='Using Precompiled XSLT in .NET'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-8252066099295900432</id><published>2009-02-27T07:52:00.000-08:00</published><updated>2009-03-07T03:41:07.219-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Edition'/><category scheme='http://www.blogger.com/atom/ns#' term='ANTS'/><category scheme='http://www.blogger.com/atom/ns#' term='Profiler'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>The Visual Studio 2008 Profiler  is....</title><content type='html'>in nice words....&lt;br /&gt;&lt;br /&gt;complete crap.&lt;br /&gt;&lt;br /&gt;I just upgraded my Visual Studio Professional 2008 Version to a 2800 USD Team Edition. Of course I installed SP1 first. The reason behind was that our WCF Service project is getting to a point where performance is getting relevant, so we needed to get some profiler results on our code.&lt;br /&gt;&lt;br /&gt;So if you think you can install Visual Studio Team or Developer Edition  and just hit a "Profile Code" button and get some results you are wrong.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;For some reason the profiler does not collect any data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"PRF0025: No data was collected" &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;is all I got the first day. No matter whether I used the "Sampling" or "Instrumentation" method. All I got was straight nothing.&lt;br /&gt;&lt;br /&gt;The documentation seems to be close to nothing as well. But then I stumbled into some web page and found out that the whole profiler thing is located in&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;%PROGRAMFILES%\Microsoft Visual Studio 9.0\Team Tools\Performance Tools&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is a little batch called &lt;span style="font-family:courier new;"&gt;VSPerfCLREnv.cmd&lt;/span&gt; which then can called with various options.&lt;br /&gt;But when you check out this little tool you find out that the whole profiler thing is based on enviroment variables. And guess what you have to do if you set one of the&lt;span style="font-family:courier new;"&gt; /global&lt;/span&gt; parameters...&lt;br /&gt;&lt;br /&gt;Yes reboot. Every time.&lt;br /&gt;&lt;br /&gt;After that at least could do some profiling with Instrumentation method.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Linq/Lambda Expressions are not handled appropriately&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But if the profiler did not collect any data before, now a single service function call collected more than 600MB of data. That's quite a lot if you think that the service function has not more than 100 lines of user code.&lt;br /&gt;&lt;br /&gt;It took a while to find out what happened.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;foreach &lt;/span&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;var &lt;/span&gt;item &lt;span style="color: rgb(51, 51, 255);"&gt;in&lt;/span&gt; items)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                item.StaticInstrument = fullStatics.Find(fs =&gt; fs.ID == item.StaticInstrument.ID);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;results in  600MB profiler data.&lt;br /&gt;&lt;br /&gt;Rewriting the code to use a dictionary instead the List extension method Find&lt;t&gt;(this List&lt;t&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;var &lt;/span&gt;itemDic = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Dictionary&lt;/span&gt;&lt;&lt;span style="color: rgb(51, 51, 255);"&gt;string&lt;/span&gt;, &lt;span style="color: rgb(51, 153, 153);"&gt;StaticInstrument&lt;/span&gt;&gt;();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;fullStatics.ForEach(singleStatic =&gt; itemDic[singleStatic.ID] = singleStatic);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;items.ForEach(item =&gt; item.StaticInstrument = itemDic[item.StaticInstrument.ID]);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;results in 2MB of profiler data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Functions are not displayed appropriatly in the reports.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But then the next disappointment is right behind the door.&lt;br /&gt;&lt;br /&gt;In the report I have various multiple summaries like&lt;br /&gt;&lt;br /&gt;Function Name:&lt;br /&gt;0x2B000015&lt;br /&gt;0x2B0000oE&lt;br /&gt;&lt;br /&gt;This is not really helpful. Especially as the values for function called by the disguised functions are not displayed at all. Everything just gets summed up.&lt;br /&gt;&lt;br /&gt;I took me another half day &lt;a href="http://msdn.microsoft.com/en-us/library/dd164415.aspx"&gt;to find out&lt;/a&gt; what is the reason behind this.&lt;br /&gt;&lt;br /&gt;In the above mentioned directory you find a tool called&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;VSPerfReport.exe &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if you pass call it like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;VSPerfReport.exe PATHTO\Report.vsp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I at least got&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Warning VSP2701 : Symbol Engine: File '.....dll' could not be found when looking for debug information. Full symbol/type resolution may not be possible&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But when you look at the location there is of course the DLL's symbol or pdb file right next to the dll. Why it still fails to load it, I don't know. I did not find any resolution for this problem yet.&lt;br /&gt;&lt;br /&gt;So for most of DLL's the report fails to load the symbols. The resulting report is really useless.&lt;br /&gt;&lt;br /&gt;I tried to write some mails to the guys from the &lt;a href="http://blogs.msdn.com/profiler/"&gt;Microsoft Profiler Team&lt;/a&gt; but it took a while to get some answer. See the comment for some suggestions from Marc Popkin-Paine. Unfortunately his suggestions don't work for me and meanwhile the profiler refuses again to collect any data at all.&lt;br /&gt;&lt;br /&gt;Here is what happens...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Successfully attached to process: 4828&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;VSPerformance Automation warning: Warning VSP2348 : 2 buffer(s) lost in association with process 4828.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Exited from process: 4828&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Collection file exited: C:\Development\WCFServices\SCDService\SCDServices090305.vsp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Profiler exited&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PRF0025: No data was collected. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So if you ever thought about about spending money on Team or Developer Edition to use the profiler.... Save the money. The profiler is complete crap. You even have to be careful with it.  I might &lt;a href="http://blogs.msdn.com/profiler/archive/2009/02/24/patch-released-to-fix-sampling-on-intel-core-i7-processors.aspx"&gt;crash your system&lt;/a&gt; with a blue screen of death. The reason behind this is that they obviously access the bios to get the exact number of clock cycles. Because of the different BIOS this is the reason, why it sampling does work for a certain number of systems. But this raises another question. Why the heck can a user process in Windows still read/write the bios and crash the system?&lt;br /&gt;&lt;br /&gt;So in short...&lt;br /&gt;&lt;br /&gt;With the Microsoft Profiler I wasted a lot of money and time without getting any useful results.&lt;br /&gt;&lt;br /&gt;I have evaluated the current ANTS 4.3 profiler. ANTS works right out of the box and here I can see all functions but the disadvantage is a huge overhead. ANTS tries to eliminate the overhead in the calculation but is not totally succesful with this task.&lt;/t&gt;&lt;/t&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-8252066099295900432?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/8252066099295900432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=8252066099295900432' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/8252066099295900432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/8252066099295900432'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/02/visual-studio-2008-profiler-is.html' title='The Visual Studio 2008 Profiler  is....'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-990410303379803616</id><published>2009-02-18T09:54:00.000-08:00</published><updated>2009-02-19T02:43:24.154-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='costs'/><category scheme='http://www.blogger.com/atom/ns#' term='designer'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='disadvantages'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Screw Silverlight</title><content type='html'>The thought behind evaluating Silverlight 2 was to check whether Silverlight is suited to build rich office applications, that can be handled just like common GUI applications but just in IE. Another central question was to verify that I can use my Xaml controls from WPF applications seamlessly in Silverlight 2.&lt;br /&gt;So I am really not interested in fancy design, multimedia and other special effects that seems to be the general target audience for Silverlight 2.&lt;br /&gt;&lt;br /&gt;First thing you have to do when you try to evaluate Silverlight 2 with Visual Studio you have to &lt;a href="http://silverlight.net/GetStarted/"&gt;download  &lt;/a&gt;a whole bunch off applications. Most important it seemed to install the Silverlight Tools for Visual Studio 2008 SP1 .&lt;br /&gt;&lt;br /&gt;After downloading some 70 megs of data the the first frustration is right around the corner,  if you have to use an authenticating proxy to get Internet access.&lt;br /&gt;&lt;br /&gt;Though you have to download some 70 megs the package needs to download more data. And of course there is nowhere a full package. Even more unfortunate it seems that until today  Microsoft has never heard anything of a thing called authenticating proxy and consequently the install fails. Sigh.&lt;br /&gt;Call it a act of despair and interest I programmed my own little authenticating proxy bridge that acts as proxy and forwards each request to the real proxy plus adding the required authentication information. So finally I was able to install the tools.&lt;br /&gt;&lt;br /&gt;Ok, so I created a new Silverlight project, opened the toolbox, took a button and dropped it onto the designer and...&lt;br /&gt;&lt;br /&gt;the designer won't let me do that.&lt;br /&gt;&lt;br /&gt;Although we have a fully fledged Xaml designer in WPF, there is absolutely no way to add a control in the designer in Silverlight. You are supposed to drag the items out of the toolbox into the Xaml text editor where it does nothing but adding the following code&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;Button&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: rgb(204, 102, 0);"&gt;Button&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wow, what an awesome and intuitive feature for my 1500 USD Visual Studio.&lt;br /&gt;&lt;br /&gt;Ok, lets hand code my button. After setting the button properties width and height you would like some text on your button.&lt;br /&gt;&lt;br /&gt;So you code&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-family:courier new;" &gt;Button &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;Width&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"100"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;Height&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"20"&amp;gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;Press me&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-family:courier new;" &gt;Button&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is perfect Xaml,  even Expression Blend will code it that way, it works fine for WPF, but .....&lt;br /&gt;&lt;br /&gt;that is not good enough for Silverlight.&lt;br /&gt;&lt;br /&gt;"Button does not support text content" is the error. It turns out that if you want to get it to work with Silverlight you have to code it&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-family:courier new;" &gt;Button &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;Width&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"100"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;Height&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"20"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;Content&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;=&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"Press me"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So let me get this straight.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You have to download at least 4 packages to start with silverlight.&lt;/li&gt;&lt;li&gt;Even then these packages need to download more data and neither there are full packages available nor does the setup support simple things like authenticating proxies.&lt;br /&gt;No Internet access means no Silverlight.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The nice Xaml designer shipped with WPF had been crippled for Silverlight to be absolutely useless.&lt;/li&gt;&lt;li&gt;The Xaml for Silverlight is incompatible with other Xaml.&lt;/li&gt;&lt;li&gt;If you do not want to hand code every GUI element and if even if you have the 1500 USD Team Edition of Visual Studio 2008 you need to buy Expression Blend 2 for just another 699 USD.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ok guys,&lt;br /&gt;&lt;br /&gt;this is where my evaluation comes to an abrupt end after just 60 minutes and tell you what....&lt;br /&gt;&lt;br /&gt;Screw Silverlight 2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-990410303379803616?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/990410303379803616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=990410303379803616' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/990410303379803616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/990410303379803616'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/02/screw-silverlight.html' title='Screw Silverlight'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-5198345433160402933</id><published>2009-01-28T05:10:00.000-08:00</published><updated>2009-01-28T12:48:16.446-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><category scheme='http://www.blogger.com/atom/ns#' term='setup'/><category scheme='http://www.blogger.com/atom/ns#' term='UDDI'/><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Services'/><title type='text'>UDDI SOA Howto</title><content type='html'>This article describes how to set up and configure and Windows Server 2003 UDDI Services.&lt;br /&gt;UDDI Services are IIS hosted web services that require some kind of database.&lt;br /&gt;&lt;br /&gt;So before installing UDDI Services you need to have IIS up and running.&lt;br /&gt;&lt;br /&gt;Click on the screenshots to get a larger image.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.) Add UDDI Server Component&lt;/span&gt;&lt;br /&gt;Choose&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Start - Settings - Control Panel - &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;Add or Remove Programs - Add Remove Windows Compontents&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;2.) Pick UDDI Services&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYBhEppW5XI/AAAAAAAAABQ/es1ADsUbdQQ/s1600-h/uddi_howto_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYBhEppW5XI/AAAAAAAAABQ/es1ADsUbdQQ/s320/uddi_howto_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5296339894314394994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.) Choose your Database&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Choose the database component of your choice&lt;br /&gt;&lt;br /&gt;If you do not have any SQL Server installed choose "Create a new MSDE database instance"&lt;br /&gt;If you have SQL Server 2000 installed choose "Use the following SQL Server 2000 instance"&lt;br /&gt;If you have SQL Server 2005 installed please &lt;a href="http://support.microsoft.com/default.aspx/kb/927230"&gt;follow this instruction&lt;/a&gt; before choosing "Use the following SQL Server 2000 instance" option&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYBhJm44UcI/AAAAAAAAABY/fx_yayXaRYk/s1600-h/uddi_howto_2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYBhJm44UcI/AAAAAAAAABY/fx_yayXaRYk/s320/uddi_howto_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5296339979473539522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you get the error message:&lt;br /&gt;"This database instance does not meet the minimum version or Service Pack level requirements and cannot be used for installation. Please upgrade this instance or select another one."&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYBhbIdvOcI/AAAAAAAAACI/qwO1pz1vxdA/s1600-h/uddi_howto_2005_exception.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 53px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYBhbIdvOcI/AAAAAAAAACI/qwO1pz1vxdA/s320/uddi_howto_2005_exception.jpg" alt="" id="BLOGGER_PHOTO_ID_5296340280544278978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;it means you try to install UDDI Services on a server running SQL Server 2005 and you did not &lt;a href="http://support.microsoft.com/kb/927230"&gt;follow the instructions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.) SSL-encryption&lt;/span&gt;&lt;br /&gt;If you have SSL configured for your IIS you can enable this option. If you do not have SSL enabled you can disable it here and enable it later when you SSL enabled your IIS.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYBhM3SpG1I/AAAAAAAAABg/3BLAnLNi7J8/s1600-h/uddi_howto_3_ssl.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYBhM3SpG1I/AAAAAAAAABg/3BLAnLNi7J8/s320/uddi_howto_3_ssl.jpg" alt="" id="BLOGGER_PHOTO_ID_5296340035416169298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5.) Choose setup location&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just choose the path where to install UDDI Services&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/SYBhQOdhJBI/AAAAAAAAABo/3X9vlYorq1M/s1600-h/uddi_howto_4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/SYBhQOdhJBI/AAAAAAAAABo/3X9vlYorq1M/s320/uddi_howto_4.jpg" alt="" id="BLOGGER_PHOTO_ID_5296340093175407634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6.) Choose the user&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Choose the user UDDI Services will use&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYBhTDzyX0I/AAAAAAAAABw/9iCbwmZLXEU/s1600-h/uddi_howto_5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYBhTDzyX0I/AAAAAAAAABw/9iCbwmZLXEU/s320/uddi_howto_5.jpg" alt="" id="BLOGGER_PHOTO_ID_5296340141855629122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7.) Pick a name for your UDDI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYBhVyhQgpI/AAAAAAAAAB4/aHoXHVjnXUc/s1600-h/uddi_howto_6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYBhVyhQgpI/AAAAAAAAAB4/aHoXHVjnXUc/s320/uddi_howto_6.jpg" alt="" id="BLOGGER_PHOTO_ID_5296340188754117266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;8.) Disable "self register"&lt;/span&gt;&lt;br /&gt;This is somehow related to publish the UDDI in Active Directory. I am not really sure what it does so disable it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYBhYp36LvI/AAAAAAAAACA/pBxMGFqOpNI/s1600-h/uddi_howto_7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYBhYp36LvI/AAAAAAAAACA/pBxMGFqOpNI/s320/uddi_howto_7.jpg" alt="" id="BLOGGER_PHOTO_ID_5296340237972811506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Great, we have UDDI Services up and running. Whats next?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Configuration of UDDI virtual directories access&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1.) Open &lt;span style="font-style: italic;"&gt;Computer Mangement&lt;/span&gt; snapin&lt;br /&gt;Choose&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Start - Settings - Control Panel - Administrative Tools - Computer Management&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;2.) Configure IIS "uddi" virtual directory to use &lt;span style="font-style: italic;"&gt;Windows Authentication&lt;/span&gt;&lt;br /&gt;in the computer management snap in go to&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Internet Information Services - Web Sites - Default Web Site&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right click "uddi" and select &lt;span style="font-style: italic;"&gt;Properties&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Click on Directory Security, disable anonymous access and tick &lt;span style="font-style: italic;"&gt;Integrated Windows authentication&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/SYBmrk4HIEI/AAAAAAAAACQ/iuZR4rvxYx8/s1600-h/IIS_config_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/SYBmrk4HIEI/AAAAAAAAACQ/iuZR4rvxYx8/s320/IIS_config_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5296346060607135810" border="0" /&gt;&lt;/a&gt;3.) Configure IIS "uddipublic" virtual directory to use &lt;span style="font-style: italic;"&gt;UDDI Authentication&lt;/span&gt;&lt;br /&gt;in the computer management snap in go to&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Internet Information Services - Web Sites - Default Web Site&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right click&lt;span style="font-style: italic;"&gt; "&lt;/span&gt;uddipublic"&lt;span style="font-style: italic;"&gt; &lt;/span&gt;and select &lt;span style="font-style: italic;"&gt;Properties&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Click on &lt;span style="font-style: italic;"&gt;Directory Security&lt;/span&gt;, enable anonymous access.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYBng7G3vTI/AAAAAAAAACY/CJJ0kd_PPNc/s1600-h/IIS_config_2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 253px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYBng7G3vTI/AAAAAAAAACY/CJJ0kd_PPNc/s320/IIS_config_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5296346977107688754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Great, we have configured UDDI Service authentication. Whats next?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Create Windows Publishing User account&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In standard configuration every user in servers Administrators group has the right to publish Services.&lt;br /&gt;But I really recommend creating a special user account for publishing UDDI service. That has the advantage you get all services published under one user, which gives you a much better overview over your running services.&lt;br /&gt;&lt;br /&gt;In this case I created a User "UDDIAdmin" and added him to the "Administrators" group.&lt;br /&gt;&lt;br /&gt;Now log in with your "UDDIAdmin" account,  open Internet Explorer and type:&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Publish a service on UDDI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;http://localhost/uddi/&lt;br /&gt;&lt;br /&gt;Now Click on Publish on you will see:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYC46-f8gFI/AAAAAAAAACo/A19k-Ipa0Ps/s1600-h/uddi_ie1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 298px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYC46-f8gFI/AAAAAAAAACo/A19k-Ipa0Ps/s320/uddi_ie1.jpg" alt="" id="BLOGGER_PHOTO_ID_5296436485136613458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First thing we have to do is to create a provider. A "provider" is also referred as a "business" in UDDI terms. Basically the provider or business is just an embracing category for our services.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create a Provider&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right click on provider and select "Add Provider". Then click on the new provider and edit the name to be "MyProvider".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_lzlxCOYiDHU/SYC5EVZgvWI/AAAAAAAAACw/nv51qelY5-M/s1600-h/uddi_ie2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 252px;" src="http://4.bp.blogspot.com/_lzlxCOYiDHU/SYC5EVZgvWI/AAAAAAAAACw/nv51qelY5-M/s320/uddi_ie2.jpg" alt="" id="BLOGGER_PHOTO_ID_5296436645902466402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create a Service&lt;/span&gt;&lt;br /&gt;Now right click on Provider and select "Add Service". Then click on the new service and edit the name to be "MyService".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYC52hSWrzI/AAAAAAAAADA/538KKn54Yno/s1600-h/uddi_ie3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 250px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/SYC52hSWrzI/AAAAAAAAADA/538KKn54Yno/s320/uddi_ie3.jpg" alt="" id="BLOGGER_PHOTO_ID_5296437508087131954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create a binding&lt;/span&gt;&lt;br /&gt;Now right click on Service and select "Add Binding". Then click on the new binding and edit the URL to be the URL to your Service. "http://myserver/myservice.svc" in this case.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create a tModel&lt;/span&gt;&lt;br /&gt;Now right click on tModels and select "Add tModel". Then click on the new tModel and edit the name to be "MytModel".&lt;br /&gt;What not really required but what makes it more UDDI is the following...&lt;br /&gt;Click on the "Categories" tab and click on "Add Category". Now select "uddi-org:types" "Specification for a web service" "Specification for a web service described in WSDL" and click on "Add Category".&lt;br /&gt;Now click on the "Overview Document" tab. Click on "Edit" and paste a link to the wsdl document of the service. e.g. http://myserver/myservice.svc?WSDL.&lt;br /&gt;&lt;br /&gt;You could use these attributes later to pick the right tModel&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYC6I-aAGDI/AAAAAAAAADI/9T6RCNZXNjg/s1600-h/uddi_ie4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 252px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/SYC6I-aAGDI/AAAAAAAAADI/9T6RCNZXNjg/s320/uddi_ie4.jpg" alt="" id="BLOGGER_PHOTO_ID_5296437825141479474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Add instace Info&lt;/span&gt;&lt;br /&gt;Now as a last step right click on your service select "Add instance info". Now type in "My" in the search box click on search and select "MytModel" from the list.&lt;br /&gt;&lt;br /&gt;Done. We have published our first service in the UDDI.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYC63Ykd6QI/AAAAAAAAADQ/rSJK5c8PKZ4/s1600-h/uddi_ie5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 250px;" src="http://1.bp.blogspot.com/_lzlxCOYiDHU/SYC63Ykd6QI/AAAAAAAAADQ/rSJK5c8PKZ4/s320/uddi_ie5.jpg" alt="" id="BLOGGER_PHOTO_ID_5296438622438680834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Great, but what I do now with my UDDI?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;A simple UDDI query in C#&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can install the Windows Server 2003 SDK or simply add a link to Microsoft.UDDI.dll in your C# project. Where to find those is &lt;a href="http://my-tech-talk.blogspot.com/2009/01/dealing-with-microsoft-uddi-services.html"&gt;described here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now implement the following code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;//URL to your UDDI directory&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;uDDIURL = &lt;span style="color: rgb(153, 0, 0);"&gt;"http://myserver.com/uddi/"&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;// Take your tModel Key here. Look on the screenshots&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;modelKey = &lt;span style="color: rgb(153, 51, 0);"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 51, 0);font-family:courier new;" id="tabs__ctl0_tModelKey" &gt;uuid:25f0c31f-1846-4f8c-919b-3164ffae3ed2"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;// Take your service Key here. Look on the screenshots&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;string &lt;/span&gt;serviceKey= &lt;span style="color: rgb(153, 0, 0);"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-family:courier new;" id="tabs__ctl0_serviceKey" &gt;49263d91-85e7-4285-b36c-a217d6a8e1b9&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-family:courier new;" id="tabs__ctl0_tModelKey" &gt;"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// Create UDDI location object&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(0, 204, 204);"&gt;UddiSiteLocation &lt;/span&gt;_siteLocation = new &lt;span style="color: rgb(0, 204, 204);"&gt;UddiSiteLocation&lt;/span&gt;(uDDIURL + &lt;span style="color: rgb(153, 51, 0);"&gt;"inquire.asmx"&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                uDDIURL + &lt;span style="color: rgb(153, 51, 0);"&gt;"publish.asmx"&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                uDDIURL + &lt;span style="color: rgb(153, 51, 0);"&gt;"extension.asmx"&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                string.Empty,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                Microsoft.Uddi.&lt;span style="color: rgb(0, 204, 204);"&gt;AuthenticationMode&lt;/span&gt;.WindowsAuthentication);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;            // Initialize a new instance of the FindBinding class used to locate the service.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;            // Add the service key to the binding.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(0, 204, 204);"&gt;FindBinding &lt;/span&gt;_findBinding = new &lt;span style="color: rgb(0, 204, 204);"&gt;FindBinding&lt;/span&gt;(modelKey);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            _findBinding.ServiceKey = serviceKey;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;            // Create the managed URL object. It is dynamically updated by the UDDI Registry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(0, 204, 204);"&gt;UddiConnection &lt;/span&gt;_connection = new &lt;span style="color: rgb(0, 204, 204);"&gt;UddiConnection&lt;/span&gt;(_siteLocation);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(0, 204, 204);"&gt;ManagedURL &lt;/span&gt;managedURL = new &lt;span style="color: rgb(0, 204, 204);"&gt;ManagedUrl&lt;/span&gt;(_connection, _findBinding);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(51, 51, 255);"&gt;if&lt;/span&gt; (managedURL.Count &gt; 0) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    &lt;span style="color: rgb(0, 204, 204);"&gt;Console&lt;/span&gt;.WriteLine("Hooray we did it");&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Please keep in mind the managedURL object now keeps a steady connection with the UDDI and gets information on newly published or removed services. So there is absolutely no need to recreate the manageURL object in order to refresh it.&lt;br /&gt;&lt;br /&gt;Further tips regardings UDDI Services &lt;a href="http://my-tech-talk.blogspot.com/2009/01/dealing-with-microsoft-uddi-services.html"&gt;can be found here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For further examples please see &lt;a href="http://www.codeproject.com/KB/WCF/uddiservicefactory.aspx"&gt;this article on codeproject.com&lt;/a&gt; which includes some source code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-5198345433160402933?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/5198345433160402933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=5198345433160402933' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5198345433160402933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5198345433160402933'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/01/uddi-soa-howto.html' title='UDDI SOA Howto'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_lzlxCOYiDHU/SYBhEppW5XI/AAAAAAAAABQ/es1ADsUbdQQ/s72-c/uddi_howto_1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-8853549149981064413</id><published>2009-01-13T10:39:00.000-08:00</published><updated>2009-02-03T08:46:13.142-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='DLL'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='UDDI'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Dealing with Microsoft UDDI services</title><content type='html'>&lt;span style="font-weight: bold;"&gt;How do I install and setup Microsoft UDDI Services?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Read the &lt;a href="http://my-tech-talk.blogspot.com/2009/01/uddi-soa-howto.html"&gt;UDDI SOA Howto&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Where to get the UDDI samples?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Microsoft did not include the UDDI samples in the current &lt;span style="font-style: italic;"&gt;Windows SDK for Windows Server 2008 and .Net Framework 3.5&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Therefore you need to install the old &lt;a href="http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm"&gt;Windows Server 2003 SDK&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;After you installed the Core SDK you find the samples in&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;%PROGRAMFILES%\Microsoft SDK\samples\UDDI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Where to get Microsoft.UDDI.DLL?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You find it if you install the Windows Server 2003 SDK you find it in&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;%PROGRAMFILES%\Microsoft SDK\bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or if you installed .NET 3.0 you find it in&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;%PROGRAMFILES%\Reference Assemblies\Microsoft\UDDI\v2.1\bin\system32&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;How to turn on Debugging?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you want to turn on Debugging use &lt;span style="font-style: italic;"&gt;regedit&lt;/span&gt; and goto:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[HKLM\SOFTWARE\Microsoft\UDDI\Debug]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;set &lt;span style="font-style: italic;"&gt;FileLogLevel&lt;/span&gt; to the appropriate value. Possible values are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    0 = None&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    1 = Error,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    2 = Warning,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    3 = FailAudit,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    4 = PassAudit,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    5 = Info ,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    6 = Verbose &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where 6 (Verbose) prints the most information into the file specified by &lt;span style="font-style: italic;"&gt;LogFileName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How to configure another virtual directory for UDDI?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Open the &lt;span style="font-style: italic;"&gt;IIS Manager&lt;/span&gt;, right click on &lt;span style="font-style: italic;"&gt;Default Web Site&lt;/span&gt; and select &lt;span style="font-style: italic;"&gt;New Virtual directory&lt;/span&gt;. Select a name for the alias, then select the UDDI/webroot folder (e.g. "c:\inet\uddi\webroot" ). Then select the &lt;span style="font-style: italic;"&gt;Read, Run Scripts &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;Browse &lt;/span&gt;permission. After the wizard finishes right click on the virtual directoy and select &lt;span style="font-style: italic;"&gt;Properties&lt;/span&gt;. Now change the &lt;span style="font-style: italic;"&gt;Application Pool to&lt;/span&gt; "MSUDDIAppPool". Last thing is to select the ASP.NET tab and change the ASP.NET Version to 1.1.4322.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;How to configure Authentication?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Microsoft UDDI offers basically 2 different types of authentication.&lt;br /&gt;&lt;br /&gt;Windows Authentication and UDDIAuthentication. The difference is that in Windows Authentication you do not have to specify a Username and Password when you create the UDDIConnection object.&lt;br /&gt;&lt;br /&gt;Windows Authentication&lt;br /&gt;In Windows Authentication you do not have to specify a Username and Password. UDDI simply takes the Usercredentials received by the UDDI web service.  To configure UDDI for using Windows credentials open the IIS Manager, right click the virtual directory (e.g. uddi or uddipublic), go to the &lt;span style="font-style: italic;"&gt;Directory Security&lt;/span&gt; tab and click on &lt;span style="font-style: italic;"&gt;Authentication and access control. &lt;/span&gt; Now make sure "Enable anonymous access" is disabled and &lt;span style="font-style: italic;"&gt;Authenticated access&lt;/span&gt; is set to Integrated Windows authentication.&lt;br /&gt;&lt;br /&gt;Ok, whats UDDIAuthentication?&lt;br /&gt;When you use UDDIAuthentication you specify a Username and Password when you create the UDDIConnection object. However this user has to be a valid windows user account and has to have appropriate permissions.  Using UDDIAuthentication the authentication of the account is not enforced by IIS but the UDDI Service will authenticate the user.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;To configure UDDI for doing  UDDI authentication open the IIS Manager, right click the virtual directory (e.g. uddi or uddipublic), go to the &lt;span style="font-style: italic;"&gt;Directory Security&lt;/span&gt; tab and click on &lt;span style="font-style: italic;"&gt;Authentication and access control. &lt;/span&gt; Now make sure "Enable anonymous access" is enabled.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now use the following pattern:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 204, 204);font-family:courier new;" &gt;UddiSiteLocation &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;location = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 204, 204);font-family:courier new;" &gt;UddiSiteLocation&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    httpServerName + &lt;span style="color: rgb(204, 0, 0);"&gt;"inquire.asmx"&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    httpsServerName + &lt;span style="color: rgb(204, 0, 0);"&gt;"publish.asmx"&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    httpServerName + &lt;span style="color: rgb(204, 0, 0);"&gt;"extension.asmx"&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    "My Site",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    AuthenticationMode.UddiAuthentication);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;UddiConnection &lt;/span&gt;oConnect = new &lt;span style="color: rgb(51, 153, 153);"&gt;UddiConnection&lt;/span&gt;(location, &lt;span style="color: rgb(204, 0, 0);"&gt;@"Domain\Username"&lt;/span&gt;, &lt;span style="color: rgb(153, 0, 0);"&gt;"Password"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oConnect.AutoGetAuthToken = &lt;span style="color: rgb(51, 51, 255);"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The secret to UDDI Authentication&lt;/span&gt;&lt;br /&gt;1.) Try to the current user out the current HTTPContext (Windows Authentication)&lt;br /&gt;2.) Query the Security.Authentication Mode Parameter which is set in the UDDI Database in table UDO_config.&lt;br /&gt;3.) If the Security.Authentication Mode parameter is set to 8 UDDI tries Passport authentication.&lt;br /&gt;4.) Windows Authentication is only used if the current user is not the anonymous user (Anonymous Access is disabled) and you did not specify a username in the connection.&lt;br /&gt;5.) By Default UDDIAuthentication is used.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;public AuthToken GetAuthToken(GetAuthToken gat)&lt;br /&gt;{&lt;br /&gt;Debug.Enter();&lt;br /&gt;AuthToken token = new AuthToken();&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;IIdentity identity = HttpContext.Current.User.Identity;&lt;br /&gt;int @int = Config.GetInt("Security.AuthenticationMode", 3);&lt;br /&gt;if (8 == @int)&lt;br /&gt;{&lt;br /&gt;if (!(identity is PassportIdentity))&lt;br /&gt;{&lt;br /&gt;throw new UDDIException(ErrorType.E_fatalError, "UDDI_ERROR_PASSPORT_CONFIGURATION_ERROR");&lt;br /&gt;}&lt;br /&gt;Debug.Write(SeverityType.Info, CategoryType.Soap, "Generating credentials for Passport based authentication&lt;br /&gt;dentity is " + gat.UserID);&lt;br /&gt;PassportAuthenticator authenticator = new PassportAuthenticator();&lt;br /&gt;if (!authenticator.GetAuthenticationInfo(gat.UserID, gat.Cred, out token.AuthInfo))&lt;br /&gt;{&lt;br /&gt;throw new UDDIException(ErrorType.E_unknownUser, "USER_FAILED_AUTHENTICATION");&lt;br /&gt;}&lt;br /&gt;if (!authenticator.Authenticate(token.AuthInfo, 0x3840))&lt;br /&gt;{&lt;br /&gt;throw new UDDIException(ErrorType.E_unknownUser, "UDDI_ERROR_USER_FAILED_AUTHENTICATION");&lt;br /&gt;}&lt;br /&gt;if (!Context.User.IsVerified)&lt;br /&gt;{&lt;br /&gt;throw new UDDIException(ErrorType.E_unknownUser, "UDDI_ERROR_NOT_A_VALID_PUBLISHER");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else if ((!((WindowsIdentity) identity).IsAnonymous &amp;amp;&amp;amp; ((@int &amp;amp; 2) != 0)) &amp;amp;&amp;amp; Utility.StringEmpty(gat.UserID))&lt;br /&gt;{&lt;br /&gt;Debug.Write(SeverityType.Info, CategoryType.Soap, "Generating credentials for Windows based authentication&lt;br /&gt;Identity is " + identity.Name);&lt;br /&gt;new WindowsAuthenticator().GetAuthenticationInfo(gat.UserID, gat.Cred, out token.AuthInfo);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;if ((@int &amp;amp; 1) == 0)&lt;br /&gt;{&lt;br /&gt;throw new UDDIException(ErrorType.E_unsupported, "UDDI_ERROR_AUTHENTICATION_CONFIGURATION_ERROR");&lt;br /&gt;}&lt;br /&gt;Debug.Write(SeverityType.Info, CategoryType.Soap, "Generating credentials for UDDI based authentication");&lt;br /&gt;new UDDIAuthenticator().GetAuthenticationInfo(gat.UserID, gat.Cred, out token.AuthInfo);&lt;br /&gt;}&lt;br /&gt;Debug.Write(SeverityType.Info, CategoryType.Soap, "Windows Identity is " + WindowsIdentity.GetCurrent().Name);&lt;br /&gt;Debug.Write(SeverityType.Info, CategoryType.Soap, "Thread Identity is " + Thread.CurrentPrincipal.Identity.Name);&lt;br /&gt;Debug.Write(SeverityType.Info, CategoryType.Soap, "HttpContext Identity is " + identity.Name);&lt;br /&gt;Debug.Verify(Context.User.IsPublisher, "UDDI_ERROR_NO_PUBLISHER_CREDENTIALS", ErrorType.E_fatalError, new&lt;br /&gt;bject[] { Context.User.ID });&lt;br /&gt;Debug.Write(SeverityType.Info, CategoryType.Authorization, "Authenticated user (userid = " + gat.UserID + " )");&lt;br /&gt;}&lt;br /&gt;catch (Exception exception)&lt;br /&gt;{&lt;br /&gt;DispositionReport.Throw(exception);&lt;br /&gt;}&lt;br /&gt;return token;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Errors and Solutions&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;If authentication fails with "Authetication failed" and in the UDDI log you will see.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;FAIL  AUTH  2009/01/13 18:09:14  System.ArgumentOutOfRangeException: Length cannot be less than zero.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        Parameter name: length&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           at System.String.Substring(Int32 startIndex, Int32 length)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           at UDDI.API.Authentication.UDDIAuthenticator.GetAuthenticationInfo(String userid, String password, String&amp;amp; ticket)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dont forget to put an @ before the string specifying the username so use:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;string szUsername = @"Domain\User";&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-8853549149981064413?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/8853549149981064413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=8853549149981064413' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/8853549149981064413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/8853549149981064413'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/01/dealing-with-microsoft-uddi-services.html' title='Dealing with Microsoft UDDI services'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-1133881179638295877</id><published>2009-01-12T05:16:00.000-08:00</published><updated>2009-01-12T17:25:52.839-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http://tempuri.org/'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>How to get rid of http://tempuri.org/ in WCF WSDL</title><content type='html'>"Each XML Web Service needs a unique namespace in order for client applications to distinguish it from other services on the Web.  By default, ASP.Net Web Services use http://tempuri.org/ for this purpose.  While this suitable for XML Web Services under development, published services should use a unique, permanent namespace.&lt;span&gt;&lt;/span&gt;" (&lt;a href="http://tempuri.org"&gt;http://tempuri.org&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;By default WCF maps all service operations to the targetnamespace &lt;span style="font-style: italic;"&gt;http://tempuri.org/&lt;/span&gt; .&lt;br /&gt;The problem with this approach occurs as soon as you as you need to uniquely indentify a service operation and you have more than just one service. e.g. in Biztalk or Microsoft Managed Service Engine.&lt;br /&gt;Guess you have a 2 services both with the &lt;span style="font-style: italic;"&gt;DoSomeThing()&lt;/span&gt; function. As both use the &lt;span style="font-style: italic;"&gt;http://tempuri.org&lt;/span&gt; namespace for their operations, you can't uniquely indentify them.&lt;br /&gt;&lt;br /&gt;To get rid of &lt;span style="font-style: italic;"&gt;http://tempuri.org/&lt;/span&gt; in your WSDL in WCF do the following:&lt;br /&gt;&lt;br /&gt;1.) In your ServiceContract attribute constructor define the Namespace property.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;[&lt;span style="color: rgb(102, 204, 204);"&gt;ServiceContract&lt;/span&gt;(Namespace = &lt;span style="color: rgb(153, 51, 0);"&gt;"http://myservice.com"&lt;/span&gt;)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public interface&lt;/span&gt; &lt;span style="color: rgb(102, 204, 204);"&gt;IMyService&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2.) For your ServiceClass create the ServiceBehavior attribute with Namespace property&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;[&lt;span style="color: rgb(0, 204, 204);"&gt;ServiceBehavior&lt;/span&gt;(Namespace = &lt;span style="color: rgb(153, 51, 0);"&gt;"http://myservice.com"&lt;/span&gt;)]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;class&lt;/span&gt; &lt;span style="color: rgb(0, 204, 204);"&gt;MyService &lt;/span&gt;: &lt;span style="color: rgb(51, 153, 153);"&gt;IMyService&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3.) In all your bindings set the bindingNamespace property&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;endpoint&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;binding&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;="basicHttpBinding"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;bindingNamespace&lt;/span&gt;=&lt;span style="color: rgb(51, 51, 255);"&gt;"http://myservice.com"&lt;/span&gt;....&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-1133881179638295877?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/1133881179638295877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=1133881179638295877' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1133881179638295877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1133881179638295877'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2009/01/how-to-get-rid-of-httptempuriorg-in-wcf.html' title='How to get rid of http://tempuri.org/ in WCF WSDL'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-4785798826850432246</id><published>2008-12-26T17:13:00.000-08:00</published><updated>2009-02-03T08:47:10.334-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='indigo'/><category scheme='http://www.blogger.com/atom/ns#' term='windows communication foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='UDDI'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Thinking WCF towards Enterprise SOA</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span&gt;You want know how to build your own UDDI based SOA?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Read the &lt;a href="http://my-tech-talk.blogspot.com/2009/01/uddi-soa-howto.html"&gt;UDDI SOA Howto&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;br /&gt;Update: Get the article including source code at &lt;a href="http://www.codeproject.com/KB/WCF/uddiservicefactory.aspx"&gt;http://www.codeproject.com/KB/WCF/uddiservicefactory.aspx&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Is WCF out of the box a Service Oriented Architecture?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you think that WCF is SOA then lets review part of the definition of "Service Oriented Architecture".&lt;br /&gt;&lt;br /&gt;OASIS (the &lt;a href="http://www.oasis-open.org/home/index.php"&gt;Organization for the Advancement of Structured Information Standards&lt;/a&gt;) defines SOA as the following:&lt;br /&gt;&lt;br /&gt;"A paradigm for organizing and utilizing distributed capabilities that may be under the control of different ownership domains. It provides a uniform means to offer, discover, interact with and use capabilities to produce desired effects consistent with measurable preconditions and expectations.&lt;br /&gt;&lt;br /&gt;Now lets translate "capability" with "service".&lt;br /&gt;&lt;br /&gt;So we get in slightly other words: "A SOA consists of distributed services, some sort of mechanism to offer and find them, a mechanism to interact with the service and finally a mechanism to invoke the service.&lt;br /&gt;&lt;br /&gt;If you try to break down this into web service technology terms you now translate this into:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Services (this is what WCF is all about)&lt;/li&gt;&lt;li&gt;Find and Offer (this could be a UDDI Registry (Enterprise), or WS-Discovery (UPnP like))&lt;/li&gt;&lt;li&gt;Interact (this could be WSDL)&lt;/li&gt;&lt;li&gt;Invoke (this could be SOAP)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So what part of SOA is covered by WCF?&lt;/span&gt;&lt;br /&gt;The service, the interaction and the service invocation. The runtime discovery is not part of WCF.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt;&lt;br /&gt;WCF offers no proper mechanism to offer and find services at runtime and hence is a classical 3-tier architecture technology, that we basically have for 15-20 years now. We just called it DCOM or Corba or whatever before and now the same technology gets relabeled with the current buzzword "Service". Other examples I love are:&lt;br /&gt;"SAAS" or "Software as a Service" what was called "ASP" or "Application Service Provider" before&lt;br /&gt;"ESB" or "Enterprise Service Bus" what was called "EAI" or "Enterprise Application Integration" before&lt;br /&gt;The thing about buzzwords is that you can throw them around with having no clue what they are really supposed to mean. So the words service in "Service Oriented Architecture" and "Web Service" are commonly  misunderstood to be same where in fact they mean two different things.&lt;br /&gt;&lt;br /&gt;Just a web service is not a SOA.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;WCF follows Web Services&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The WCF basically combines all the different communication technologies of .Net 2.0 (Remoting, Queues etc) under one roof and a common programming model. The model itself follows the web service model introduced with .Net 2.0. One of the biggest disadvantages of web services was that the communication layer for web services pretty much fixed to WS-I standard (BasicHttpBinding in WCF terms). What Microsoft now basically did for WCF was to address this issue and introduced a completely flexible communication layer. So instead of a preassigned WS-I protocol we can now choose from a widespread of communication protocols that nearly fit every situation.&lt;br /&gt;&lt;br /&gt;But from a programmers point of view, the implementation of WCF services/clients follows pretty much the way we programmed web services. On the client side instead of a "web service reference" you now just add a "service reference" to your project but then it feels just like before. On the service side you now have to define a service interface and you use some other attributes but then again it feels like being with web services.&lt;br /&gt;&lt;br /&gt;But this flexibility has some implications.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;With every service reference you now add a configuration file with a "ServiceModel" section that keeps all the protocol specific configuration options.&lt;/li&gt;&lt;li&gt;The path to the WSDL for web services was pretty much always http://ServiceAddress?WSDL . Now with non http protocols there must be another way to access the Service Metadata. So with WCF the "Mex" or "MetadataExchange" endpoint, that is supposed to be on the "ServiceURL/mex" address, was introduced.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Target Enterprise Architecture&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Guess the following scenario: I have 10 different types of Services running, with 100 clients each. An hour of unscheduled service downtime during day hours  can cost me up to a 100 million bucks.&lt;br /&gt;&lt;br /&gt;So what are my requirements?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I must be able to relocate my services without any clients failing&lt;/li&gt;&lt;li&gt;Services must be redundant and clients must support failover&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I must be able to dynamically add more services of same type for load balancing and fault safety&lt;/li&gt;&lt;li&gt;I want to have a quick overview where my services are running&lt;/li&gt;&lt;li&gt;I must be able to change communication parameters (e.g. enable transport encryption on the service, without any of my clients failing&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Does standard WCF  Implementations meet our requirements?&lt;/span&gt;&lt;br /&gt;By "Standard" I refer to the way the the service and the client had been created. Means setting up the service, then creating a client, adding the service reference to the service and then calling the service function of interest.&lt;br /&gt;&lt;br /&gt;What happens if we:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Move the service to another server?&lt;br /&gt;The client fails.&lt;/li&gt;&lt;li&gt;A service fails?&lt;br /&gt;The client fails.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Change communication parameters of the service such as binding or encryption?&lt;br /&gt;The client fails.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Want to introduce another service of the same kind for load balancing?&lt;br /&gt;Installed clients ignore it&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I want to get a quick overview where my services are running?&lt;br /&gt;I can't.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As a result for every above change I would need to update 100 hundred clients config files, but I have no clue on what workstations the clients are located. As a result, any above change breaks my production process, which is not acceptable in a enterprise environment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt;&lt;br /&gt;The standard implementation of WCF is not suited for use in Enterprise environments.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Introducing a central Service registry to our architecture&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As a mechanism to find and offer web services in an enterprise environment this rings the bell for UDDI which is included since Windows Server 2003, but which seems to be fairly unnoticed so far. If I say documentation and support is sparse, this is quite a extenuation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Web Services in a UDDI environment.&lt;/span&gt;&lt;br /&gt;Handling web services in a UDDI registry environment was pretty much straight-forward. You simply stripped everything but the Types, Message and Operations sections out of your WSDL, published it as a model, and then you added the service endpoints to the registry (where there was just one per Service).&lt;br /&gt;As a client, you added the web service reference to the stripped WSDL, then at runtime you simply put in the address from the UDDI and everything was supposed to work just fine as the communication layer was fixed to WS-I and there was just one endpoint.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WCF Services in a UDDI enviroment&lt;/span&gt;&lt;br /&gt;With WCF we have a whole bunch of possibilities on how our service can communicate. This includes the option that a service has multiple endpoints offering different communication protocols at the same time. If we have multiple instances of a service we no longer can assume that they will all use the same communication protocols.&lt;br /&gt;&lt;br /&gt;But if we try handle WCF Services with UDDI just like a Web services then what happens?&lt;br /&gt;&lt;br /&gt;At first this means:&lt;br /&gt;First we strip the everything but the Types, Message and Operations sections from our WSDL.&lt;br /&gt;This is where you first time stop. Looking at the WSDL you will find out that the "Types" section is not declared incline, but every namespace just has a import reference.&lt;br /&gt;&lt;br /&gt;You have 2 options now.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You open all the imports URL's in a browser and then you replace the imports with the results (sucks like hell after the 10th time) or&lt;/li&gt;&lt;li&gt;You modify the WSDL behavior of your service with e.g. FlatWSDL. But  also this way is not perfect as it sounds as there is a bug in Visual Studio that does not let you choose your array types any more under some circumstances. So if your Service returns an array you could configure it to be a List&lt;t&gt; in your code, but under some circumstances Visual Studio now will not let you change the array type to be anything but array. This is quite nasty as the WSDL is perfectly valid and the type is perfectly recognized as MyType [] but you just will not get is as List&lt;mytype&gt;&lt;mytype&gt; anymore, no matter what you select as your ArrayType.&lt;/mytype&gt;&lt;/mytype&gt;&lt;/t&gt;&lt;/li&gt;&lt;/ul&gt;&lt;t&gt;&lt;mytype&gt;&lt;mytype&gt;&lt;br /&gt;But after we made a decision on this first problem now, what happens if you simple exchange the clients ServiceEndPoint adress with the URL you get from the UDDI Registry.&lt;br /&gt;&lt;br /&gt;What happens if we:&lt;br /&gt;&lt;/mytype&gt;&lt;/mytype&gt;&lt;/t&gt;&lt;ul&gt;&lt;li&gt;&lt;mytype&gt;Move the service to another server?&lt;br /&gt;The client works if it does not use encryption, otherwise it fails.&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;A service fails?&lt;br /&gt;The client works if it does not use encryption, otherwise it fails.&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;Change communication parameters of the service such as binding or encryption?&lt;br /&gt;The client fails.&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;Want to introduce another service of the same kind for load balancing?&lt;br /&gt;The client works if it does not use encryption, otherwise it fails.&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;I want to get a quick overview where my services are running?&lt;br /&gt;I get anytime a nice overview from my registry.&lt;/mytype&gt;&lt;/li&gt;&lt;/ul&gt;&lt;mytype&gt;&lt;br /&gt;So if we use any kind encryption the concept we used for web services fails all but one of our architecture requirements.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Can't WCF Services be integrated into a UDDI environment?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem is basically the "ServiceModel" section in our clients config file. It freezes the state of the service to the point where we added the service reference. If you use a binding with encryption which is by default based on Windows users you find for example a tag &lt;identity&gt; called "Identity" which is usually something like  &lt;hostname someusername=""&gt;"Hostname\Username" and which is used for the clients encryption to the service. But once we move the service to another server this of course will fail due to the identity mismatch.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Integration of WCF Services into a UDDI environment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How to query the Service Metadata at runtime?&lt;/span&gt;&lt;br /&gt;I remembered I had a little web service project where we dynamically queried a services WSDL, created a DOM object and the compiled the client at runtime. So my first approach to WCF was similar, and it works.&lt;br /&gt;But then what I basically want to do is the more or less the same what the &lt;span style="font-style: italic;"&gt;WCFTestClient.exe&lt;/span&gt; does. You simply put in a URL to a service, WCFTestClients discovers it and then creates a client. But doing a little little reverse engineering using Lutz Roeders excellent Reflector tool revealed that....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;WCFTestClient.exe&lt;/span&gt; just invokes svcutil on the command line.  :-))) . Who dared to ship a awkward solution like this?&lt;br /&gt;&lt;br /&gt;But when I did the same with "svcutil" I stumbled across two classes in System.ServiceModel.Description namespace.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;span style="font-weight: bold;"&gt;MetadataExchangeClient and MetaDataResolver &lt;/span&gt;&lt;br /&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;br /&gt;What both basically do is to read the services WSDL and then return a ServiceEndpointCollection. Now you just have to choose which endpoint you want to use for communication with your service at runtime.&lt;br /&gt;But here the first questions start. What do I need MetaDataResolver for, that needs a MetadataExchangeClient and returns a ServiceEndpointCollection, when I can use the MetadataExchangeClients ImportAllEndpoints function? (Update: My Implementation is solely based on MetadataexchangeClient. I tried to save some lines of code by using MetaDataResolver, but it never worked out. So I just can discourage the use of MetaDataResolver.)&lt;br /&gt;&lt;br /&gt;If you try get some light into the situation you will soon find out that in regards to WCF you now walk off the beaten track. Documentation and references will get very sparse from this point on.&lt;br /&gt;&lt;br /&gt;But anyway. This is basically exactly what we need to do, if we want to integrate WCF Services into a UDDI environment. We get the main ServiceURL from the UDDI Registry, then we read the service metadata on ServiceURL/mex or ServiceURL?WSDL, then we pick an endpoint and then we call the desired service function.&lt;br /&gt;&lt;br /&gt;So what we basically do is instead of freezing the services state to the point we add the service reference to our client project, we do the "Add Service reference" functionality every first time we want to talk to our service in our code! This basically means we do not need the &amp;lt;ServiceModel&amp;gt;  in our config file anymore.&lt;br /&gt;&lt;br /&gt;This works a while but then....&lt;br /&gt;you will find out...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why we needed the &amp;lt;ServiceModel&amp;gt; section&lt;/span&gt;&lt;br /&gt;First thing going to crash is when you receive a service response that is larger than 64k. Your client will report that your "MaxReceivedMessageSize" quota is exceeded. And there quite frankly I ask myself the following question: Who the fuck decided that in the age of Tera- and Petabytes 64k would be a good default limit for receiving a service response? My electric toothbrush could handle a response larger than 64k. Why not 6k or even better nothing by default??? By the end of the project I am sure it will be more than a thousand times we had to adjust this pain in the ass default parameter. If you are moving on BasicHttpBinding you will need to modify the "MaxBufferSize" parameter as well. Interestingly this parameter has always to be the same as as "MaxReceivedMessageSize". A parameter that has always the same size like another parameter? Jeez...&lt;br /&gt;The next superfluous default parameter modification that you will encounter is the "maxItemsInObjectGraph" that has the same arbitrary limit of 64k.&lt;br /&gt;&lt;br /&gt;Ok, I could rant on for while but let's stop crying and look for a solution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How to modify an unknown binding at runtime?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;The core of the problem is that we do not know what bindings the service will offer.&lt;br /&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;MaxReceivedMessageSize and MaxBufferSize&lt;/span&gt;&lt;br /&gt;Lets look at the bindings inheritance.&lt;br /&gt;All Bindings are derived from class Binding but except from some timeout parameters there is nothing we can do here.&lt;br /&gt;Lets look at the binding element stack.&lt;br /&gt;In the stack of Binding Elements this parameter belongs to the Transport Binding Element, which is part of any Binding. But I tried 2 days to find a way to get access to the binding elements, but only for CustomBinding this will lead you somewhere. For all other bindings this is a dead end street. The CreateBindingElements() function will just create a copy of the actual bindings elements and the GetBindingProperty&lt;t&gt;&lt;t&gt;() function which comes along undocumented in official documentation is of no help either.&lt;br /&gt;&lt;br /&gt;As we have no clue what binding the Service will offer we now have 3 options:&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;ol&gt;&lt;li&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;The IT-Hall of Shame candidate&lt;br /&gt;Write a function that tries to cast the discovered binding into any known binding and then sets the parameter&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;We use Reflection&lt;br /&gt;We use a function that first tries to cast the object into a custom binding. If the cast is successful it tries for every property of every binding element to set a property with "Name" to "Value" and if the cast fails just try to find a property with "Name" and then to set it to "Value".&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;We return a CustomBinding&lt;br /&gt;We use the discovered bindings CreateBindingElement() function, modify the parameter on the TransportBindingElement and return a CustomBinding instead of the original binding.&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;/ol&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;&lt;br /&gt;I don't like any of the solutions but solutions, but finally we decided to for the reflection solution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;How to modify MaxItemsInObjectGraph at runtime?&lt;/span&gt;&lt;br /&gt;Interestingly  "MaxItemsInObjectGraph" is a property of the DatacontractSerializer which is also used in all bindings.&lt;br /&gt;If you use the config file you now have to add an Endpoint Behavior of type DataContractSerializer, but if you try to find in the ServiceModel namespace you will find out that you can not instantiate a this class at runtime. But looking further there is a DataContractSerializerOperationBehavior that can be instantiated at runtime but what can only be applied to a operation.&lt;br /&gt;So what I did, was to create a class that implements IEndPointBehavior and then simply sets this DataContractSerializerOperationBehavior with a useful value to all operations.&lt;br /&gt;&lt;br /&gt;Now I could get rid of my &amp;lt;ServiceModel&amp;gt; config section and all my functions worked just as intended.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So we got it?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So if you think this is enough struggling with 2 64k default parameters (yes I mean it sarcastically) you are soon to be disappointed.&lt;br /&gt;Everything worked now, I could switch my service binding forth and back and my clients just worked fine until one day..... They stopped working.&lt;br /&gt;MetadataExchangeClient reported that "Some items can not be resolved". It took me 2 days to find out what happened. Our data model had gotten bigger and bigger until one day.... Guess it.&lt;br /&gt;Yes, the WSDL got larger than 64k. And this is the point where are all reference implementations of MetadataExchangeClient  and MetadataResolver will fail. In case of MetadataExchangeClient even with a bolloks error message. And guess again. To solve the issue you have to create a Binding on your own, set this pain in the ass MaxReceivedMessageSize parameter and then use some constructors which are unmentioned in any example.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finally!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was so far the last submarine that submerged in front of my target architectures course. I don't say this was the last issue until of the end of the project, but yet I am confident that we will reach all architecture requirements with WCF without any limitations.&lt;br /&gt;&lt;br /&gt;So what happens now if&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;ul&gt;&lt;li&gt;&lt;mytype&gt;Move the service to another server?&lt;br /&gt;I change the address in UDDI and all my clients simply follow and continue working.&lt;br /&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;A service fails?&lt;br /&gt;The clients does a nice failover and reconnects no matter what.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;Change communication parameters of the service such as binding or encryption?&lt;br /&gt;The client adopts to it.&lt;br /&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;Want to introduce another service of the same kind for load balancing?&lt;br /&gt;Just register it to the UDDI and enjoy&lt;br /&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;I want to get a quick overview where my services are running?&lt;br /&gt;I get anytime a nice overview from my registry.&lt;/mytype&gt;&lt;/li&gt;&lt;/ul&gt;All our target architecture goals are met.&lt;br /&gt;Hooray! Awesome.&lt;br /&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;span style="font-weight: bold;"&gt;WCF implemention flaws&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;The 64k default quotas on &lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;MaxReceivedMessageSize, MaxBuffersize and MaxItemsInObjectGraph and maybe elsewhere&lt;br /&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;The default WSDL schema that uses "Import" statements in the "Types" section.&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;The bug in Visual Studio that does not let you choose your ArrayType for flat WSDL's (MSConnect ID:&lt;/mytype&gt;&lt;span id="ctl00_MasterBody_SearchResultsView_ctl03_FeedbackSummaryDisplay_FeedbackIDLabel"&gt;387245)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;The inheritance of bindings that have highly redundant properties in the specific bindings and/or the lack of access to the binding elements for non "Custom Bindings"&lt;/li&gt;&lt;li&gt;Inconsistencies between between config file configuration and runtime configuration&lt;/li&gt;&lt;li&gt;Lack of documentation&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;mytype&gt;&lt;/mytype&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt;&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;ul&gt;&lt;li&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;WCF standard implementations are due to their "all is static" approach not Enterprise ready&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;WCF Services can be integrated into a Enterprise SOA architecture but several implementation flaws prevent a seamless integration and increase project risk.&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;/ul&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;&lt;span style="font-weight: bold;"&gt;Suggestions to Microsoft for next WCF Release:&lt;/span&gt;&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;ul&gt;&lt;li&gt;&lt;mytype&gt;&lt;identity&gt;&lt;hostname someusername=""&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;servicemodel&gt;&lt;t&gt;&lt;t&gt;Default binding quotas&lt;br /&gt;Quotas should be disabled by default. Any quota you set by default is arbitrary and will never fit all project scopes. If I do not trust the service, its nice that I can set this quota, but please let me choose whats best here. And especially do not use quotas that later blow up your own framework in a timebomb manner.&lt;br /&gt;&lt;/t&gt;&lt;/t&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/servicemodel&gt;&lt;/hostname&gt;&lt;/identity&gt;&lt;/mytype&gt;&lt;/li&gt;&lt;li&gt;"Imports" in WSDL by default&lt;br /&gt;This is only causing problems and has absolutely no use. Get rid of it.&lt;/li&gt;&lt;li&gt;The inheritance of Binding&lt;br /&gt;Instead of a 2 level hierarchy it should be much more fine grained. e.g. in class BasicHttpBinding there should be only configuration properties that are absolutely unique to BasicHttpBinding. All others should be inherited. Adding more inheritance could be easily be done without breaking anything. This would smooth the way to a sophisticated runtime configuration of arbitrary bindings. I prefer this much more over a access to the binding elements as in CustomBinding.Elements.&lt;/li&gt;&lt;li&gt;Runtime configuration and config configuration should be consistent&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;If there is some interest I may be able to publish some source code. Just leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-4785798826850432246?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/4785798826850432246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=4785798826850432246' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/4785798826850432246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/4785798826850432246'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/12/thinking-wcf-towards-enterprise-soa.html' title='Thinking WCF towards Enterprise SOA'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-3125569313550388317</id><published>2008-12-10T07:14:00.000-08:00</published><updated>2008-12-10T07:19:39.443-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='GetProperty(T)'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF: Binding.GetProperty(T) Method</title><content type='html'>Did you ever wondered what to put in for the &lt;t&gt; Parameter?&lt;br /&gt;Rather than finding the answer in the Microsoft Documentation you find the answer &lt;a href="http://blogs.msdn.com/drnick/archive/2007/04/10/interfaces-for-getproperty-part-1.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;Basically it seems to be a rather senseless method for the standard bindings.&lt;br /&gt;&lt;/t&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-3125569313550388317?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/3125569313550388317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=3125569313550388317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3125569313550388317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3125569313550388317'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/12/wcf-bindinggetpropertyt-method.html' title='WCF: Binding.GetProperty(T) Method'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-1327543758453826739</id><published>2008-11-24T06:35:00.000-08:00</published><updated>2008-11-26T03:00:11.010-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error 9009'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>Error 9009 in Visual Studio means....</title><content type='html'>that Visual Studio can not find the executable you specified probably in Pre- or Post-Build command line.&lt;br /&gt;&lt;br /&gt;That can have 3 reasons:&lt;br /&gt;1.) There is no PATH environment variable set. You need to include the full path to your executable.&lt;br /&gt;2.) You need to quote the fully qualified path to your executable if the path includes any blanks.&lt;br /&gt;3.) The file really does not exist.&lt;br /&gt;&lt;br /&gt;Examples:&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255);"&gt;SvcUtil.exe parameter1 parameter2&lt;/span&gt; will fail&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255);"&gt;&lt;br /&gt;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcUtil.exe &lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255);"&gt;parameter1 parameter2 &lt;/span&gt;will fail&lt;br /&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255);"&gt;&lt;br /&gt;"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcUtil.exe" &lt;/span&gt;&lt;span style="font-family: courier new; color: rgb(51, 51, 255);"&gt;parameter1 parameter2&lt;/span&gt; will do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-1327543758453826739?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/1327543758453826739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=1327543758453826739' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1327543758453826739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1327543758453826739'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/11/error-9009-in-visual-studio-means.html' title='Error 9009 in Visual Studio means....'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-1607371509676467941</id><published>2008-11-18T03:29:00.000-08:00</published><updated>2009-01-08T23:25:31.581-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svcutil'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2008'/><title type='text'>Bug in Visual Studio 2008 WSDL Interpreter</title><content type='html'>When I started working with Flat-WSDL we soon came to a phenomenon where our list types suddenly become converted to&lt;br /&gt;&lt;br /&gt;ArrayType[]&lt;br /&gt;&lt;br /&gt;instead of&lt;br /&gt;&lt;br /&gt;List&amp;lt;arraytype&amp;gt;&lt;br /&gt;&lt;br /&gt;It took a while to drill down the cause to the following.&lt;br /&gt;&lt;br /&gt;A common wsdl:types section looks like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;lt;wsdl:types&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;lt;xsd:schema&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;lt;/xsd:schema ....&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;lt;xsd:schema&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;lt;/xsd:schema ....&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;lt;/wsdl:types&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;but whenever there is the following section in the WSDL&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;lt;wsdl:types&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;lt;xsd:schema&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; ....&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;lt;/xsd:schema&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;lt;&lt;span style="font-weight: bold;"&gt;xs&lt;/span&gt;:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; ....&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;        &amp;lt;/&lt;span style="font-weight: bold;"&gt;xs&lt;/span&gt;:schema&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;lt;/wsdl:types&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;you can not switch the ListTypes anymore. They will all be ArrayType[] . This applies for the ServiceReference as well as for svcutil that simply ignores the /ct: Parameter .&lt;br /&gt;&lt;br /&gt;Both WSDL descriptions are perfectly valid as both tokens&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; xsd:&lt;/span&gt; and&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; xs: &lt;/span&gt;reference the &lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt; Namespace and hence are synonyms.&lt;br /&gt;&lt;br /&gt;I reported the bug to Microsoft using Connect (MSConnect ID:&lt;span id="ctl00_MasterBody_SearchResultsView_ctl03_FeedbackSummaryDisplay_FeedbackIDLabel"&gt;387245). But I heavily disagree with their answer, which basically says "It's not a bug it's a feature". You should find some samples wsdls there.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-1607371509676467941?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/1607371509676467941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=1607371509676467941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1607371509676467941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1607371509676467941'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/11/bug-in-visual-studio-2008-wsdl.html' title='Bug in Visual Studio 2008 WSDL Interpreter'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-9127726667652199794</id><published>2008-11-18T02:34:00.000-08:00</published><updated>2008-11-18T10:24:15.632-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><category scheme='http://www.blogger.com/atom/ns#' term='ackward'/><category scheme='http://www.blogger.com/atom/ns#' term='glitches'/><title type='text'>IT Hall of Shame</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(153, 102, 51);font-family:times new roman;font-size:180%;"  &gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 51); font-weight: bold;font-size:130%;" &gt;Oracle&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;u&gt;Oracle column alias length limitation&lt;span style="font-style: italic;font-size:130%;" &gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The following SQL:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;select&lt;/span&gt; 1 as "Why shouldnt you have a very long column name" &lt;span style="color: rgb(51, 51, 255);"&gt;from &lt;/span&gt;dual &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;will result in&lt;br /&gt;&lt;br /&gt;"ORA-00972 identifier is too long"&lt;br /&gt;&lt;br /&gt;The maximum length for a column alias in Oracle is 30 characters. Guys, we live in age of Terabytes!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;u&gt;Trying to pass a list as parameter&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Try the following SQL:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;select&lt;/span&gt; 1 &lt;span style="color: rgb(51, 51, 255);"&gt;from &lt;/span&gt;dual &lt;span style="color: rgb(51, 51, 255);"&gt;where &lt;/span&gt;1 &lt;span style="color: rgb(51, 51, 255);"&gt;in &lt;/span&gt;(:var)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;with :var = 1 (works)&lt;br /&gt;with :var  = 1,2 (no error but no result. The list is interpreted as float)&lt;br /&gt;with :var = 1,2,3 (error Invalid number)&lt;br /&gt;&lt;br /&gt;There is no way with standard SQL instruments to pass a list as parameter in Oracle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-9127726667652199794?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/9127726667652199794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=9127726667652199794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/9127726667652199794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/9127726667652199794'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/11/it-hall-of-shame.html' title='IT Hall of Shame'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-6329092108104409322</id><published>2008-11-08T03:57:00.000-08:00</published><updated>2008-11-09T11:46:54.695-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic datatype'/><category scheme='http://www.blogger.com/atom/ns#' term='variant'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 4'/><category scheme='http://www.blogger.com/atom/ns#' term='runtime binding'/><title type='text'>The Variant strikes back</title><content type='html'>Anders Hejlsberg, lead-architect of C# announced at the PDC 2008 that C# 4.0 will be enhanced towards a dynamic language. With the keyword "dynamic" you can declare a variable as a datatype that will be bound at runtime rather than compile time.&lt;br /&gt;The background is, that it will make the use of COM components much more convient. Today you link your code against the exact version. If the version of your component is not installed on the remote computer your code will fail, even if the interface the installed component has not changed.&lt;br /&gt;Reflection is in its usage for emergencies only and not suited for  complex interfaces. Your code will become a huge mess if you try to handle complex objects.&lt;br /&gt;&lt;br /&gt;So this is a HUGE break with current C# dogmas..&lt;br /&gt;&lt;br /&gt;But wait a minute! Don't all of you, who know what's behind the letters "VB" feel strangely remembered? Something we thought we had burried a long time ago?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;The VARIANT strikes back!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And to be honest, coming down the C, C++ path I feared and hated it, whenever sub-average VB programmer colleagues started using it in their code. The Variant or Dynamic liberates developers from spending a minimal time on thinking before start coding. They simply declare some global "Variants" and use them to store whatever comes along. Absolutely impossible to tell whats the content of the variable when you read the code. The absolut horror of everyone who has to maintain or debug this kind of code.&lt;br /&gt;&lt;br /&gt;I clearly see the advantages of runtime binding, but I see the immense risks the same time.&lt;br /&gt;&lt;br /&gt;Maybe you should pass some sort of qualification exam to get this type enabled.&lt;br /&gt;&lt;br /&gt;"Anders Hejlsberg, &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Anders_Hejlsberg" rel="external"&gt;Chef-Architekt&lt;/a&gt; der .Net-Programmiersprache C#, hat im Rahmen der &lt;a target="_blank" href="http://microsoft.com/" rel="external"&gt;Microsoft&lt;/a&gt; Professional Developer Conference (PDC) in Los Angeles neue Sprachfunktionen für C# 4.0 und die darauf folgende Version erstmals vorgestellt.&lt;br /&gt;Die Hauptneuerung in C# 4.0 ist die Erweiterung in Richtung dynamischer Sprachen. Mit dem Schlüsselwort &lt;em&gt;dynamic&lt;/em&gt; können C#-Entwickler in Zukunft eine Variable so deklarieren, dass die Bindung erst zur Laufzeit stattfindet." (Heise.de)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-6329092108104409322?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/6329092108104409322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=6329092108104409322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/6329092108104409322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/6329092108104409322'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/11/variant-strikes-back.html' title='The Variant strikes back'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-1289546853892787814</id><published>2008-11-08T03:34:00.000-08:00</published><updated>2008-11-30T21:24:54.460-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='WF'/><title type='text'>Microsoft rewrites Workflow Foundation from the scratch</title><content type='html'>In a keynote at the &lt;a href="http://www.microsoftpdc.com/"&gt;PDC 2008&lt;/a&gt; conference the speaker Kenny Wolf announced that Microsoft is rewriting Windows Workflow Foundation from the scratch. The basic concepts will be retained but the implementation and all components will change fundamentally. It will be shipped with .Net 4.0 and will not be compatible with current Workflow Foundation Code.&lt;br /&gt;&lt;br /&gt;One of my next articles in this blog would have been titled "Why I do not believe in Windows Workflow Foundation". I think I can skip this article now, as Microsoft obviously has come to the same conclusion.&lt;br /&gt;First of all. If you want to do workflow driven development, the current Microsoft strategy is a mess in itself. Do I use Workflow Foundation, Workflow Foundation for Sharepoint, Biztalk or what? Currently we have 3 products offering more or less the same. But even even if you get behind the point of simply chosing Workflow Foundation things do not lighten up.&lt;br /&gt;If you look closer at the word "Workflow" you will soon encounter some philosophic problems.&lt;br /&gt;What is a workflow? Are we talking about program level workflow, about technical workflows or do we even talk about interactive workflows, are we talking about business processes, do I store my business object in the workflow object, when do I use sequential workflows or state machines....&lt;br /&gt;Workflow Foundation fails to answer any of these questions and hence gives you no clear strategy what WF is aimed at. For me it felt like getting a tool box tossed at my head with a sticker on it saying "Find out what it's good for".&lt;br /&gt;To the point where I used Workflow Foundation in technical workflow, things where working out but when I got to the point where I tried to implement an interactive workflow with just 4 states things were getting messy.&lt;br /&gt;The whole communication concept with workflows is a mess, the Workflow controller is unbearable slow, the workflow designer shipped with Visual Studio 2008 was ***unusable*** before service pack 1. If you want to user persistence or tracking you end up rebuilding the database frequently, because errors come up that can not be solved differently.&lt;br /&gt;The WCF-WF integration example published by Microsoft definitely belongs into the Hall of Shame. A calculator that needs a Start() and Stop() Method before/after it does calculate something. Jeeeez. Who dared publishing something like that? It clearly shows that both techniques where designed independently and were never designed to interact.&lt;br /&gt;&lt;br /&gt;But with the new approach am looking forward to see what the result will be. I definitely believe that the future of development will be workflow driven. Software definitely needs to get to the point where my business process reflects in software. There and only there I benefit from workflow driven development.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"In einem Vortrag auf der &lt;a target="_blank" href="http://www.microsoftpdc.com/" rel="external"&gt;PDC 2008&lt;/a&gt; offenbarte Sprecher &lt;a target="_blank" href="http://kennyw.com/" rel="external"&gt;Kenny Wolf&lt;/a&gt;, dass Microsoft die Windows Workflow Foundation (&lt;a target="_blank" href="http://www.it-visions.de/l3773.aspx" rel="external"&gt;WF&lt;/a&gt;) noch einmal von Grund auf neu schreiben wird. Die Konzepte einer Laufzeitumgebung, die aus einzelnen verbundenen Aktivitäten bestehende Workflows ausführt, bleiben zwar bestehen. Auch die Workflow-Dienste wie Persistierung und Ablaufverfolgung wird es weiterhin geben.&lt;br /&gt;Die Implementierung und alle Bausteine (Laufzeitumgebung, Aktivitäten und Dienste) werden sich jedoch in der kommenden Version fundamental ändern. Die neue Ausgabe wird nicht mehr kompatibel sein zu den derzeit am Markt verfügbaren Versionen." (Heise)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-1289546853892787814?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/1289546853892787814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=1289546853892787814' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1289546853892787814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1289546853892787814'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/11/microsoft-rewrites-workflow-foundation.html' title='Microsoft rewrites Workflow Foundation from the scratch'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-5394445698724512702</id><published>2008-10-10T11:34:00.000-07:00</published><updated>2008-10-10T12:21:11.783-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.net configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='vb'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Download ASP.Net Files with IIS</title><content type='html'>If you try to download .cs or .vb files from an IIS Server you will soon see the following error:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:arial;font-size:130%;"  &gt;Server Error in '/' Application.&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(102, 51, 102);font-family:arial;font-size:130%;"  &gt;This type of page is not served.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if your file is located in a simple directory or&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:arial;font-size:130%;"  &gt;The page cannot be displayed&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);font-family:arial;font-size:130%;"  &gt;You have attempted to execute a CGI, ISAPI, or other executable program from a directory that does not allow programs to be executed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To solve this you first have to convert the directory into an application-directory.&lt;br /&gt;&lt;br /&gt;To do so enter the &lt;span style="color: rgb(0, 0, 153);"&gt;"IIS Manager&lt;/span&gt;", right click the &lt;span style="color: rgb(0, 0, 153);"&gt;directory&lt;/span&gt;, select "&lt;span style="color: rgb(0, 0, 153);"&gt;Properties&lt;/span&gt;", go to the  tab and click the &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;"Create&lt;/span&gt;" &lt;/span&gt;Button. Then select the &lt;span style="color: rgb(0, 0, 153);"&gt;"Configuration" &lt;/span&gt;Button, browse to the appropriate extension and remove it (in this case the .cs extension). It will remove the extension registration for the given directory only.&lt;br /&gt;&lt;br /&gt;If you now you try to download the file you probably get the following error:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(102, 102, 102); font-family: arial;"&gt;The page cannot be found&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102); font-family: arial; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102); font-family: arial;"&gt;The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The reason behind this is, that there is no MIME type registered with .cs files and IIS does not know how to handle it.&lt;br /&gt;&lt;br /&gt;So again open the &lt;span style="color: rgb(0, 0, 153);"&gt;"IIS Manager&lt;/span&gt;", but this time right click on the server itself. Now click the button "&lt;span style="color: rgb(0, 0, 153);"&gt;MIME Types&lt;/span&gt;", press the "&lt;span style="color: rgb(0, 0, 153);"&gt;New&lt;/span&gt;" button and enter "&lt;span style="color: rgb(0, 0, 153);"&gt;.cs&lt;/span&gt;" as extension and "&lt;span style="color: rgb(0, 0, 153);"&gt;text/plain&lt;/span&gt;" as MIME Type. Then restart the affected web site (Default Web Site in my case) by clicking its stop and  start button.&lt;br /&gt;&lt;br /&gt;Now you should be able to download .cs files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-5394445698724512702?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/5394445698724512702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=5394445698724512702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5394445698724512702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5394445698724512702'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/10/download-aspnet-files-with-iis.html' title='Download ASP.Net Files with IIS'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-3239603652937402374</id><published>2008-10-01T06:21:00.000-07:00</published><updated>2008-10-01T06:27:31.848-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Impromptu 6'/><category scheme='http://www.blogger.com/atom/ns#' term='cogdmor.ini'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle 10'/><category scheme='http://www.blogger.com/atom/ns#' term='Cognos'/><title type='text'>Cognos Impromtu 6 and Oracle 10 Client</title><content type='html'>works!&lt;br /&gt;&lt;br /&gt;find the file &lt;span style="color: rgb(51, 51, 255);"&gt;cogdmor.ini&lt;/span&gt; (usually in %ProgramFiles%\Cognos\cer1\bin ) .&lt;br /&gt;&lt;br /&gt;Find the section:&lt;br /&gt;&lt;br /&gt;[DLL Names]&lt;br /&gt;&lt;br /&gt;and Add the line:&lt;br /&gt;&lt;br /&gt;OR1002-Win32=ORACLIENT10.DLL,10&lt;br /&gt;&lt;br /&gt;(I am using 10.2.0.3 client)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-3239603652937402374?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/3239603652937402374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=3239603652937402374' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3239603652937402374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3239603652937402374'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/10/cognos-impromtu-6-and-oracle-10-client.html' title='Cognos Impromtu 6 and Oracle 10 Client'/><author><name>elLoco</name><uri>http://www.blogger.com/profile/04685538094487060639</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-243589212755468127</id><published>2008-09-04T01:19:00.000-07:00</published><updated>2008-09-04T03:59:17.090-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Universal installer'/><category scheme='http://www.blogger.com/atom/ns#' term='Problems'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle 10'/><category scheme='http://www.blogger.com/atom/ns#' term='Hell'/><category scheme='http://www.blogger.com/atom/ns#' term='DLL'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>.Net and Oracle 10. Welcome to DLL Hell</title><content type='html'>Until Oracle 8 or 9 you installed the client, chose whether you want to use Oracle Driver (Oracle.DataAccess.dll) or the Microsoft Driver (System.Data.OracleClient) and you had a happy connection to your database.&lt;br /&gt;&lt;br /&gt;Installing a OracleClient and connecting to a Oracle Database with was until a day in August 2008 a Non-Event. 15 minutes and off you go.&lt;br /&gt;&lt;br /&gt;Now we upgraded our database backend to Oracle 10 as anything else is running out of maintenance.&lt;br /&gt;&lt;br /&gt;"Ok", I thought. "Business as usual". "Install the latest client, turn on, works".&lt;br /&gt;&lt;br /&gt;What I didn't know was that I was standing on the doorstep to Oracle DLL Hell.&lt;br /&gt;&lt;br /&gt;First everything looked just smooth. After upgrading the client from Oracle 8 to 10, the connection with System.Data.OracleClient to our Production environment on Oracle 9 was just fine. No problems here.&lt;br /&gt;&lt;br /&gt;The problems started when I first tried to connect with an Oracle 10 the same database only on Oracle 10.&lt;br /&gt;&lt;br /&gt;4 out of five queries worked fine but then&lt;br /&gt;&lt;br /&gt;"ORA-01405: fetched column value is NULL" System.Data.OracleClient&lt;br /&gt;&lt;br /&gt;The error message means basically that I tried to fetch a null value into a PL-SQL variable.&lt;br /&gt;&lt;br /&gt;Only Problem here. I use a common SQL here. So no fetch anywhere.&lt;br /&gt;&lt;br /&gt;We now invested much much time in solving this problem, upgraded the server to latest patchlevel and lots of different things. Nothing helped. So the only way to solve this problem was to switch to the native Oracle .NET driver.&lt;br /&gt;&lt;br /&gt;After switching to the native Oracle Driver (Oracle.DataAccess.dll) the problem was solved. Only problem that remained now, was that my version of the client 9 was not installed on the server and hence I would not be able to install the software on the server with that dll.&lt;br /&gt;&lt;br /&gt;Ok, I thought. Lets get rid of my Oracle 9 and install a Oracle 10.2.0.3 client. The same client as installed on the server.&lt;br /&gt;&lt;br /&gt;Sooner said than done. I chose "Application Developer" option and off I went.&lt;br /&gt;&lt;br /&gt;But when I tried to add the reference to the Oracle .Net driver (Oracle.DataAccess.dll) using the "Add reference" dialog in Visual Studio .Net 2008 I found.... nothing. Obviously .Net Application Development is no longer in focus when installing the Oracle Client, but I knew that Oracle has special packages for .Net.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 102, 51);font-size:130%;" &gt;Installing Oracle Data Provider for .Net (10g).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Why the fuck the installer recommends to create a new Oracle Home instead of installing it where it belongs (the exsting Oracle Home of my 10.2.0.3 client directory)?&lt;br /&gt;&lt;br /&gt;Very important: At the point where you can choose the target directory, make sure you select the existing client directory, by selecting the proper Oracle Home Name.&lt;br /&gt;&lt;br /&gt;I cost me 1.5 days to find out, that by default, the installer creates a new Home Directory, where it simply doesn't do anything but to throw exceptions.&lt;br /&gt;&lt;br /&gt;After installing the ODAC correctly you find it in your "Add reference" Dialog unter .NET components under "Oracle.DataAccess".&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 102, 51);font-size:130%;" &gt;5 Cents on .NET and Oracle 10 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The story is longer but here are my 5 cents:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make sure the Oracle client version on your development and production machine are the same&lt;/li&gt;&lt;li&gt;To get a working .NET driver, you need to additionally install the Oracle Data Access Components for .NET which can be found &lt;a href="http://www.oracle.com/technology/software/tech/windows/odpnet/index.html"&gt;here &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Make sure, you select the proper version of the ODAC for your client.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When the bloody Oracle installer asks you for the directory make sure you select the existing directory of your client.&lt;/li&gt;&lt;/ul&gt;Dear guys at Oracle. In the last 2 days I really learned to hate your "Oracle Universal Installer". The setups are full of flaws, misleading informations, bugs, crc errors, bad recommendations or unnecessary  components.&lt;br /&gt;And why the hell, the Developer Oracle Client Package does not include a .Net Driver?&lt;br /&gt;By today I can call myself Oracle Client Setup Expert (OCSE), for a thing that should be what it is: a non-event&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-243589212755468127?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/243589212755468127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=243589212755468127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/243589212755468127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/243589212755468127'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/09/net-and-oracle-10-welcome-to-dll-hell.html' title='.Net and Oracle 10. Welcome to DLL Hell'/><author><name>locotegrande</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-1935427438947413270</id><published>2008-07-30T05:54:00.000-07:00</published><updated>2008-07-30T08:39:25.566-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='bluescreen'/><category scheme='http://www.blogger.com/atom/ns#' term='SP1'/><category scheme='http://www.blogger.com/atom/ns#' term='experience'/><category scheme='http://www.blogger.com/atom/ns#' term='installer'/><title type='text'>First time Windows Vista or Disillusion in 30 minutes</title><content type='html'>I just got my brand new retail PC sold with Vista Home Premium from Atelco, decent seller for computer related products in Deutschland (Germany). So I expect that Atelco had put some though in their configuration, what is working best with Vista. It even came not just with Vista, it came with Vista SP1 preinstalled.&lt;br /&gt;&lt;br /&gt;After hitting the market for over a year and with SP1 I was willing to take the challange.....&lt;br /&gt;&lt;br /&gt;It took me 30 minutes until I wrecked my Vista for the first time.&lt;br /&gt;&lt;br /&gt;Until the installation I got the installer error: "Error 1628: Failed to complete script based install". Too late I found a promising &lt;a href="http://support.microsoft.com/?scid=kb%3Ben-us%3B555175&amp;amp;x=20&amp;amp;y=10"&gt;link&lt;/a&gt; so I decided to reinstall.&lt;br /&gt;&lt;br /&gt;In total I reinstalled it 2 times this night. The first upgrade install did not fix the problem, so I had to do another complete reinstall.&lt;br /&gt;&lt;br /&gt;But this was not the end of disappointments.&lt;br /&gt;&lt;br /&gt;The next was named Bluetooth. I had a simple USB Dongle. After I personally found it disappointing that Microsoft had failed to ship XP with proper Bluetooth support, I was absolutely convinced that it would be no problem at all to connect my Microsoft Bluetooth keyboard and mouse as well as my Nokia N95 mobile with Vista.&lt;br /&gt;&lt;br /&gt;Well think again. Although keyboard and mouse seemed to work at first, it soon turned out that after a certain time (between 1 hour and 1 minute) the keyboard would delay every key pressed  for 10 seconds or more. Not really the ideal solution for playing an ego shooter game.&lt;br /&gt;Even worst was my mobile. I got a lot of installation errors (sync profile) errors, that from now on popped up every time I started my Vista.&lt;br /&gt;When I googled for the problem it soon turned out that the Bluetooth stack that comes with Windows Vista is complete crap. If you want to use Bluetooth you still need to install a 3rd party bluetooth stack.&lt;br /&gt;&lt;br /&gt;Apart from that I already had a blue screen during boot (bad_pool header), I have a disc usage of almost 80 gigs without anything installed, the disc is running with intense activity for no obvious reason, the icons use up space like nothing, the program menu looks like crap, the permanent questioning to authorize this and that sucks like hell.&lt;br /&gt;&lt;br /&gt;Just today I heard a story from a real good IT guy, who had the following problem. After starting  his Vista Laptop in a Windows 2003 Server controlled domain, his Vista would start and connect fine the first time, but when you shutdown or reboot this was the last time your Vista will ever connect to ANY network.&lt;br /&gt;The reason is that the server distributes a group policy (which is aimed at XP Workstations). Once Vista applies the group policy it disables everything that is not explicitily allowed. And this includes various network services. Even worse. Even the administrator won't be able to revive the services ("Access denied") and you won't ever be able to connect to any network!&lt;br /&gt;This means under certain circumstances your Vista will commit suicide.&lt;br /&gt;&lt;br /&gt;But apart from the fact that Vista is big, bloated, unstable, confusing and a potential suicide candidate, what are the advantages compared to XP?&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;.....&lt;br /&gt;........&lt;br /&gt;...........&lt;br /&gt;&lt;br /&gt;(Still thinking)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-1935427438947413270?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/1935427438947413270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=1935427438947413270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1935427438947413270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/1935427438947413270'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/07/first-time-windows-vista-or-disillusion.html' title='First time Windows Vista or Disillusion in 30 minutes'/><author><name>locotegrande</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-3387752101228969928</id><published>2008-07-25T05:53:00.000-07:00</published><updated>2010-01-05T09:03:16.799-08:00</updated><title type='text'>Adding FlatWSDL to WCF WebService</title><content type='html'>&lt;span style="font-size:130%;"&gt;WCF WebServices in a UDDI Environment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.evotegra.de/docs/FlatWsdl.cs"&gt;Download the SourceCode&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If it comes to the point where you want to integrate your WCF WebServices into a UDDI environment you will stumble accross a feature introduced in WCF.&lt;br /&gt;&lt;br /&gt;By default you will find in the WSDL types section:&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;"&gt;&lt;pre class="source-xml"&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;wsdl:types&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:schema&lt;/span&gt; &lt;span class="re0"&gt;targetNamespace&lt;/span&gt;=&lt;span class="st0"&gt;"http://tempuri.org/Imports"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;import&lt;/span&gt;&lt;/span&gt; &lt;span class="re0"&gt;schemaLocation&lt;/span&gt;=&lt;span class="st0"&gt;"http://localhost:3826/Service1.svc?xsd=xsd0"&lt;/span&gt; &lt;span class="re0"&gt;namespace&lt;/span&gt;=&lt;span class="st0"&gt;"http://tempuri.org/"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;import&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt; &lt;/span&gt;&lt;span class="re0"&gt;schemaLocation&lt;/span&gt;=&lt;span class="st0"&gt;"http://localhost:3826/Service1.svc?xsd=xsd1"&lt;/span&gt; &lt;span class="re0"&gt;namespace&lt;/span&gt;=&lt;span class="st0"&gt;"http://schemas.microsoft.com/2003/10/Serialization/"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;import&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt; &lt;/span&gt;&lt;span class="re0"&gt;schemaLocation&lt;/span&gt;=&lt;span class="st0"&gt;"http://localhost:3826/Service1.svc?xsd=xsd2"&lt;/span&gt; &lt;span class="re0"&gt;namespace&lt;/span&gt;=&lt;span class="st0"&gt;"http://schemas.datacontract.org/2004/07/MyFirstWCFService"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/xsd:schema&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/wsdl:types&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Looks great, but here it is causing a problem. Using a UDDI means you bind your Service at runtime. To do so you need a WSDL that contains only the abstract informations. But "&lt;span style="font-family:courier new;"&gt;http://localhost:3826/Service1.svc?xsd=xsd0&lt;/span&gt;" ist not very abstract, right?&lt;br /&gt;&lt;br /&gt;You have 3 choices now.&lt;br /&gt;a.) You have always your service at the given adress up and running.&lt;br /&gt;This would just negate the whole UDDI concept.&lt;br /&gt;b.) Load every data schema by hand, and replace the include statement with real schema. By hand. This is pain in the ass. Especially when you deal a number of datatypes from different namespaces.&lt;br /&gt;c.) You find a way to somehow flatten your WSDL.&lt;br /&gt;&lt;br /&gt;As I did not like a.) or b.) I looked for c.) and luckily stumbled across the articles of &lt;a href="http://www.winterdom.com/weblog/2007/05/10/FlatWSDLWithWCF.aspx"&gt;Tomas Restrepo&lt;/a&gt; and &lt;a href="http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx"&gt;Cristian Weyers&lt;/a&gt;. Christian even provides the source for download and their FlatWSDL does a nice job. Thanks guys!&lt;br /&gt;&lt;br /&gt;But their example was related to self-hosted services. As I mainly try to run IIS based WCF Services I came on day to the point where I had to integrate FlatWSDL with an IIS based WCF Service.&lt;br /&gt;&lt;br /&gt;The problem. You do not directly control the ServiceHost object and thus&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="color: rgb(51, 51, 255);"&gt;foreach&lt;/span&gt;(&lt;span style="color: rgb(0, 204, 204);"&gt;ServiceEndpoint &lt;/span&gt;endpoint in selfHost.Description.Endpoints)&lt;br /&gt;endpoint.Behaviors.Add(&lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(0, 204, 204);"&gt;FlatWsdl&lt;/span&gt;());&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;won't work here.&lt;br /&gt;&lt;br /&gt;But Ok then. Everything related to ServiceHost Configuration you can do either in Code or via the ConfigFiles. The WCF Config Editor is really a great help here.&lt;br /&gt;&lt;br /&gt;So I just added FlatWSDL.cs to my project, recompiled it and fired up the WCF ConfigEditor.&lt;br /&gt;&lt;br /&gt;The first step is to register FlatWSDL as a "behaviour element extension" what can be done under the "Advanced - Extensions" tab.&lt;br /&gt;&lt;br /&gt;There is a button "New". Enter a Name, pick your Service.DLL and select.....&lt;br /&gt;&lt;br /&gt;nothing.... which is about the whole choice you have.&lt;br /&gt;&lt;br /&gt;When I googled for "wcf add custom endpoint behaviour config" I again stumbled accross an article from &lt;a href="http://jamescbender.com/bendersblog/archive/2008/03/01/making-wcf-quotbehavequot---part-three.aspx"&gt;James Bender&lt;/a&gt;  where he also implements an &lt;span style="color: rgb(0, 204, 204);font-family:courier new;" &gt;IEndPointBehaviour &lt;/span&gt;but here he derives his behaviour class from the abstract class  &lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;BehaviorExtensionElement&lt;/span&gt;&lt;/span&gt; as well.&lt;br /&gt;&lt;br /&gt;Related to &lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;BehaviorExtensionElement&lt;/span&gt;&lt;/span&gt; the help says:&lt;br /&gt;&lt;p&gt;"Represents a configuration element that contains sub-elements that specify  behavior extensions, which enable the user to customize service or endpoint  behaviors."&lt;/p&gt;&lt;p&gt;"Sounds great" I thought and derived the FlatWSDL class from &lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;BehaviorExtensionElement. &lt;/span&gt;&lt;/span&gt;So your class definition now looks like&lt;/p&gt;&lt;p  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 204, 204);"&gt;FlatWsdl &lt;/span&gt;: &lt;span style="color: rgb(0, 204, 204);"&gt;BehaviorExtensionElement&lt;/span&gt;,&lt;span style="color: rgb(0, 204, 204);"&gt; IWsdlExportExtension&lt;/span&gt;, &lt;span style="color: rgb(0, 204, 204);"&gt;IEndpointBehavior&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Doing so you just need to implement a property a methods.&lt;/p&gt;&lt;p  style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public override&lt;/span&gt; System.&lt;span style="color: rgb(0, 204, 204);"&gt;Type &lt;/span&gt;BehaviorType;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;and&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;protected override&lt;/span&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;object &lt;/span&gt;CreateBehavior()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;This is the whole new code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;public override&lt;/span&gt; System.Type BehaviorType&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;get &lt;/span&gt;{ &lt;span style="color: rgb(51, 51, 255);"&gt;return typeof&lt;/span&gt;(&lt;span style="color: rgb(0, 204, 204);"&gt;FlatWsdl&lt;/span&gt;); }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;span style="color: rgb(51, 51, 255);"&gt;protected override object&lt;/span&gt; CreateBehavior()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;          &lt;span style="color: rgb(51, 51, 255);"&gt;return new&lt;/span&gt; &lt;span style="color: rgb(0, 204, 204);"&gt;FlatWsdl&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;1.)  We compile and fire up the config editor again.&lt;br /&gt;We go to "Advanced - Extension - behaviour element Extension" and press new.&lt;br /&gt;Now we browse to our Service.DLL in the bin directory and Bingo!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/SbY7aPOZvSI/AAAAAAAAAD4/tC01z97p-eY/s1600-h/WCFConfigEditorAddExtension.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 306px; height: 320px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/SbY7aPOZvSI/AAAAAAAAAD4/tC01z97p-eY/s320/WCFConfigEditorAddExtension.jpg" alt="" id="BLOGGER_PHOTO_ID_5311498132479655202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We select &lt;span style="font-family:courier new;"&gt;Thinktecture.ServiceModel.Extensions.Description.FlatWsdl&lt;/span&gt; from the List.&lt;br /&gt;&lt;br /&gt;2.) We now browse to "Advanced - Endpoint Behaviours" und press "New Endpoint Configuration"&lt;br /&gt;We enter a name (here MexFlatWSDLBehaviour), press "Add" and select FlatWSDL from the List.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_lzlxCOYiDHU/SbY7at1H6wI/AAAAAAAAAEA/v9mj-Ak55nc/s1600-h/WCFConfigEditorAddEndPointBehaviour.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 231px;" src="http://2.bp.blogspot.com/_lzlxCOYiDHU/SbY7at1H6wI/AAAAAAAAAEA/v9mj-Ak55nc/s320/WCFConfigEditorAddEndPointBehaviour.jpg" alt="" id="BLOGGER_PHOTO_ID_5311498140695128834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In case there is no FlatWSDL in the List, save, close and reopen the ConfigEditor. It now complains that it can't find the DLL file. Press "Yes" browse to our Service.DLL in bin directory and click "Yes" when the editor warns you it is going to execute some code.&lt;br /&gt;Now at latest there should be FlatWSDL in the list.&lt;br /&gt;&lt;br /&gt;3.) Now add the newly created Endpointbehaviour to our ServiceEndPoint (not the mex endpoint).&lt;br /&gt;You can recognize your ServiceEndpoint as the "Contract" attribute points to your ServiceInterface.&lt;br /&gt;For "BehaviourConfiguration" select our "MexFlatWSDLBehaviour" from the list.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_lzlxCOYiDHU/SbY7awNXnDI/AAAAAAAAAEI/boKGffcejRs/s1600-h/WcfConfigEditorAddBehaviourToBinding.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 231px;" src="http://3.bp.blogspot.com/_lzlxCOYiDHU/SbY7awNXnDI/AAAAAAAAAEI/boKGffcejRs/s320/WcfConfigEditorAddBehaviourToBinding.jpg" alt="" id="BLOGGER_PHOTO_ID_5311498141333691442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Done&lt;br /&gt;&lt;br /&gt;When you now check the WSDL emitted from our WCF WebService you will find nice inline type schemas.&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;"&gt;&lt;pre class="source-xml"&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;wsdl:types&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:schema&lt;/span&gt; &lt;span class="re0"&gt;elementFormDefault&lt;/span&gt;=&lt;span class="st0"&gt;"qualified"&lt;/span&gt; &lt;span class="re0"&gt;targetNamespace&lt;/span&gt;=&lt;span class="st0"&gt;"http://tempuri.org/"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"HelloWorld"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:complexType&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:sequence&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/xsd:complexType&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/xsd:element&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"HelloWorldResponse"&lt;/span&gt;&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:complexType&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:sequence&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;xsd:element&lt;/span&gt; &lt;span class="re0"&gt;minOccurs&lt;/span&gt;=&lt;span class="st0"&gt;"0"&lt;/span&gt; &lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;"HelloWorldResult"&lt;/span&gt; &lt;span class="re0"&gt;nillable&lt;/span&gt;=&lt;span class="st0"&gt;"true"&lt;/span&gt; &lt;span class="re0"&gt;type&lt;/span&gt;=&lt;span class="st0"&gt;"xsd:string"&lt;/span&gt; &lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/xsd:sequence&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/xsd:complexType&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/xsd:element&lt;span class="re2"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Christian had found &lt;a href="http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx?CommentPosted=true#commentmessage"&gt;another approach&lt;/a&gt; through a custom ServiceHost and custom ServiceHostFactory. Look at the bottom of the article.&lt;br /&gt;&lt;br /&gt;I recommend taking a look at &lt;a href="http://wcfextras.codeplex.com/"&gt;WCFExtra&lt;/a&gt;. They just released Version 2. Among others it brings single WSDL support out of the box.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.evotegra.de/docs/FlatWsdl.cs"&gt;Download the SourceCode&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-3387752101228969928?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/3387752101228969928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=3387752101228969928' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3387752101228969928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/3387752101228969928'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/07/adding-flatwsdl-to-wcf-webservice.html' title='Adding FlatWSDL to WCF WebService'/><author><name>locotegrande</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_lzlxCOYiDHU/SbY7aPOZvSI/AAAAAAAAAD4/tC01z97p-eY/s72-c/WCFConfigEditorAddExtension.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-5341613511356505483</id><published>2008-07-24T02:39:00.000-07:00</published><updated>2009-03-04T08:49:12.352-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='must have'/><title type='text'>Must have Development Tools</title><content type='html'>&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;ProcessExplorer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gives you many details on running processes. Including IP Connections etc. Although these functions are really nice, the "Find Handle or DLL" functionality is a real life saver.&lt;br /&gt;&lt;br /&gt;Every Developer gets the error message "can not access file because it is used by another process" once in a while.&lt;br /&gt;&lt;br /&gt;But which programm/process is it? This is where the "Find Handle or DLL" functionality enters the stage. Simply enter the filename, and Process Explorer will tell you who is sitting on your file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DdCy8B_2a6Y/SIhQTxrsRhI/AAAAAAAAAEA/11vNCIS6o6Y/s1600-h/ProcessExplorerScreenShot1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_DdCy8B_2a6Y/SIhQTxrsRhI/AAAAAAAAAEA/11vNCIS6o6Y/s320/ProcessExplorerScreenShot1.jpg" alt="" id="BLOGGER_PHOTO_ID_5226515668247791122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Web(Service)-Development&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fiddler is a HTTP Debugging Proxy which logs all HTTP traffic between your computer and the Internet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_DdCy8B_2a6Y/SIhPStmu64I/AAAAAAAAAD4/yDQW8y5la8Y/s1600-h/Clipboard10.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_DdCy8B_2a6Y/SIhPStmu64I/AAAAAAAAAD4/yDQW8y5la8Y/s320/Clipboard10.jpg" alt="" id="BLOGGER_PHOTO_ID_5226514550461754242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;.NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Lutz Roeder's Reflector&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Excellent Tool for .NET Assembly reverse-engineering. Many plug-Ins available&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_DdCy8B_2a6Y/SIhRHOf_EaI/AAAAAAAAAEQ/bmqAXzeVYa4/s1600-h/Clipboard09.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_DdCy8B_2a6Y/SIhRHOf_EaI/AAAAAAAAAEQ/bmqAXzeVYa4/s320/Clipboard09.jpg" alt="" id="BLOGGER_PHOTO_ID_5226516552156647842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion &lt;/a&gt;&amp;amp; &lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN  &lt;/a&gt;&lt;/span&gt;&amp;amp; &lt;span style="font-size:130%;"&gt;&lt;a href="http://ankhsvn.open.collab.net/"&gt;Ankhsvn&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Subversion is a versioning system and TortoiseSVN is the fitting &lt;a href="http://subversion.tigris.org/" target="_top"&gt;Subversion&lt;/a&gt; explorer client,   implemented as a windows shell extension.&lt;br /&gt;Ankhsvn makes these 2 a dream team as in brings a Visual Studio 2005 &amp;amp; 2008 plugin, that allows you to handle most tasks directly from within Visual Studio.&lt;br /&gt;&lt;br /&gt;Once you understood the concept of versioning and Subversion you never want to live without it. Even for standalone developers it makes perfectly sense to use it. You need no server component, simply create your repository on your disc or filesystem, import in your stuff, checkout and never worry again about versions or unlucky modifications.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_DdCy8B_2a6Y/SImj3DRVYMI/AAAAAAAAAEY/6IjTVIgRJBk/s1600-h/Tortoisesvn_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_DdCy8B_2a6Y/SImj3DRVYMI/AAAAAAAAAEY/6IjTVIgRJBk/s320/Tortoisesvn_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5226889008706314434" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-5341613511356505483?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/5341613511356505483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=5341613511356505483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5341613511356505483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/5341613511356505483'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/07/must-have-development-tools.html' title='Must have Development Tools'/><author><name>locotegrande</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_DdCy8B_2a6Y/SIhQTxrsRhI/AAAAAAAAAEA/11vNCIS6o6Y/s72-c/ProcessExplorerScreenShot1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8389214606941174691.post-2363554448859724453</id><published>2008-07-17T05:34:00.000-07:00</published><updated>2008-08-14T00:04:54.553-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 6'/><category scheme='http://www.blogger.com/atom/ns#' term='walkthrough'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='config'/><category scheme='http://www.blogger.com/atom/ns#' term='E-Mail'/><title type='text'>Walktrough for mediawiki on Windows IIS - The gory details</title><content type='html'>I have the following setup:&lt;br /&gt;&lt;br /&gt;Windows Server 2003 with Inernet Information Server 6 (IIS 6) running. So installing Apache is not an option.&lt;br /&gt;&lt;br /&gt;First of all.&lt;br /&gt;&lt;br /&gt;It works with no limitation. Even with complete Email-Support.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For running mediawiki you need:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/downloads/mysql/5.0.html#win32"&gt;mySQL&lt;/a&gt; (I used 5.0.51)&lt;br /&gt;the &lt;a href="http://dev.mysql.com/downloads/gui-tools/5.0.html"&gt;MySQL GUI Tools&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.php.net/downloads.php"&gt;Php&lt;/a&gt; (I used 5.2.6)&lt;br /&gt;&lt;a href="http://download.wikimedia.org/mediawiki/1.12/"&gt;mediawiki&lt;/a&gt; of course 1.12)&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&amp;amp;displaylang=en"&gt;FastCGI for IIS 6&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gnuwin32.sourceforge.net/packages/diffutils.htm"&gt;DiffUtils for Windows&lt;/a&gt; (Optional but useful)&lt;br /&gt;&lt;a href="http://www.imagemagick.org/script/binary-releases.php"&gt;ImageMagick&lt;/a&gt; (Optional)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 102, 51);"&gt;&lt;br /&gt;A. Install ImageMagick&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Just run the installer and remeber the path.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 102, 51);"&gt;&lt;br /&gt;B. Install DiffUtils&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just run the installer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 102, 51);"&gt;1. Install FastCGI&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simply run the installer&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 102, 51);"&gt;&lt;br /&gt;2a. Install mySQL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simply run the installer. Not much to do here. Remember the Password of the "root" user. You will need it later to autocreate the mediawiki Database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 102, 51);"&gt;2b. Install the MySQL GUI Tools&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Simply run the installer.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 102, 51);font-size:130%;" &gt;3. Install PHP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Installation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is more tricky.&lt;br /&gt;&lt;br /&gt;When asked for the Web Server Setup choose :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;IIS FastCGI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I chose the following &lt;span style="font-weight: bold;"&gt;Extension &lt;/span&gt;(do not select all):&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;MySQL&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;MySQLi&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;OpenSSL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Enable the following &lt;span style="font-weight: bold;"&gt;Extra&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Pear Install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After setup completed&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Configuration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modify &lt;/span&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;php.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Under Start - Programms - PHP 5 you find &lt;span style="color: rgb(204, 0, 0);"&gt;php.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Edit the following parameter:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;fastcgi.impersonate = 1;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modify fastcgi configuration &lt;span style="color: rgb(204, 0, 0);"&gt;fcgiext.ini&lt;/span&gt; &lt;/span&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;file for php support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Click Start - Run and slap in&lt;br /&gt;&lt;br /&gt;%WINDIR%\system32\inetsrv&lt;br /&gt;&lt;br /&gt;Open &lt;span style="color: rgb(204, 0, 0);"&gt;fcgiext.ini&lt;/span&gt; in Notepad and add at the bottom&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;[Types]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;php=PHP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;[PHP]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;ExePath=D:\Program Files\PHP\php-cgi.exe&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;InstanceMaxRequests=10000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Make sure the Exepath reflects the path to your PHP installation!&lt;br /&gt;&lt;br /&gt;If you get the error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;FastCGI Error&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;The FastCGI Handler was unable to process the request.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;Error Details:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;    * Could not find entry for "php" on site 1 in [Types] section.&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;&lt;br /&gt;* Error Number: 1413 (0x80070585).&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;&lt;br /&gt;* Error Description: Invalid index.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;HTTP Error 500 - Server Error.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-family:courier new;" &gt;Internet Information Services (IIS)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;you did not edit &lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;fcigext.ini&lt;/span&gt; &lt;/span&gt;properly&lt;br /&gt;&lt;br /&gt;See also the full description &lt;a href="http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;Install MediaWiki to IIS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Installation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create a directory for you wiki under the wwwRoot Dir of IIS ( I used "wiki" in this case)&lt;br /&gt;&lt;br /&gt;Extract the mediawiki-1.12.0.tar.gz to the "wiki" IIS directory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Modification of config/index.php installer script&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;If you installed the DiffUtils:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Go to the wiki/config/ directory and edit the file index.php&lt;br /&gt;&lt;br /&gt;Find the line:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$diff3versioninfo = array( '$1 --version 2&gt;&amp;amp;1', 'diff3 (GNU diffutils)' );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and replace with:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$diff3versioninfo = null ;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you get the Message:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;PHP Warning:  shell_exec() [function.shell-exec]: Unable to execute 'D:\Program Files\GnuWin32\bin\diff3.exe --version 2&amp;gt;&amp;amp;1' in F:\secureinet\wwwroot\wiki\config\index.php on line 1824&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;you did not edit this line.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;If you installed the ImageMagick:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Go to the wiki/config/ directory and edit the file index.php&lt;br /&gt;&lt;br /&gt;find the line:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$imcheck = array( "/usr/bin", "/opt/csw/bin", "/usr/local/bin", "/sw/bin", "/opt/local/bin" );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and replace it with&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$imcheck = array( "", "D:/MYPATH/ImageMagick-6.4.2-Q16", "/usr/local/bin", "/sw/bin", "/opt/local/bin" );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Remember to replace MYPATH with the correct path and to turn Backslash \ into Slash /&lt;br /&gt;&lt;br /&gt;find the line&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$im = "$dir/convert";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and replace with:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$im = "$dir/convert.exe"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Configure the wiki directory settings in IIS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start - Settings - Administrative Tools - Internet Information Services&lt;br /&gt;&lt;br /&gt;Configure the "wiki" directory appropriatly. To be honest I just enabled everything:&lt;br /&gt;&lt;br /&gt;Script source access, Read, Write,Directory Browsing and Execute Permissions on Script and Executables.&lt;br /&gt;&lt;br /&gt;For me it is fine as I use the wiki in the intranet. For Internet usage this could be potentially insecure. Post a comment if you know what the best settings are.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Edit the permissions on the config Directory.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In explorer go the wiki directory&lt;br /&gt;&lt;br /&gt;Configure file permissions by rightclicking the "config" directory, go to the security tab and add "Everyone" with Permission "Full Control". The directory should be deleted anyway after the installation so it does not matter.&lt;br /&gt;&lt;br /&gt;If you get the error message:&lt;br /&gt;&lt;span style="font-family:monospace;"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;PHP Warning:  fopen(LocalSettings.php) [function.fopen]: failed to open stream: Permission denied&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;you do not have permissions to write the file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create the mediaWiki&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now start the Browser and slap in the URL&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;http://MyServer/wiki/config/index.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you have installed diff and ImageMagick it should come up with the message that they have been found.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Choose a name for your wiki&lt;/li&gt;&lt;li&gt;Enter a wiki admin Password (and remember it)&lt;/li&gt;&lt;li&gt;Disable all Email Options including email authentication (they won't work out off the box. All options can be enabled later)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Choose&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a Database Name&lt;/li&gt;&lt;li&gt;a Wiki Database Username and Password. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If the user and database do not exist, you must check the "Use superuser account" option. In this case the database and the user will be created for you. Put in the password of your MySQL root user.&lt;br /&gt;&lt;br /&gt;All the rest leave unchanged.&lt;br /&gt;&lt;br /&gt;Now hit the install Button and you should get a lovely success message.&lt;br /&gt;&lt;br /&gt;Now go to &lt;span style="color: rgb(0, 102, 0);"&gt;wiki/config &lt;/span&gt;directory and copy the &lt;span style="color: rgb(204, 0, 0);"&gt;LocalSettings.php&lt;/span&gt; file into the &lt;span style="color: rgb(0, 102, 0);"&gt;wiki&lt;/span&gt; directoy. If you use mediaWiki in the internet you should delete the &lt;span style="color: rgb(0, 102, 0);"&gt;config&lt;/span&gt; directory now.&lt;br /&gt;&lt;br /&gt;Now slap in &lt;span style="color: rgb(51, 51, 255);"&gt;http://MYSERVER/wiki/index.php&lt;/span&gt; and you should get a warm welcome on your newly created media wiki.&lt;br /&gt;&lt;br /&gt;Nice!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 102, 51);font-size:130%;" &gt;Email Support for mediawiki on Windows IIS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Remember I recommended to install the PEAR Extra during PHP Setup? (If you forgot, you can simply rerun the installer and modify the installation)&lt;br /&gt;&lt;br /&gt;Go to your PHP programm directory and run the pear.bat.&lt;br /&gt;&lt;br /&gt;This will ask you a bunch of questions. I simply confirmed each recommendation by return.&lt;br /&gt;&lt;br /&gt;After the installation you find a PEAR_ENV.reg . Double click it to add the configuration to the registry.&lt;br /&gt;&lt;br /&gt;Create an Includes Directory in your PHP programm directory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modify &lt;/span&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;php.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Under Start - Programms - PHP 5 you find &lt;span style="color: rgb(204, 0, 0);"&gt;php.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After installing PEAR your should have something like this. Edit the following parameter:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;include_path=".;D:\Program Files\PHP\pear"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;to&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;include_path = ".;D:/INSTALLATIONPATH/PHP/includes;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;D:\Program Files\PHP\pear&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Remember to adapt the path to reflect the correct path to your PHP directory.&lt;br /&gt;&lt;br /&gt;On Windows make sure you do use &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;;&lt;/span&gt;&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt;&lt;/span&gt; as seperator!&lt;br /&gt;&lt;br /&gt;I had some strage issues, where the change of my include path was not reflected in the running php scripts. To avoid unnecessary stress it is advisable to reboot the server now.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now Download &lt;a href="http://pear.php.net/package/Mail/download"&gt;Pear Mail Package&lt;/a&gt; (I used 1.2.0b1)&lt;br /&gt;&lt;br /&gt;Extract the folders to your newly created include folder.&lt;br /&gt;&lt;br /&gt;Now Create a folder "Net" in your "includes" folder&lt;br /&gt;&lt;br /&gt;Download &lt;a href="http://pear.php.net/package/Net_SMTP/"&gt;Pear Net SMTP Package&lt;/a&gt; (I used 1.3.1)&lt;br /&gt;Download &lt;a href="http://pear.php.net/package/Net_Socket"&gt;Pear Net Socket Package&lt;/a&gt; (I used 1.0.9)&lt;br /&gt;&lt;br /&gt;Extract the folders to your newly created includes/Net folder.&lt;br /&gt;&lt;br /&gt;your INSTALLATIONPATH/PHP/includes folders should now look like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;[Mail]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;[tests]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;Mail.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;[Net]/SMTP.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;[Net]/Socket.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;[Net]/[Docs]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and some other subdirectories.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now go to your &lt;span style="color: rgb(0, 153, 0);"&gt;wiki &lt;/span&gt;directory and edit the file &lt;span style="color: rgb(204, 0, 0);"&gt;LocalSettings.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Configure the Mail-Server by adding the following to your &lt;span style="color: rgb(204, 0, 0);"&gt;LocalSettings.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgSMTP = array (&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"host" =&gt; 'mymailserver.somewhere.com',&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"IDHost" =&gt; 'myDomain.com',&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"port" =&gt; "25",&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;"auth" =&gt; false&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if you need authentication use&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgSMTP = array(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; 'host'     =&gt; "mymailserver.somewhere.com",&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; 'IDHost'   =&gt; "myDomain.com",&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; 'port'     =&gt; 25,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; 'auth'     =&gt; true,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; 'username' =&gt; "my_user_name",&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt; 'password' =&gt; "my_password"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To Enable User Emails &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;find the lines:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgEnableEmail      = false;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgEnableUserEmail  = false;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and set to&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgEnableEmail      = true;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgEnableUserEmail  = true;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To Enable WatchList Notification&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;find&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgEnotifWatchlist = false; # UPO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and set to&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$wgEnotifWatchlist = true; # UPO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Remember you have to enable Email Notification for your Watchlist in your user profile as well.&lt;br /&gt;&lt;br /&gt;Done.&lt;br /&gt;&lt;br /&gt;Have fun with a fully operational wiki on Windows and IIS.&lt;br /&gt;&lt;br /&gt;Btw.&lt;br /&gt;&lt;br /&gt;If you are looking for WYSIWYG Editor have a look at &lt;a href="http://mediawiki.fckeditor.net/index.php/FCKeditor_integration_guide"&gt;fckeditor&lt;/a&gt;. A bit tricky to set up, but awesome. I am using version 2.6.2.&lt;br /&gt;&lt;br /&gt;For source code syntax highlighting have a look at the &lt;a href="http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi"&gt;Geshi&lt;/a&gt; extension&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389214606941174691-2363554448859724453?l=my-tech-talk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://my-tech-talk.blogspot.com/feeds/2363554448859724453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8389214606941174691&amp;postID=2363554448859724453' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2363554448859724453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8389214606941174691/posts/default/2363554448859724453'/><link rel='alternate' type='text/html' href='http://my-tech-talk.blogspot.com/2008/07/mediawiki-on-windows-iis-gory-details.html' title='Walktrough for mediawiki on Windows IIS - The gory details'/><author><name>locotegrande</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
