Processing Service Bus Subscriptions Through WCF

Microsoft provides a .NET API for working with Windows Service Bus, therefore you can write applications that interact asynchronously with queues, topics & subscriptions, however MS also provides WCF bindings that natively process service bus messages through WCF. After setting up the configuration, messages can be sent to a WCF service for processing. Let me show you how in this post by building a service that will take engagement requests for planned events. Note: This post assumes that you already have Windows Service Bus running locally and that you are aware for how to build Topics and Subscriptions. Another post will come later that illustrates how to send messages to service bus.

1. Create a new WCF Service Application.

 2. Renamed the default service and interface files to:

EngagementService.svc
IEngagementService.cs

3. Change the IEngagementService.cs code as follows building the interface that the service will use. It also has the data contract that will pass data about the engagement:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace SB.WCF.Subscription

{

[
ServiceContract]

public interface IEngagementService

{

[
OperationContract(IsOneWay = true, Action = "RequestEngagement")]

[ReceiveContextEnabled(ManualControl = true)]

void RequestEngagement(EngagementRequest request);

}

[
DataContract]

public class EngagementRequest

{

[
DataMember]

public Guid EngagementId { get; set; }[

DataMember]

public EngagementInfo Venue { get; set; }[

DataMember]

public string Description { get; set; }[

DataMember]public List<EngagementEvent> EventSchedule { get; set; }

}

public class EngagementEvent

{

[
DataMember]

public string EventName { get; set; }[

DataMember]public DateTime EventDate { get; set; }

}

public class EngagementInfo

{

[
DataMember]

public int Capacity { get; set; }[

DataMember]public string Location { get; set; }

}

}

4. Before changing the code for the service, add the nuget package for Service Bus 1.1 There are some references that need to be added.

5. Add the following code to the EngagementService.svc. I am using a complex object for requesting an engagement to illustrate a little more complexity. The only objective for the code below is to show that the engagement request has been sent to the WCF service:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

using System.ServiceModel.Channels;

namespace SB.WCF.Subscription

{

public class EngagementService : IEngagementService

{

public void RequestEngagement(EngagementRequest request)

{

try

{

Guid engagmentId = request.EngagementId;

var capacity = request.Venue.Capacity;

var location = request.Venue.Location;foreach (var engEvent in request.EventSchedule)

{

var docName = engEvent.EventDate;

var docValue = engEvent.EventName;

}

var desc = request.Description;

var messageProperties = OperationContext.Current.IncomingMessageProperties;

ReceiveContext receiveContext;if (ReceiveContext.TryGet(messageProperties, out receiveContext))

{

receiveContext.Complete(
TimeSpan.FromSeconds(10.0d));

}

}

catch (Exception)

{

//something un-amazing has happened

}

}

}

}

6. Next step is to add the glue, which is the configuration. If you noticed, once Service Bus 1.1 gets installed, it loads a ton of config settings within the web.config. Go ahead and delete what is in the web.config and add the following:

<?xml version="1.0" encoding="utf-8"?>

<configuration><

system.web>

<compilation debug="true" targetFramework="4.5" /><

httpRuntime targetFramework="4.5" />

</system.web><

system.serviceModel>

<behaviors><

serviceBehaviors>

<behavior><!--

To avoid disclosing metadata information, set the values below to false before deployment -->

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /><!--

To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->

<serviceDebug includeExceptionDetailInFaults="false" /></

behavior>

</serviceBehaviors><

endpointBehaviors>

<behavior name="EndpointBehavior"><

transportClientEndpointBehavior>

<tokenProvider><

windowsAuthentication>

<stsUris><

stsUri value=https://ServerName:9355/ServiceBusDefaultNamespace />

</stsUris></

windowsAuthentication>

</tokenProvider></

transportClientEndpointBehavior>

</behavior></

endpointBehaviors>

</behaviors><

services> <service name="SB.WCF.Subscription.EngagementService">

<endpoint name="EngagementProcessor"

listenUri="sb://ServerName/ServiceBusDefaultNamespace/EngagementTopic/subscriptions/EngagementSub1"

