Rory Primrose

Learn from my mistakes, you don't have time to make them yourself

View project on GitHub

Adding workflows to a non-WF project

I have been building up a project that I need to add workflows to, only I didn’t create the project as a workflow project. This means that when I go to add a new item, I get the standard options along with WPF file types and even an option for a WCF service, but no workflow options.

After using WinMerge to compare the project file with a workflow project file, these are the actions I took:

  1. Add references to System.Workflow.Runtime, System.Workflow.ComponentModel and System.Workflow.Activities.
  2. Open the project file in notepad and make the following changes
  3. Add the following to the first Project/ProjectGroup element (it should contain the assembly details) :
<ProjectTypeGuids>{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>  

Given the name of the ProjectTypeGuids element, I am guessing that the guids should be the same for everyone, but you might have to compare the guids found in a new workflow project to you can create.

  1. Add the following after the CSharp.targets Import element under the Project element:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Windows Workflow Foundation\v3.0\Workflow.Targets" />
Read More

File URI's

This is one of those things that I have often thought about, but has never seemed important enough to read up on. I had always wondered why I often saw three slashes at the beginning of a file Uri. Now I know.

Read More

WCF and large messages

I am getting some interesting results when messages are returned from a WCF service. Small responses come through fine. When the responses start to get large, I run into the QuotaExceededException exception. This is fine because you can increase the MaxReceivedMessageSize configuration value on the client endpoint. This starts to fail when the size of the data continues to increase and eventually I get the exception WebException: The underlying connection was closed: The connection was closed unexpectedly__.

The service call is still being made (I can debug it), but it seems that the error is coming back quick enough that it is a problem with the server endpoint, rather than client endpoint or configuration on the client.

Anyone come across this before???

Read More

WCF and caching with a dash of IOperationBehavior

I have been looking at caching support and WCF recently. I have come across a few solutions. These are:

  1. Calling through HttpRuntime to get at the ASP.Net cache
  2. Using Enterprise Library Caching Block
  3. Rolling your own implementation, usually storing data in a Dictionary<String, Object> collection.

I have problems with 1 because that ties your WCF service down to an IIS and HTTP solution which is not good design. Option 3 is also not that great because typically this is built as a ‘quick and dirty’ solution that doesn’t support any cache dependency or cache expiration policies. I haven’t played with 2 yet, but it looks like that will be the go.

On a side note, I came across a code sample by Scott Mason (where’s the blog Scott???) that uses an IOperationBehavior implementation to hook the operation call to provide caching support outside the actual implementation of the service operation. This is a great idea. The only thing I don’t like about it is that operation behaviors can’t be set via application configuration. They can only be assigned to an operation (WCF method) via a custom attribute on the method or via the behaviors collection at runtime. Pity, it would be so nice if you could plug in different behaviors via configuration.

Read More

Databinding not firing

Here’s a little tip. If your databound control is not firing it’s databinding, make sure that the control and all of its parents are visible on the page. If it isn’t visible, OnPreRender doesn’t fire and therefore your databinding won’t either. Makes a lot of sense. There is no point having the overhead of databinding if you are not going to display anything. That just wasted a couple of hours on a really simple mistake.

Read More

Change the VS2005 environment layout

Visual Studio has this really nice setup page when you first run it after install where it asks you what kind of development environment you are familiar with, such as VB, C++, General etc etc. This is really cool, but not so cool when you pick the wrong one. Anyone know how to get prompted with this page again? There are no obvious registry entries that I can tweak.

Hey, don’t bother answering. I just figured it out. The import/export settings dialog allows you to reset the IDE to one of those values. Go to Tools -> Import and Export Settings -> Reset all settings -> No, just reset settings, overwriting my current settings and then select the IDE style you want.

Read More

Nested using statements

The using statement in the .Net framework is a really good way of neatly using and disposing of an object in your code. It is certainly much more elegant than having Try/Catch/Finally blocks where you manually dispose of your objects. I do however have a minor issue with nested using statements. I can’t put my finger on it, but it just doesn’t seem that ‘right’ to me. Maybe it just looks ugly.

The following is an example taken from John Papa’s latest Data Points MSDN Magazine article:

Read More

So you still can't have a path more than 260 characters???

I got hit with an issue yesterday when the local path of a file in TFS had a length greater than 260 characters. I couldn’t run a Get Latest and the IDE also seemed to hang on opening other projects. It reminded me about a situation a couple of years ago when I hit this same issue using longer paths in the framework.

Using reflector, I can see the following code in quite a few places in the framework.

Read More