This post will provide you with a basic tutorial for utilizing SignalR with custom DotNetNuke Modules. If you want to bypass the blog post go check out the source on GitHub, you can Fork my Repository. The module created here will be very simple, if you want a full blown module with more features be sure to check out the open source DotNetNuke Module SignalRChat, and see it in action at http://dnnCHAT.com/
SignalR is an ASP.NET library for using websockets and long polling in your applications. Basically what this means, is that you can have your web pages (or apps) maintain an open connection with a webserver, passing data back and forth, without having to do standard posts and gets for the content and functions. SignalR is a free library that you can get from www.signalr.net and you can DL from nuget.org right into your Visual Studio projects.
It is with a bit of sadness, and a bit of excitement that I put together this blog post. After February 15th I will no longer be an employee of DotNetNuke. I’ve been with the company almost 3 years (March 1st would have been my anniversary), and I’ve been working with the project for the past 10+ years and worked for one of DotNetNuke’s leading partners, Engage Software, for almost 6 years before starting with DNNCorp.
I'll be presenting at the St. Louis .Net User Group meeting tonight. If you're in town and have nothing else to do come on out!
I've not been posting many DNN related blog posts here lately, there's a reason for that. I've been trying to seperate my personal site, www.chrishammond.com from some of the technical posts. Right now they are all being posted at http://weblogs.asp.net/christoc and my blog on dotnetnuke.com.
That will all be changing soon though, stay tuned for what I think is a very cool announcement later this week!
So today I was getting impatient with some of the load times on SCCAForums.com, so I decided to run the SQL profiler on the database to see if there were any suggested improvements to speed it up.
I ran the tuning wizard and it came up with a suggest that would be a 93% improvement, sold, lets run the script!
Fast forward, an hour later, when I go to make a post on the server and boom it fails. WTF? "Hey Dave, can you post and see if my ban on your account works". He gets the same error.
Not good. Anyways, SQL server's tuning wizard created a view, and when applying an index to that view it setup a requirement for ARITHABORT ON to be set when inserting into the cs_posts table.
It took me a while to fix it, but I think everything is back up and running now. I removed the index on the view that was created :(
Lesson learned, don't just execute random SQL on your database, even if SQL server suggested it!
Yesterday I posted that I had found a fix for the issues with the Ajax ScriptManager issues that have been occuring with DNN 4.7 and greater.
Well here it is! It's not pretty, but from my testing so far it appears to fix the problems I've been having here on www.ChrisHammond.com
To use this fix you're going to have to recompile the DotNetNuke Source package you can download from www.dotnetnuke.com. I've only tested this with 4.8.1 source, but I don't believe there should be any issues if you're trying to recompile 4.7.0 or 4.8.0. Here are the two files you need to make changes to.
This fix does not apply to DNN 4.8.2 or greater, 4.8.2 has a fix for the issue
So I have been doing some testing on my website and needed to redirect requests to http://chrishammond.com to http://www.chrishammond.com/. Lucky for me the site is using IIRF to manage my urls from the old community server days to my DotNetNuke conversion.
Using IIRF I'm able to create a simple rule that will handle the redirects for me, I've pasted in the full blog
Earlier today we had a customer post a question in the forums on www.engagemodules.com regarding using Engage: Publish as a replacement for the Text/HTML module within DotNetNuke.
That is definitely one of the use cases we have for Publish, though have not promoted that much. Using Engage: Publish as a replacement for the Text/HTML module gives you actual CMS functionality within DNN. You can now have versioning and approvals on your content for your website, rather than just giving access to content editors who then can make live changes on your website.
For the steps to configure Publish as a Text/HTML replacement check out the Wiki entry I updated today on the topic.
So I'm finally getting around to doing a write-up about my conversion from CommunityServer to DotNetNuke. The conversion wasn't for the faint of heart, though it has been a great learning experience, which I hope will be beneficial to anyone else considering moving away from CommunityServer or other platforms and onto the DotNetNuke platform.
I chose to move from CommunityServer to DotNetNuke 4.8.0 running the Engage: Publish module, available from www.engagemodules.com. My reasons for choosing the Publish module are detailed below. Overall the process has taken me rougly 3 weeks, though not all of that time was spent doing things productive :). I hope to cover some of the details on this conversion, and the thoughts going into the process, as well as thoughts after the process. Before I do that though I will give you a little background on my experience with both systems first.
So I've been working for the past few weeks on an a little project. The goal is to convert http://chrishammond.com from CommunityServer to DotNetNuke. I'm not going to be using the DotNetNuke Blog module, instead I've been adding some new features into the Engage: Publish module so that it will support blog like functionality, with the ultimate goal of making it support nearly all the blog type functionality that you find in common blogging systems. I've spent probably 100 hours over the past month or two working on the module (mostly on my own time) to get it setup for the conversion.
I believe I have the software nearly ready to go so a few days ago while I was in Chicago for some DotNetNuke Training classes that I was conducting I started working on the SQL scripts that I will be using in the conversion. I have most of these scripts configured as the import process seems to be good, all the blog posts and tags are pulled over. I still have a few more things to finish up on the import process though.
Here's a list of things I need to do to get the site ready for the conversion. I'll mark them off as I get them completed.
Create conversion scripts for all blog posts (955 posts)
Script to convert all tags (300+ tags)
Script to convert all comments (1194 comments)
Create a URL Handler for the old to new URLs (an unknown number of urls)
Skin the site (3 DNN pages initially with more in the future)
As I typed it up I see I have more left to do than I expected! I would like to see this will all be done by 1/6/2008 but I don't see that happening as it is 1am on the 6th right now. I'll keep working for a bit longer, then get back to it tomorrow evening after I watch American Gladiators!
More coming soon on my conversion from CommunityServer to DotNetNuke!
Update 2:30am 1/6/08: I've finished the conversion scripts for Comments now as well.
DotNetNuke 4.8.0 dropped today! Get it now from the Downloads page.
Read more about changes to...
Tonight we released the latest version of Engage Publish, 4.4.4 (12/9/2007). This release has a few minor bug fixes, a few UI improvements, and some enhanced features!
Here's a brief overview of the changes for 4.4.4. Be sure to read about all of the changes in the Release Notes for 4.4.4.
Corrected some globization issues with datesEnhanced Article's Version DescriptionCorrected issue with PrinterFriendly pageCorrected a globalization with Language urls
Upgrade Instructions: Backup your database before performing ANY module installations or upgrades. Install the module as you would a new module from the Module Definitions page. The module should upgrade itself from there. If you have any installation problems be sure to post in our Forums on EngageModules.com
Engage: Publish is the industry's leading Content Management Versioning and Workflow module for the DotNetNuke platform. The module is developed by the team at Engage Software, you can find out more information about the module on the Engage: Publish page at EngageModules.com.
Here's the collection of posts I've been making about OpenForce07 here in Las Vegas. I'll update the list on Thursday as well
OpenForce07 Wednesday AfternoonOpenForce07 Wednesday, the time has come and gone, My Session
OpenForce07 Wednesday Morning
OpenForce07 Tuesday Afternoon: DNN Development Security
OpenForce Tuesday Afternoon:
OpenForce Tuesday: Shaun's Keynote
OpenForce Tuesday Morning: Scott Guthrie's keynote
We're sitting here at Scott Guthrie's keynote this morning as he starts to discuss Visual Studio 2008 and development on the platform. Scott reiterated the announcement from last night that Visual Studio 2008 will be released later this month, available to MSDN subscribers and they will also be sending out copies to the attendees of DevConnections.
Sitting here this morning I've seen quite a few core team members walking by.
Vincenc Manasas (sorry Vincenc)
After Scott's presentation is over there will be a short break for the expo hall and then Shaun Walker's DotNetNuke Keynote will take place. I'm sure that room will be packed, so if you read this before then, get there early.
So far Scott is just covering some of the basics of 2008. Such as: Multitargeting to allow development in 2008 that can be built towards specific older frameworks of the .Net runtime, 2.0, 3.0, 3.5. The IDE will only show you intelligence and tools available to the specific version that you are targeting.
Rich CSS Management and HTML designer the Expression WYSIWYG designer.
LINQ and rich Data Support, new technology in 3.5, easily queries and works with data, ORDesigner included
I'm now sitting in the speaker. Room, trying to get online. There's Wireless here at hte conference, and I can get connected to it, but from there I'm pretty much SOL. So far the speaker room isn't looking too much better as I'm still typing this and not posting it! Heh, gotta love that. I had a darn IP address specified on my wired connection, no wonder I couldn't get online.
Well it's Sunday the 4th of November, my wife's birthday. Where are we spending it? In Las Vegas! The DotNetNuke Conference, OpenForce07 starts on Tuesday here at the Mandalay Bay so we came out to Vegas a few days early. Last night we went to see KA at the MGM, it was awesome. Not quite as good as La Reve that we saw at the Wynn two years ago, but still a great show.
Today we're going to do some site seeing and then have dinner with her folks again. The rest of the week is DotNetNuke related.
If you're in Vegas for DevConnections/OpenForce be sure to checkout my session on Wednesday "DotNetNuke Administration Best Practices". I'm looking forward to the conference as a whole, as well as getting to speak at my first "big" conference. I've presented at Tulsa Tech Fest the past two years (5 sessions) and multiple user groups all over the country, but this is my first big conference.
This is actually a very simple trick to do inside of your modules, though you might need to setup an option to allow this to be turned on or off depending on what the site administrator wants the page title to be.
In C# you can use the following code
DotNetNuke.Framework.CDefault tp = (DotNetNuke.Framework.CDefault)this.Page;tp.Title = "This is my page title";
So the next time you're coding a module and need to change the page title, it's that simple.
See you all at OpenForce07 in Vegas!
DotNetNuke 4.6.2 was released today! You can get it from www.dotnetnuke.com
You can see what was fixed in 4.6.1 which was released last week with the link below. I believe, and this is unofficial, the 4.6.2 release contains a quick fix for ModuleSettingsBase
Download it now! I've already upgraded a few sites to 4.6.2 and will be upgrading more sites this week!
Here's a quick list of why you should go to the OpenForce07 conference in Las Vegas in November 2007! Feel free to copy the list and create your own.
OpenForce07 is the first DotNetNuke specific conference
You get to hear presentations from the brightest in the DotNetNuke World
Vegas Baby, Vegas
Meet the Core Team
I'll be there!
It's Vegas, how can you say no?
Don't forget, if you can't make it to Vegas you should try to make it to OpenForce Europe in September!
Registration is open, so start bugging your bosses, get them to foot the bill for your trip! It will be a great time for anyone who uses DotNetNuke, either as an administrator, content editor, or developer. There is plenty of information to learn with the best resources in the business there to learn it from!
Over the weekend (I missed it because I was working on my car all weekend www.project240z.com) DotNetNuke 4.5.4 dropped, you can get it from www.dotnetnuke.com
You can see a list of changes on the Gemini site at http://support.dotnetnuke.com
I've cleaned up the list a bit and posted it here as well.
Admin / Host Functions Bug DNN-5075 Adding/deleting security roles - notification/date format. Admin / Host Functions Bug DNN-5239 Issue with "required" profile properties. Admin / Host Functions Bug DNN-5433 Redirect after login Admin / Host Functions Bug DNN-5616 Core code should not reference external images... >Admin / Host Functions Bug DNN-5646 last lock-out date incorrect Admin / Host Functions Bug DNN-5765 Sitemap.aspx Including Link to DotNetNuke.com Admin / Host Functions Bug DNN-5614 Page Quota Not Working in Demo Portals Admin / Host Functions Bug DNN-5771 Profile Definition Required Needs to be Tied to Visibility Admin / Host Functions Bug DNN-5715 Install wizard runs when database is missing Admin / Host Functions Bug DNN-5727 Can't delete default home page after installation/yellow screen of death Admin / Host Functions Bug DNN-5803 Save stylesheet in site settings clears selected logo Admin / Host Functions Bug DNN-5855 Upgrade Status Indicator Admin / Host Functions Bug DNN-5787 Account Login module is not visible to logged in users Admin / Host Functions Bug DNN-5847 Add Existing Module no longer allows settings change to original Admin / Host Functions Bug DNN-5862 Module Cache Expiration Admin / Host Functions Enhancement DNN-5805 short circuit check for known account defaults Admin / Host Functions Enhancement DNN-5854 Google Adsense Support Control Panel Bug DNN-1579 Misleading Tooltips General Bug DNN-5754 Profile Property Names that contain spaces raise js errors Installation / Upgrade Bug DNN-5853 *.ZIP Packages should be installed automatically Installation / Upgrade Bug DNN-5605 Password length error string Installation / Upgrade Bug DNN-5606 Possible incorrect description text Localization / ML Bug DNN-5835 typo in manage users localization file Localization / ML Bug DNN-2612 XML Error in Resource Verifier Localization / ML Enhancement DNN-5778 Inconsistent on page help text on the Account Login module Help buttons Performance Bug DNN-5852 Add Tab Hangs on Site with large volume of Pages Performance Task DNN-5714 unneccesary call in BuildDiv method of FieldEditorControl Security Bug DNN-5802 ReturnUrl - Cross Site Request Forgery Vector Security Bug DNN-5829 DNN Membership Preventing Active Directory Login Security Bug DNN-5746 New user registration not working if specific page defined Security Bug DNN-5734 Roles duplicated on "Global Roles" due to list values Security Bug DNN-2593 Custom module permissions not deleted Security New Feature DNN-678 SSL Support Skinning Bug DNN-4590 DNN not rendering link to skins CSS file Skinning Bug DNN-5618 FixImagePath routine trashing APPIMAGEPATH Skinning Bug DNN-5672 Pagingtable class made ineffective by hard-coded styles Templates Bug DNN-5549 CS1010: Newline in constant error after creating new CS module using template UI / Usability Bug DNN-5628 Assignment issue in HelpButtonControl UI / Usability Bug DNN-5708 Wrong CSS class specified for "Manage User Credentials" tab
I'll be updating my sites today! Also, check out the "New Feature" of SSL support in the Core! Sweet!
Sometimes you just have to take a break at the office and play with toys! I must say, our office environment is great, everyone is under 40 (except for Grandpa Henry), and we get to enjoy our days. We are always looking for experienced or willing to learn DotNetNuke developers at Engage Software. Below is a link to some of the fun we had yesterday. (right click and download the file before trying to watch it, it is a 350mb file, as it's in HD)
There apparently were two .Net Security Patches made available last night in WIndows Update. They are causing some problems with DNN, not sure which versions specifically, but I've seen issues reported in 4.3.6 and 4.3.5 so far.
Sebastian posted this in a forum earlier today as fix for the Text/HTML module no longer working.
in /controls/TextEditor.ascx line 9 replace id = ”celTextEditor” Runat=”Server” with id = "celTextEditor" Runat="Server"
The issue being the CURLY quotes (I don't know the proper term and am too lazy busy to look it up). I had another client with the same problem, they had curly quotes in their skin file instead of normal "" quotes, with windows update last night the skin immediately broke.
So if you're having some issues with your DNN sites, start looking for funky quotes and replacing them with standard quotes!
A few years back I was enlightened by Chris Paterra in the ways of using NANT scripts to aid in the packaging of DotNetNuke Modules. Using NANT to package your WAP (web application project) modules within Visual Studio 2005 is a snap, and can save you a LOT of time each time you have to come up with a new release.
Using NANT scripts we are able to create the Private Assembly Installation ZIP file and Source files for Engage: Publish by running a single command from the Command line. With our Publish module this process takes about 23 seconds on average, for our smaller modules such as Engage: F3 the process takes less than 2-3 seconds.
To get started with using NANT scripts in your own development environment you need to download the latest (0.85) release from SourceForge, you can visit the project page at http://sourceforge.net/projects/nant/
Once you've installed NANT on your machine (I install it on my C drive in a c:\nant\ folder) you'll need to add NANT to your system variables path so you can call it from the command line.
To do this:
Right click on My Computer and choose Properties
Go to the Advanced Tab
Find the System Variables section and Modify the Path variable
Add your NANT folder (c:\nant\) to the path, separating entries with the semicolon (;)
Save the settings.
Now I'd recommend adding a .BUILD file to your DNN Module's project/solution. I've provided a sample build file on our Tutorial Page at www.engagemodules.com, you do have to login in order to access the file. The provided sample file is a good start for your project, by opening up the file in VS2k5 you'll see it is a XML document with some basic information about the product name and folder location.
You'll want to find the references to Engage and EngageF3 in the BUILD file and replace them with the name of your module and business name. You can also play around with the include/exclude options in the Fileset node to add or remove certain types of files from your packages. You'll see the two sections in the build file that define which ZIP files to create, one section is called CreateBinZip and one is called CreateSrcZip.
Once you have the BUILD file setup you'll want to check a few more files in your DNN project.
In the .DNN File be sure to set your module version properly and include the SQLDATAPROVIDER files, as well as the necessary DLLs. In the AssemblyInfo.vb (.cs in our case. At Engage as we do 95% of our DNN module development in C#) be sure to setup your DLL information and version information. By setting the version number in the assemblyinfo and .dnn file you can get NANT to include the version number in the package's file name, allowing an easy way to handle upgrades from version to version for your modules.
Once you have all of the files in the solution setup properly you can run the NANT script. To do that bring up a Command Prompt, change directories to your DNN/desktopmodules/ModuleName/ folder. At the command line type "nant" and watch the magic happen.
If everything builds properly the script will create a Package folder in your Module's folder, inside of the Package folder you should find two newly created ZIP files, one labeled Install and one labeled Source.
Technorati Tags: ASP.NET, DotNetNuke, DotNetNuke Tips, Daily Tips, NANT, C#, VB.Net, Module Development, Engage
Kind of a last minute blog post, but we're holding the July 2007 St. Louis DNN User's Group meeting tonight.
More info can be found at http://www.dnnug.com
Basics: 6:30pm 11811 Manchester Rd, Des Peres, MO 63131
Topic: Just a basic DNN round table discussion, how people are utilizing DNN, and discussion of future meeting topics.
See you there!
Welcome back to the DotNetNuke tips! I started doing this over a year ago, though with getting married last fall and working on my Datsun 240Z lately I haven't blogged near as much lately about DNN topics. So here we go, starting up again with my DotNetNuke Tips.
Today's tip follows:
When you're doing testing locally with a backup for a Production Database and Website one of the things you need to be sure to do is change your Portal Alias for your local URL, instead of your production URL. If you don't do this you'll hit the local URL and it will most likely redirect you to the production URL. This can cause a bit of chaos if you don't notice that you're no longer on the local/testing URL and start modifying the production web site.
To change your portal alias you can do the following.
Open your SQL Server management tool; SQL Enterprise Manager, SQL Server Management Studio, or whatever you choose to use.
Browse to your local/test database, open up the PortalAlias table. You can either Modify your existing Alias, or you can add a new Alias to this table. test.myurl.com for example, be sure to setup the proper portal ID if you're adding a new alias and you have a lot of different aliases in there. You might also need to setup the aliases for the child portals as well if you plan on using those.
The next step is crucial. You'll want to reset your website before you try to hit the new alias. You can do that in a couple of ways, I always prefer to open up the web.config file, add a carriage return and hit save. This will cause IIS to reload the site, clearing out the cache and loading the new portal aliases.
Look for more DotNetNuke tips coming soon!Posted from...
Last week it was announced that DNN won Editor's choice from Visual Studio Magazine, read the press release here!
A day or so ago Joe posted a link to the speaker announcements for the OpenForce 07 conference in Vegas in November.
There are some very cool topics that will be covered out in Vegas. I hope to meet as many of you as possible, and see you in my presentation as well! Here's a link to the OpenForce page.
Here's a list from the current Speaker's page.
DGN100: DotNetNuke Open Force ’07 Keynote AddressShaun Walker
DGN103: Panel Discussion: DotNetNuke – The Road AheadJoe BrinkmanNik KalyaniScott WillhiteShaun WalkerIn this panel discussion, the four co-founders of DotNetNuke Corporation will share their vision for the company and the DotNetNuke Open Source project. The resources, approach and business model required to manage and grow a large Open Source project such as DotNetNuke are substantially different than those required for a commercial software company. Get an inside look at how DotNetNuke Corp. is addressing today’s challenges while preparing for the future.
DGN102: The Quiet Enterprise Web Revolution: DotNetNuke as a WeaponMark TrenchardEnterprises are grappling with ways to reduce system complexity and cost yet increase capability, speed to market, and flexibility. Current web technologies give enterprises the rare opportunity to get it all and the ones that get it are quietly reinvesting in web architectures to achieve competitive advantage. In this session, Mark looks at DotNetNuke from an IT leader’s chair and believes that the solution has a strong value proposition for companies that want to build out a multi-portal platform with a rich set of shared services. He will discuss the DotNetNuke advantages from an IT leadership view and explore the dimensions that are unique to larger enterprises that may need additional investment. SKIN DESIGN
DSD201: Creating Accessible DotNetNuke Skins Using CSSLee SykesCathal ConnollyIn this session you will learn how to create a clean, simple, search engine-friendly and accessible skin that takes advantage of the features that CSS layout designs provide: accessible, flexible, search-engine-friendly, small file size, and cross-browser compatible. You will also become familiar with issues that need to be considered when creating skins that meet accessibility legislation and are XHTML compliant. We will take a freely available XHTML- & CSS-based skin, convert it to a DotNetNuke skin, and configure it to ensure that it renders compliant markup. In addition, we'll look at transforming non-compliant portions of markup, and look at techniques to ensure that your site remains compliant.
DSD101: Introduction to DotNetNuke SkinningTracy WittenkellerThis session will give you a better idea of how to create great-looking and flexible skins for DotNetNuke that utilize CSS. First we will review how to create properly formatted and flexible HTML and CSS for DotNetNuke skins and containers. Then we will take a closer look at XML attributes and the important role they play in defining skin and container functionality. The session will also touch upon customizing the default DotNetNuke menu and its CSS styles. Finally, we will review the proper process for packaging DotNetNuke skins and containers.
DSD202: Menu Controls for DotNetNuke SkinsPeter SchotmanIn this session we will compare and review various free and commercial menu controls for DotNetNuke skins. We will use a range of examples to understand best practices, advantages and drawbacks of the various menu controls. This is a session for the intermediate to experienced skinner who wants to expand her/his toolbox. MODULE DEVELOPMENT
DMD303: Advanced DotNetNuke Module Development ConceptsCharles NurseThis session will focus on some advanced module development topics, including: module skinning/templating techniques, DAL+ and database agnostic tips, module plug-in architecture, use of the property editor and other...