address="sb://ServerName/ServiceBusDefaultNamespace/EngagementTopic"

binding="netMessagingBinding"

bindingConfiguration="messageBinding"

contract="SB.WCF.Subscription.IEngagementService"

behaviorConfiguration="EndpointBehavior"/>

</service></

services>

<bindings><

netMessagingBinding>

<binding name="messageBinding" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:03:00" sendTimeout="00:03:00" sessionIdleTimeout="00:01:00" prefetchCount="1"><

transportSettings batchFlushInterval="00:00:01"></transportSettings>

</binding></

netMessagingBinding>

</bindings><!--

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />-->

<extensions><!--

In this extension section we are introducing all known service bus extensions. User can remove the ones they don't need. -->

<behaviorExtensions><

add name="transportClientEndpointBehavior" type="Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

</behaviorExtensions><

bindingElementExtensions>

<add name="netMessagingTransport" type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingTransportExtensionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /></

bindingElementExtensions>

<bindingExtensions><

add name="netMessagingBinding" type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

</bindingExtensions></

extensions>

</system.serviceModel><

system.webServer> <modules runAllManagedModulesForAllRequests="true" />

<!--

To browse web app root directory during debugging, set the value below to true.

Set to false before deployment to avoid disclosing web app folder information.

-->

<directoryBrowse enabled="true" /></

system.webServer>

</configuration>

I want to explan two settings from the web.config are the following:

listenUri="sb://ServerName/ServiceBusDefaultNamespace/EngagementTopic/subscriptions/EngagementSub1"

address="sb://ServerName/ServiceBusDefaultNamespace/EngagementTopic"

ListenUri listens to the subscription where address points to the topic where messages are being sent.

There are some ok examples out there but nothing fully complete in my opinion. Must of the samples use Azure Service Bus which is fine, but I wanted to show strictly how to use Windows Service Bus, as a pure on-premise setup. My next post will demonstrate how to send messages to the service created in this post. Fire away if you have any questions.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 4/18/2014 at 2:39 AM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Updating The Password For The Account Windows Service Bus Is Running Under

At the end yesterday's work day,my Service Bus Farm was working as expected, however this morning I was checking messages and they were failing to be sent to the queue. The error I was getting was, "The service did not start due to a logon failure." This particular farm is on the domain, so I have to use VPN to see it, which is one of the potential points of failure. Also, this morning I was informed that my password needed to be changed for the domain, and I did that too, for the second point of failure. My first thought pointed me to a post I did a while back for checking the status of the SB farm, and the power-shell commands for checking that the farm was up and running. All of the services were up and running, however I knew that changing my password caused the issues, next steps were to understand how it could be fixed.

The services were running because I had left the machine running, so I decided to reboot the machine. when I did I found that there were a couple of the services that failed to start up.

When tried to restart the SB host, is when I realized that changing the password was what was causing my issue. Therefore the solution was to go to the services and reset the password for the account that the windows services FabricHost and Service Bus Message Broker are running under.

 

Once the password is updated, the services can be either restarted from the "Services" window or simply by re-issuing the "start-sbhost" power-shell command. Messages will now continue to flow.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 4/17/2014 at 3:12 AM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Workflow Runtime Events

As a follow up to my session while speaking at Orlando's Codecamp, here is a cheatsheet on the different events that happen with workflow instances and the WF Runtime. In each event I share some explanation on "when","why" and "what happens" during workflow execution.

One of the important jobs of the workflow runtime is to manage running workflow instances events. You can think of the events as a workflow’s lifecycle. Let’s take a look at what workflow instance events we should be interested in following, whilte a workflow instance is running. 

 

WorkflowCreated

A workflow has been spun up or “created” when this event fires, however none of its activities have executed. In most cases, this event is so below the covers in the WFRuntime that it is not important to track.

 

WorkflowStarted

After the workflow instance has been started, scheduling of it’s root activity for execution occurs, therefore the WF Runtime raises the WorkflowStarted event. In most cases, this event is so below the covers in the WFRuntime, and is not important to track.

 

WorkflowLoaded

A workflow instance has been loaded into memory, however this occurs from a pre-existing workflow instance that has been previously persisted. Once the workflow instance has been loaded, it is now ready for it’s activities to be executed. In most cases, this event is under the covers in the WFRuntime, and is not important to track.

 

WorkflowIdled

Just because a workflow is loaded into memory, it does not mean that it is not doing work. A workflow instance can become idle as it is waiting to do work. For instance, it might be delayed or simply waiting on external events to set it in motion once again. This is an important feature of WF, because with WF’s persistence mechanisms, it can unload the workflow from memory releasing precious computer CPU cycles. Once a workflow instance becomes idle, it will raise this event, therefore it is very important to track.

 

WorkflowPersisted

Workflows can be persisted, allowing memory to be freed up from the CPU. Persisting a workflow is important when important work has been completed, the workflow has become idle, and when the workflow needs to be unloaded from memory. This is an important event to track because it lets you know when the workflow has been saved to the persistence store, however it can still fire even if a persistence store has not been enlisted by the WFRuntime. In most cases, this event is under the covers in the WFRuntime, and is not important to track.

 

WorkflowUnloaded

A workflow is said to be “unloaded” once it has been unloaded from memory. This can happen as the workflow becomes idle and by setting the UnloadOnIdle can be set to “True”. It can also happen once the workflow has been persisted, however a workflow can also be unloaded from the workflow host as well by calling WorkflowInstance.Unload. This is an important event to track because it lets you know when the workflow is no longer executing and has been freed up from memory.

 

WorkflowAborted

Sometimes a running workflow instance can run into problems during execution and needs to be aborted. Now don’t get confused with aborting and workflow and termination, because an aborted workflow is not terminal. Instead, the workflow runtime decides to go back to the last point from when the workflow was persisted. That way, the workflow can always be restarted from it’s last persisted point again. A workflow instance can also be aborted from it’s host during appropriate situations for ending a workflow’s execution. This event could be one you might want to track for a workflow instance’s execution.

 

WorkflowSuspended

Workflow instances that are running can be suspended from execution, however the instance is not unloaded. This is because a suspended workflow instance allows for changes to be made to the application, so the workflow instance can be resumed. In most cases, this event is under the covers in the WFRuntime, and is not important to track. Windows AppFabric is usually where you see these events tracked.

 

WorkflowResumed

After a workflow has been suspended, and the appropriate changes have been made to help the workflow run better, it can be resumed. Once the workflow has been resumed WorkflowResumed is fired. In most cases, this event is under the covers in the WFRuntime, and is not important to track. Windows AppFabric is usually where you see these events tracked.

 

WorkflowTerminated

A terminated workflow is cleared from memory and is not allowed to be reloaded. Terminating a workflow can occur, by calling the workflow instance to terminate from the workflow host or unhandled exceptions during workflow execution. WorkflowTerminated event is raised after the workflow instance has been terminated. In most cases, this event is under the covers in the WFRuntime, and is not important to track, however the WorkflowApplicationHost does have an OnUnhandledException event that should be tracked so you are aware when any exceptions occur, that are not accounted for so the workflow host can react accordingly.

 

WorkflowCompleted

Once a workflow has completed its execution from start to finish, the WorkflowCompleted event fires letting you know it has completed successfully. There are parameters that can be gathered as results of the workflow and the work that it has completed. This event is one you would definitely want to track for a workflow instance’s execution.

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 3/24/2014 at 1:46 AM
Categories: Windows Azure AppFabric
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Applying Recursion To Build Tree Structures

In my last post, the goal was to show how parent/child relationships could be derived from Entity Framework(EF) using recursion, however the code below does not do anything meaningful other than apply recursion for looping though a parent/child relationship for a books table of contents. it cannot alone for building a tree structure. Why?

private void DisplayTOCData(TableOfContent TOC)
        {
            if (TOC.TableOfContents.Count > 0)
            {
                foreach (var child in TOC.TableOfContents.OrderByDescending(o => o.ContentOrder))
                {
                    DisplayTOCData(child);
                    Console.WriteLine(". {0} is the root of {1}",TOC.Title,child.Title);
                }
            }
        }

 The reason why is probably the most important factor for understanding recursion and how it needs to work. The code above simply looks to see if there are any table of contents, orders the table of contents and then checks to see if there are any other table of contents underneath a parent table of contents so they can be dispayed. When thinking about how to build a tree, it is important to think about the characteristics of a tree structure, applied to characteristics of the data, used to shape th tree. For instance,

  1. A tree will have a starting root, therefore the parent/child relationship of data must have a starting root.
  2. An element within the tree may just be a parent element and maynot have content, therfore there will be table of content headers that may or may not have content associated to a page in a book.
  3. Siblings under a parent might have an order (so they are not randomly loaded), therefore each table of content element may have an order so they can be ordered accordingly to other table of contents under the same topic.
  4. There is a very high chance that the data loaded into the tree will not be ordered the way the tree anticipates, therefore comparisons must be made to the next possible element to see if it is another sibling or belongs elsewhere.

The code below will model from the previous post, and use the TableOfContent object referenced earlier.

 private void BuildTOCDetails(TableOfContent toc)
{
    if(toc.TableOfContents.Count > 0)
    {
       if (!toc.ParentContentId.HasValue)
       {//this is the root

       }
       foreach (var child in toc.TableOfContents.OrderBy(o => o.ContentOrder))
       {                    
          if (!this.CurrentParentId.Equals(toc.ContentId)
          && child.ContentOrder.Equals(1))
          {//starts the grouping of child topics by checking the first elements order

          }
         
          if (child.TableOfContents.Count.Equals(0)
          && child.ContentOrder.Equals(toc.TableOfContents.Count)) //last sibling with no children
          {//close the grouping of siblings
             if (child.TableOfContents.Count > 0) //check if the child has children
             {
                 //get the children through recursion
                 BuildTOCDetails(child);
             }
          }
       }
    }
}

 

Within each of the conditions code, you can add your own code for building your tree, using either 3rd party controls or HTML markup. Each condition illustrated in code takes into consideration the different concepts that should be applied for building the tree. 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 2/27/2014 at 2:03 AM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Managing Hierarchal, Parent/Child Data With Database/Code First Entity Framework And Recursion

You may be asking yourself, "hierarchal vs. Parent/Child...What is the difference?". Well in my opinion, hierarchal data is the same as data you may see as a treeview format that does not follow a predefined set of levels. I would argue to say that a parent/child relationship can also resemble the same data structure as hierarchal, where child records can also be parents and have additional children as to mimic human procreation. Simply put, I think the difference is only a formality. Regardless, this post will help you understand how to handle data that has "x" number of levels.

So if you have been searching the web on how to model hierarchal data, you probably came across links like the following...

http://stackoverflow.com/questions/7935100/define-relationships-for-hierarchical-data-in-entity-framework-code-first

http://goldytech.wordpress.com/2011/06/27/how-to-work-with-hierarchal-data-in-entity-framework/

 Table of Contents Table

In this post, I am going to focus on a "table of contents". We can both agree that there can be any combination of levels, for items in a table of contents, and each "table of contents" is usually associated to one and only one book. Let's look at how that might look as a database table.

 CREATE TABLE [dbo].[TableOfContent] (
    [ContentId]       INT           IDENTITY (1, 1) NOT NULL,
    [ParentContentId] INT           NULL,
    [Title]           VARCHAR (100) NOT NULL,
    [ContentOrder]    INT           NULL,
    CONSTRAINT [PK_TableOfContent] PRIMARY KEY CLUSTERED ([ContentId] ASC),
    CONSTRAINT [FK_TableOfContent_TableOfContent] FOREIGN KEY ([ParentContentId]) REFERENCES [dbo].[TableOfContent] ([ContentId])
);  

The script above shows that content for a table of contents has

  1. A primary key
  2. Nullable parent content id, because not all content has to have parent content, like the root of the TOC.
  3. Title of the content
  4. Order of the content (this will set the order for content that has sibling records)
  5. Foreign key which maps to the primary key, so a child record has to an existing record within the table.

One thing that is missing from the TableOfContent table might be another foreign key as a bookId, pointing to a book table, so we know which table of contents goes with a particular book, however there is no reason for the TableOfContent table to have a mapping for the BookId, since it would be easier to map the root contentId of the TOC within a Book table instead. Now we are associating the TOC root's content ID to a book, instead of needing to associate each content record to a bookId. Just to make sure you follow, we can do this because there is a parent/child relationship with the content records, that map up to one content record that is essentially the root of the content.

Entity Framework - Database Code First

Entity Framework has some power tools that are remarkably still in beta(beta 4). It is a visual studio extension and after it is installed, you can create code-first mappings and entities from an existing database. To me, this is the way to go, instead of using the table graphs or model-first with EF. Once the extension is installed in visual studio, you can see how to use it here.

Once you have reversed engineered the TableOfContent database table, EF does it's best job to map the relationship for the self referencing foreign key ParentContentId to the primary key ContentId.

You get the following based on mapping the TableOfContent table scripted above...

using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace PWC.Viewer.Data.Models.Mapping
{
    public class TableOfContentMap : EntityTypeConfiguration<TableOfContent>
    {
        public TableOfContentMap()
        {
            // Primary Key
            this.HasKey(t => t.ContentId);

            // Properties
            this.Property(t => t.Title)
                .IsRequired()
                .HasMaxLength(100);

            // Table & Column Mappings
            this.ToTable("TableOfContent");
            this.Property(t => t.ContentId).HasColumnName("ContentId");
            this.Property(t => t.ParentContentId).HasColumnName("ParentContentId");
            this.Property(t => t.Title).HasColumnName("Title");
            this.Property(t => t.ContentOrder).HasColumnName("ContentOrder");

            // Relationships
            this.HasOptional(t => t.TableOfContent2)
                .WithMany(t => t.TableOfContent1)
                .HasForeignKey(d => d.ParentContentId);

        }
    }
}

The TableofContent entity will look like this...

using System;
using System.Collections.Generic;

namespace PWC.Viewer.Data.Models
{
    public partial class TableOfContent
    {
        public TableOfContent()
        {
            this.Engagements = new List<Engagement>();
            this.TableOfContent1 = new List<TableOfContent>();
        }

        public int ContentId { get; set; }
        public Nullable<int> ParentContentId { get; set; }
        public string Title { get; set; }
        public Nullable<int> ContentOrder { get; set; }
        public virtual ICollection<TableOfContent> TableOfContent1 { get; set; } //change to TableOfContents
        public virtual TableOfContent TableOfContent2 { get; set; } //change to ParentContent
    }
}

 This is where EF does it's best to understand the relationship, by building a TableOfContent1 collection & TableOfContent2 properties. TableOfContent1 can be changed to "TableOfContents" and TableOfContent2 can be changed to "ParentContent". Now that the properties have changed in the entities, the code-first, mapping file associating relationships of the propertiese also need to be updated, so change the TableOfContentMap file's relationship from

// Relationships
this.HasOptional(t => t.TableOfContent2)
.WithMany(t => t.TableOfContent1)
.HasForeignKey(d => d.ParentContentId); 

 to

this.HasOptional(t => t.ParentContent)
                .WithMany(t => t.TableOfContents)
                .HasForeignKey(d => d.ParentContentId);

Recursion

The EF call to use for loading a book and it's table of contents is as follows...

var book = entityContext.Books
                            .Where(b=>b.BookId==1)
                            .Include("TableOfContent")
                            .FirstOrDefault();

This will us the EF object entityContext that inherits from dbContext(, to get the book that has a BookId of 1. EF will handle the relationship based on the mapping, and pull the data in the Book object's TableOfContent  property, but in order to read the data based on it's hierarchy, recursion has to take place. If you are not familiar with recursion in programming, it is simply calling a method or function from within the same method or function. In order to read the data that is returned from the code above, the following recursive method is required.

private void DisplayTOCData(TableOfContent TOC)
        {
            if (TOC.TableOfContents.Count > 0)
            {
                foreach (var child in TOC.TableOfContents.OrderByDescending(o => o.ContentOrder))
                {
                    DisplayTOCData(child);
                    Console.WriteLine(". {0} is the root of {1}",TOC.Title,child.Title);
                }
            }
        }

This method will read the TableOfContent parameter and check to see if it has any child records. It will then loop through the child records by first ordering them by their ContentOrder. The method then recursively calls itself by passing in the child record, to see if it also has any child records.

It has been awhile since I have had to do this and at first I was not sure the direction, however after careful thinking, I was able to make good decisions that took very little code to implement.

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 1/30/2014 at 2:23 PM
Tags: ,
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Sharing WF4.5 at Orlando's .NET Usergroup

Last week I had the honor of speaking at ONETUG, in Orlando, Florida and shared with the group how to version workflows and services using WF4.5.  I was able to promote my book Pro WF4.5 and even gave out two copies. Thanks for the opportunity for speaking at ONETUG and to the attendees who attended my presentation at ONETUG!

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 9/24/2013 at 2:20 AM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Service Bus Error, "Target machine actively refused it."

Today I came across an error where I could not connect to the remote host, which was hosting my local service bus instance. After much digging around, the only help I could find was trying to test the port to make sure it was opened. I checked the port, which was 9355 and noticed that it was open, so then I started looking around at the powershell commands to see if I could find anything else that might give me a hand. I found the Get-SBFarmStatus command which allows you to see the status for particular services that should be running. I noticed that the "Service Bus Gateway" was not running for some odd reason and then used the Start-SBHost command to get it started again. Smooth sailing after that... Now when I checked the port (9355) it threw a SocketException error, letting me know that service bus was now listening on that port.

HostId   HostName       ServiceName                           Status

    1    MachineName    Service Bus Gateway                Running

    1    MachineName    Service Bus Message Broker      Running

    1    MachineName    FabricHostSvc                          Running

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 8/20/2013 at 5:26 AM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Showing IT Pros How To Use WF4.5

Yes, WF4.5 is a framework that developers use to build long running business processes...blah, blah, blah...The remarkable advantage that WF has over most development technologies is that it is not just for developers! Non-developers like IT-Pro staff can use it for building logic that manages hardware and infrastructure too. This Saturday I am heading to the IT Pro Camp, here in Jacksonville, Fl. to show how WF works and discuss how WF4.5 could be beneficial to use for an ITPro's day to day activities. I will have some cool demos that walk through the new features of WF4.5 that ITPros can relate to and take advantage of instead of deep diving in the code.

Please register at http://itprocamp.com/jacksonville/register-now/  and check out my session this Saturday!

Currently rated 1.5 by 74 people

  • Currently 1.527027/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 6/13/2013 at 12:55 AM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Microsoft Developers UserGroup Jacksonville Kick Off Meeting

Marc Radacz and myself are kicking off a new dev usergroup here in Jacksonville, Florida. Our group is called MDUGJax and will focus on Microsoft technologies. We are kicking off our first meeting with the one and only Joe Healy. Joe will be sharing about the APIMash for Windows 8. Please help us support Joe and our new user group by registering here.

Currently rated 1.5 by 4 people

  • Currently 1.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 6/12/2013 at 2:50 AM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Error Attaching the Debugger To the Role Instance

If you saw my last post, I am in the process of refreshing my PC and installing all of the programs that were removed. One of those installs was the latest Azure SDK. Once I had completed the install I started testing my Azure solutions and noticed I was getting this error. I finally had some time to work on it, but did not find a direct fix. The only thing different from before I started refreshing my PC was that I was not have IIS installed, however I was still using IIS Express as the Local Development Server. "Refresh My PC" had removed IIS, but instead of checking to see if that was what I needed, I simply turned on "Internet Information Services Hostable Web Core" Feature which was mentioned here. This fixed my issue and my web roles fired right up!

Currently rated 1.5 by 37 people

  • Currently 1.486486/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: BayerWhite
Posted on: 5/29/2013 at 2:26 PM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed