Welcome to MSDN Blogs Sign in | Join | Help

The young (ISV) doesn’t always supplant the old

What keeps established software companies in their position in the face of competition from startups?

 

I have an interesting perspective. Before joining Microsoft, I was the CTO, alternately, of a rag-tag startup and an established, market-leading enterprise ISV.

 

There are a lot of reasons people stick with an ISV, institutional experience, branding, migration costs, risk aversion, user training and upheaval are just a few examples. Yet in the face of this, startups should have some important edges.

 

Startups should be able to more easily take advantage of new technologies, tools and development techniques. It is inherently easier to move to SOA, implement design patterns or have an all managed .NET solution if you are starting from scratch then if you have millions of lines of code and tens of thousands of users to migrate. This advantage alone has spawned hundreds of ISVs who hoped to gain market share by through technology. The problem is that the advantages of the new technologies, tools and techniques are often dwarfed by the pressure to close the functional gap with the "old lion" leader.

 

As anyone who ever been involved with sales for a startup will tell you, every sales prospect comes up with a different piece of must-have functionality that ties them to their current vendor. For the young Lion, quickly eliminating years or even decades worth of functional gaps with the established leader can be expensive and daunting and often leads to shortcuts on quality, scalability or usability.

 

The old Lion’s may finally have something to really worry about. WinFX architects and developers will be able to create highly scalable and flexible solutions so fast that it could undermine the advantages that leaders rely upon. Startups who design, develop, test and manage their projects with Visual Studio 2005 with Team System and who build solutions with Windows Presentation Foundation, Windows Workflow Foundation, Windows Communication Foundation, SQL Server 2005 and InfoCard will find productivity to be the strategic advantage they hope for.

 

There is a tipping point to watch for here. At some point, the young Lion’s advantages from higher productivity and more flexible architectures could swamp the lead the old Lion enjoys. The leader, weighed down with legacy systems, finds it unable to keep up with the startup and is left behind.

 

So it does not matter is you are with an old Lion enterprise ISV protecting your position or the young Lion startup, start your research at the WinFX Developer Center today.

Posted by mzammuto | 1 Comments

How (not) to build a successful ISV

Admit it, you have thought about starting a technology company.

Well, before joining Microsoft I left my job as a CTO of a medium sized ISV to bring to market and idea that I had. My product was the subject of articles in RFID Journal, Internet Retailer, won some awards, including one from Microsoft, and made some sales. Ultimately, I realized that the business model would not support building a successful organization. If you have ever thought of starting a software company then take a look at an interview I conducted on MicroISV, a site dedicated to small software startups. I hope you find it helpful.

Posted by mzammuto | 1 Comments

New Workflow Beta, hands-on labs, SDK and Visual Studio Extensions

We released Beta 2 of Windows Workflow Foundation. The package includes Extensions for Visual Studio 2005, runtime and SDK. There are also new hands-on labs available. Enjoy

English

Page http://www.microsoft.com/downloads/details.aspx?FamilyId=A2151993-991D-4F58-A707-5883FF4C1DC2&displaylang=en

Install Guide http://download.microsoft.com/download/2/7/f/27f7a7b1-53bd-48f9-9914-e2e26a5effd7/WFBeta2_Install_Instructions.htm

ReadMe http://download.microsoft.com/download/2/9/2/2921ef94-007b-4d9f-ba06-021329b88d7c/VS2005Extensions_for_WF_Beta2_Readme.htm

German

Page http://www.microsoft.com/downloads/details.aspx?FamilyId=A2151993-991D-4F58-A707-5883FF4C1DC2&displaylang=de

Install Guide http://download.microsoft.com/download/1/8/8/188168e6-4881-4c9d-94a7-34742390f9a0/WFBeta2_Install_Instructions.htm

ReadMe http://download.microsoft.com/download/5/1/b/51b24af7-8d77-47c0-8947-5768f728237e/VS2005Extensions_for_WF_Beta2_Readme.htm

Japanese

Page http://www.microsoft.com/downloads/details.aspx?FamilyId=A2151993-991D-4F58-A707-5883FF4C1DC2&displaylang=ja

Install Guide http://download.microsoft.com/download/6/6/f/66ff81ee-e089-4db5-9da8-ae1d67badf86/WFBeta2_Install_Instructions.htm

ReadMe http://download.microsoft.com/download/8/4/9/84975e78-5f80-4552-ac18-6463a7a3af38/VS2005Extensions_for_WF_Beta2_Readme.htm

Labs

Page http://www.microsoft.com/downloads/details.aspx?FamilyId=5DF74E3B-FB51-4A94-A11D-DFF70288A8BB&displaylang=en

Posted by mzammuto | 0 Comments

New CIO survey shows IT on the march

CIO Magazine has a new issue entitled “The State of The CIO ’06.” Oddly, while it is already on my desk the issue has not made it to their web site yet.  

 

I have a special interest in the importance of the CIO job. I have served as both a CIO and a CTO and have appeared on the CNN program, Global Office, and in CFO Magazine on the subject. At the time the discussion focused on what seemed to be the shrinking prestige and influence of the CIO, and by extension, end-user’s belief in technology as a strategic differentiator.

 

The magazine reports good news. A majority of IT executives say they will increase staff this year. CIOs also cite a large backlog of technology projects as their number one problem. This backlog is important not only for IT but for broader technology industry. It is true that the backlog stems in part from the shelving and delaying of projects during the post-bubble recovery, the economic recessions in Europe and The U.S. and as a response to the 9/11 atrocities. More importantly, however, I believe the backlog is reflective of an increased optimism in the opportunity for today’s technology to improve one’s business.

 

What I think is most important about the magazine’s surveys is that the CIO position seems to be regaining some visibility and authority. I have engaged in this debate over and over again. Say what you like, you will never convince me that reporting to anyone but the CEO is a good idea. This year the magazine reports a (small) reversal of the trend of the CIO reporting to CFOs with an increase in IT chief’s reporting to the CEO.

 

The magazine also reports more CIO mobility. There is a small but vital trend of CIOs heading businesses, business units and moving into operations. This broadening of career paths will help IT to attract and retain the very top people and will serve to spread technology savvy throughout corner offices and board rooms. This, in turn, will help organizations better and more broadly evaluate and implement technology, adding greater value with less risk.

Posted by mzammuto | 2 Comments

New CTP - WinFX December CTP

New week, new software. They are still propagating across Microsoft's external servers so the links may not work for an hour or so. How is that for fresh from the oven?

WinFX December CTP and the SDK and  Visual Studio Extensions codenamed 'Orcas'. If you are a Windows Workflow developer then you will want to go to the download for the Beta 1.2.

Posted by mzammuto | 0 Comments

Writing a C# socket listener, if you must

Socket programming can be tough and complicated. If you are reading this because you are trying to decide on a communication mechanism for your new project then let me save you some reading. Stick with something else if you can.

Web Services gives you operating system and limited language independence and can be done over a range of transport. I have shown in another article how to use a Win Form as a web service client. .NET has great web services support cross vendor interoperability is easier than ever before. .NET remoting is also good choice if it is all .NET. If you need socket based communications then make sure there is not an easier option than writing your own. If you need to support multiple legacy clients then you may have to go this route but check and see if there are any applicable third-party libraries you can use.

But if you need to write your own then this article will teach you how to do it in .NET using C#. If you only need a basic listener and client you should look into the Socket helper classes. These include the TcpClient, TcpServer and UdpClient classes in the Sockets namespace. Since UDP is connectionless there is no listener and the same class is used for your client and server. These classes are still powerful and will fulfill most production needs with few lines of code and fewer options and parameters to know.

Many socket communication applications of this type are written in C or C++. While the technology in .NET socket applications is not actually simpler than C++, it is simpler for you to write and maintain them in C# because .NET provides better abstraction of the underlying Win32 API functions.

One of the ways that C# makes it easier to develop network programs is the manipulation of strings. Much of the effort in socket programming is string manipulation. It is amazing how many security holes start with simple buffer overflows. C# handles strings in two different ways and you are going to want to get to know them.

Look at this code snippet and think about what is going on.

String astring = new string(“hello”);
astring+= “ “;
astring +=”world”;
Console.WriteLine(“My string = ‘{0}’”, astring);

Instantiate a string and then append it twice right? Logically this is true but .NET actually does not do it that way. When you create a string a set amount of memory is allocated and that allocation cannot be changed. This means that strings are immutable. So when you modify a string C# creates a new memory space for it and flags the original one for garbage collection. Creation a new memory space, placing the new value in it, and pointing to it creates overhead. Garbage collection is only a partial solution. The original memory is not reclaimed until the garbage collector gets around to it. Now look at the example above. The process of creating the new string and abandoning the old one actually happens twice, leaving 3 separate strings allocated in memory.

Instead you should use the StringBuilder class which is in the System.Text namespace. This saves resources because the StringBuilder class paradoxically does not create strings, it creates StringBuilder objects. An instance of the StringBuilder class starts with a minimum of 16 bytes of memory and dynamically can increase of decrease this memory utilization. You can use the Length property of the StringBuilder object to manually change the memory allocated.

StringBuilder mySb = new StringBuilder(“1234567890”);
//the length is 10 and the value is “1234567890”
mySb.Length = 7;
//the length is 7 and the value is “1234567”
mySb.Length = 10
//the length is 10 and the value is “1234567”

When you manually decrease the length you also reduce size of the memory allocation and the extra values are dropped off. When you increase it the unused portion of the larger memory is filled with empty values. In the example above remember you have not created a string, just a StringBuilder object. When you want to turn it into a string you call the ToString() method as in this example.

myLabel.Text = mySb.ToString();

C# stream manipulation is also easier and more elegant than it was in C or C++. Streams include client server communications as well as communication with hardware or logical devices. Depending on the type of stream you are accessing, there are three basic functions. You can write data from a memory buffer to a stream, you can read data from a stream and you can ‘seek’, or search for, a specific pattern of data in a stream.

Winsock is Microsoft’s stream communication API. Winsock defines a standard service provider interface (SPI) between the application programming interfaces (API), which include header and library files in an SDK or DLLs (Winsock DLL, Ws2.dll) and the protocol stacks. Winsock supports multiple protocols including IPv6. The Winsock SPI can be used to create your own transport service provider or to extend an existing transport SPI by using a Layered Service Provider (LSP).

Microsoft’s has done a good job of making Winsock API calls backwards compatible and minimizing versions. But there are differences which you should be aware of. Every version of Windows after Windows 95 has used Winsock version 2.2. Patched Windows 95 boxes should be running 2.0. In most cases the techniques here should work fine. However, Windows 95 originally shipped with version 1.0 and, only recently, Windows CE was upgraded from version 1.1 to version 2.2. So if you are planning to deploy on Windows 95 or CE, be prepared for some extra research and testing

IP-based communication programming involves two basic categories of communications, connectionless and connection-oriented. The types of solutions we are discussing here use a connection oriented SOCK_STREAM type socket over TCP versus a connectionless SOCK_DGRAM type socket over UDP.

Our socket communication will follow the following steps.

1) Create a socket
2) Bind the socket to an address or end point
3) Listen for an incoming communications attempt
4) Accept the communication
5) Send and receive messages buffers
6) Shutdown the communication channel
7) Close the socket connection

You will need to add the statement “using System.Net;” to the top of your classes to try out the techniques listed here. This is the namespace containing most the classes you are going to need to create our sockets and manage the communications.

Each of the parties in a socket communication is called an end point. When you create your endpoint you need to decide which Address Family you are using. This specifies which addressing scheme that a socket will use to resolve an address. The one you will most likely use is "InterNetwork" which indicates that you are using IP version 4 such as what is used on most Ethernet networks and the Internet (e.g. 10.0.0.1). .NET and the .NET compact framework support a lot of addressing schemes out of the box. Some of the more useful and interesting ones include AppleTalk, ATM, Banyan, Data Link, ECMA, InterNetworkV6, NetBIOS, OSI and SNA. You can also specify "Unknown" and "Unspecified." This article addresses only “InterNetwork” addressing but the concepts detailed here transfer to the other address family types.

Each endpoint has a unique address which is a combination of an IP address and a port number. You will need the local IP addresses of your devices for communication to occur. There is an IPAddress class which you can instantiate it by passing the value of your IP address as a byte array or a long. If you need to pass in a string as your values then there is a parse method which is shown below

IPAddress.Parse(string ipString);

This method will take the string and attempt to convert it to an IP Address.

Do not hard code your IP address as a constant or store it in a configuration file because these would have to change as the server’s IP address changes and it complicates working in a multi-server environment such as clusters or where you have separate development, testing, staging and production servers. For these and for a variety of reasons to you are going to want to look up the IP address dynamically.

There are a lot of ways of dynamically looking up IP addresses including looking the IP address up in the registry. Unfortunately the registry keys you need can be different from one Windows version to another. Another way to do it is to query a local DNS server for the IP address. You can find these in the System.Net namespace.

IPHostEntry myiHe = Dns.GetHostByName(Dns.GetHostName());
IPAddress myIp = myiHe.AddressList[0];

To get the IP address from the DNS and assign the value to the IPAddress object we create an IPHostEntry value and assign it to a DNS object using the GetHostByName method which is familiar to Winsock developers. In order to get the host by name we use the GetHostName method to tell us our local host name. Then we create an IPAddress object called myIp and set its value to the AddressList property.

Once you have your IPAddress value set then you need to establish a socket address to make your endpoint. The IPEndPoint requires an IP address and a port number. The IP address can be passed as either an IPAddress object like above or a long.

IPEndPoint ipEnd = new IPEndPoint(IPAddress address, int port);

So using the example above the constructor could look like...

IPEndPoint ipEnd = new IPEndPoint(myIp, 10000);

Unlike the IP address you probably do want to make the port number both dynamic and configurable. You just want to make sure that you are not using a port that is needed by another application on your system and preferably not one used by other applications on your network. Make sure you look at a list of common port numbers and try to select one that will not conflict with common applications. You may want to discuss this with your network administrator, particularly if there is a chance your software will run over a firewall or VPN. There are lists of port numbers assignments available on the Internet.

When you create your socket you need to indicate the address family, socket type and protocol type. We have already said that we are using “InterNetwork” as our address type and now we are gong to look at the others.

The socket type defines the type of data connection and the protocol type defines the network protocol. For IP communications using the InterNetwork address family we can select from the following combinations.

The one you are most likely option is to create a connection-oriented socket using a Stream socket type and TCP as the protocol. However if we want to create a connectionless socket then we use the Dgram socket type and UDP as our protocol. It is also possible to use the “Raw” socket type which supports ICMP and “Raw” as our protocol type values but both of these have specialized applications.

The type of socket you decide to construct dictates the options available. There are quite a few options including setting KeepAlives, MaxConnections, SendTimeout, receive options and multicasting options. Refer to the .NET documentation for SocketOptionName values associated with the type of socket that you have selected.

So now we are ready to create our socket object which has a number of important methods. The constructor for it looks like this…

Socket myServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Next we bind it to our endpoint using the Bind() method.

myServer.Bind(ipEnd);

Now we call the Listen() method, passing it an integer value representing the maximum length of the connection queue.

myServer.Listen(10);

Next we create our socket client and call its Accept() method. This method triggers the server to block, waiting for a client connection. Blocking communications can be controlled programmatically as well.

Socket myClient = myServer.Accept();

That is all that is required to make a socket listener. I plan to follow up with a look at building a TCP listener client and finally communicating between the two.

Posted by mzammuto | 0 Comments

Developing a Beta at Microsoft

We are currently working on Beta 2 of Windows Workflow Foundation (WF). For details on our release schedule you should read the official corporate information or contact your Microsoft representative. I thought outsiders would be interested in the development process at Microsoft as well as the status of the WF product development.

 

I have to summarize this because so many people fill so many important roles that it is impractical to try to mention them all here in any level of detail.

 

The Windows Workflow Foundation team includes doc, operations, development, test and program management organizations plus release management. The program managers each focus on a vital piece of the software puzzle. They develop plans for and manage the implementation of all the things that go into our product, serving as a liaison with related stakeholders as needed. For example, Technology Adoption Program (TAP) Managers plan how we will engage customers during the development process who wish to build and release solutions that employ WF. These managers work with customers to help them adopt WF, guiding them as they upgrade to our eventual release version of the product and serve as their representatives here in the product group.

 

Beta versions of product are very different from released products, of course. Beta products are intended to help customers evaluate and learn our products and their use is governed by the EULA or other agreements. The process, goals and standards are different than in a final release and you must make sure you understand the implications of Beta software before you use it.

 

So what is the team up to these days?

  • Development has accomplished their goals for this Beta, the product is functionally complete and, subject to final testing, we have met the quality, performance, stress and other development goals for this release.
  • Operations has branched our code library which allows us to simultaneously prepare one version of code for Beta2 release while continuing to work on the v1 code. Other build activities include code signing and running certain verification tools on the builds. During the time between the branch and release of Beta2, some fixes could be done in both sets of code.
  • Our User Experience group has turned in what we expect will be the final Beta 2 user documentation and it is in our build. They are verifying certain tasks while continuing to develop doc for our final release product next year.
  • Test has declared that our most recent build meets initial quality standards to declare it as a candidate for release. This opens up the floodgates on a long list of tests and verification by a range of other people who will determine if this build accomplishes the goals that we have set for Beta 2. Test has also started a new automated test pass on this release candidate.
  • Localization is verifying that the goals for this release are complete and is managing the localization process. This includes the conversion of visual elements into Japanese and German but eventually may include many other languages.
  • Our TAP Managers continue to support our early adopters, including coaching them on the changes from Beta 1.x to Beta2.
  • Legal will verify that we have met corporate goals for the release, including such things as the approved EULAs are in the product setup and logged in our internal systems.
  • Security is verifying that we have accomplished our product and corporate security goals and is preparing for our final Secure Windows Initiative audit for this release.
  • Performance & Stress has made our Beta2 release goals for the product, subject to final test signoff.
  • We continue to coordinate progress with our ‘internal partners’ who includes, among others, the Office group, Visual Studio, Longhorn and WinFX.
  • Test is completing a series of Release Criteria tasks including verifying the bits are signed, virus checking the build, double checking installation and uninstall, etc.
  • Privacy is verifying that we are in compliance with corporate standards for this release.
  • Support is verifying that Symbols are on our public symbols server and that our support plan is on schedule.

There are dozens of other things that go into our product. We scan the product checking for undocumented APIs. We scan the product to verify that it does not contain images, symbols or words that fail our “geopolitical” standards. We use tools and techniques to scan the product to make sure the code meets corporate code quality standards.

 

My days are filled principally with managing towards a smooth and on-time release of the product. I lead daily bug ‘triage’ meetings where the project leadership team reviews the outstanding bugs and dev and test report on their progress. I send a lot of email and organize a lot of meetings to follow up on the status of the outstanding project tasks. I am also tracking us against functional and quality requirements from Microsoft products that we are releasing with, such as Office and WinFX and working with the Program Managers who are manage our relationships with these groups. I also lead a weekly project leadership group meeting which is principally focused on project status issues, planning and updates from various team members. Also at these meetings we review other project related issues such as anything impacting our release criteria.

 

So that is a quick snapshot to give you just a taste of what it is like to deliver a Beta product to market at Microsoft. There are a lot of important roles, filled by hard working and smart people all dedicated to producing the best workflow technology possible. I hope that you will take time to research Windows Workflow Foundation, which is a powerful and exciting technology for building workflow enabled applications.

Posted by mzammuto | 0 Comments

Email: Not nearly dead yet

The author of this post argues the point that email is dead and that IM is the solution. I disagree. There are two elements of email that made it become a dominant form of communication in such a short period of time. It allows us to communicate asynchronously and its design centers on message persistence.

 

Take the telephone as an example. To enhance this synchronous form of communication we added receptionists and call forwarding and in order to have persistence we needed voice mail and even “sticky notes.” Synchronous communications are inherently disruptive, relying on all parties participating in the same activity at the same moment. This is just one of the reasons we view meetings as necessary evils.

 

Instant Messaging’s early adoption was among uber-geeks who were online a lot. But its adoption lagged behind email adoption among the occasionally connected. I used ICQ two years before AOL started getting into IM because that’s what my friends used. Similarly, chat rooms gained widespread adoption before IM because it was easier to find like-minded strangers online than it was to find your friends and family. IM took off as Internet adoption made it more likely your friends and family were online too. Today IM is hailed as the primary electronic communication mechanism among teens. This may be because they spend so much time available for communications and because they have a lesser need to persist their messages.

 

So that brings to mind the issue of persistence. Email is a file transfer system and individual emails are actually separate files, in most cases. A system like this is inherently geared to allow for message persistence and simplifies organization. Email could have been designed to restrict transfer between organizations and individuals, such as a clearinghouse or other opt-in system but its widespread adoption would have been crippled by these complexities. Sure we complain about spam and email clutter but this is more an issue of too much of a good thing hinting at the need for evolution.

 

IM is a replacement for vocal communications because it is synchronous and lacks persistence. Teenagers do not care about saving their messages, usually, but we in business secretly love this about email. We deride emails we see as being sent exclusively as CYA (Cover Your A**) messages. But this is an important element of email. It is harder to you to forget to do things with email and, more importantly, it is harder for other people to forget to do things you have asked them to do. Persistence increases accountability even when we, and our lawyers, wish that it did not.

 

This is why corporate IM will never supplant email in professional communications. The replacement for email is not IM it is something that we have not seen yet. Maybe it will look more like unified messaging that allows participants to switch among different communication mechanisms at any point in a conversation instead of being tied to the type of communication selected at the beginning of the conversation. Another element of next generation communication will include a mechanism to persist your contact information as you move and age. Email, mail and telephones all struggle with connecting people across stages in their lives and that is one of the reasons we have turned to blogs, personal web sites and social networks.

 

No, email is not dead; it is a step along the way. But, what replaces it will look more like email than IM.

Posted by mzammuto | 0 Comments

Building Fire-Breathing Web Services

I wrote this article about a year ago for an online magazine. It is based on concepts that were true in .NET 1.1 and should be updated. If you are using .NET 2.0 then you need to further research thread pooling and attachments, I included some links to help. Most of these tips apply to .NET 1.1 and 2.0.

-------------------------------------------------------------------------------

When I first started writing web services a few years ago I noticed that they were often fairly slow. If you are writing web services using the same techniques that you wrote other types of distributed applications then your web services will be slow too. So here are some thoughts on making them fast and powerful. In short, making them fire breathing web services.

The first step in building fire breathing web services is to make sure that you really should be using web services. ASP.NET web services uses XML serialization, do not forget how it works and what its characteristics are. Serialization and network communications are some of the most important bottlenecks in a high performance system. Use both sparingly and give thought to minimizing both wherever possible.

The base functionality for your client request is provided in the WebClientProtocol base class. This is extended in the System.Web.Services.Protocols.HttpwebClientProtocol namespace. A client uses the System.Net classes to generate proxy classes to provide the web services access. Depending on your need the client will be one of three flavors. These are the HttpGetClientProtocol, HttpPostClientProtocol or SoapHttpClientProtocol proxy classes. These classes take the XML request serialize it into a SOAP message.

ASP.NET clients use the same thread pool for encoding and transmission as do ASP.NET web services. So if you have both on the same computer, in addition to wasting time, you have a double hit on the local resources. The maxconnection setting in your machine.config file excludes local client calls so local calls can steal more resources from remote client calls.

Make sure that you change the maxconnection setting in the machine.config file from 2 to something higher. I suggest experimenting starting with 10 connections for each processor in the server and heading up form there. You may find the number between 13 and 16. As you increase them the CPU utilization will increase. Shoot for 70 percent utilization as a maximum. As your users and application grow run periodic tests to ensure you are allocating the optimal level of connections.

This is one of the key things to remember, whatever goes over your communication channel has to be serialized and formed into SOAP (or some other type of) messages and then transported and unserialized. Many client/server developers do not give consideration to what is going over the wire and with web services, your bad habits show through. Network round trips and unnecessarily large messages will hurt performance. Try to keep messages as small as possible and consider if compression is warranted.

When IIS receives an HTTP request for an ASMX page it utilizes the aspnet_isapi.dll ISAPI extension. There is an ASP.NET worker process created and entered in a processing pipeline which is controlled by the HttpRuntime object which passes it to the HttpApplication object and the HttpModule objects specified in your section of the Web.config file or the Machine.config file.

After execution of the modules in the pipeline, the asmx extension is verified with the WebServiceHandlerFactory handler to create a handler instance. This instance of the WebServiceHandler is what is responsible for processing web service requests. The HTTP handler uses reflection to generate method invocations from the SOAP message.

Web services are usually either messaging oriented or RPC (objects and methods) oriented.

Use primitive types at all times if you can. Methods should be stateless and should be combined. Create methods that take multiple parameters and perform multiple functions to reduce round trips.

Try to avoid state. I personally think state is overused. Make sure that you consider the scalability costs of state management. Be wary of excessive state management. Methods should not be stateful. If you need state and are willing to trade off performance for scalability then you can pass state back in forth in your calls instead of managing it server side.

Validate up front. As a rule, validate data at the earliest possible point. If you cannot validate at the user input then validate it before your message is created. Do not waste round trips on invalid data formats. A good option is to validate against a schema stored on the server. You can use XmlValidatingReader to download an XSD and validate client side before sending off the message.

Your parameters should be formatted using the default literal format except where you have interoperability with non.NET web services. In that case you will need SOAP formatting.

Bulk data can be transferred by returning in the SOAP message the URL of a file to download. This can save a ton of time serializing, compressing, etc large data transfers. You can also use chunking of fixed size byte arrays. SOAP attachments can be WS-attachments, Base 64 encoded or SOAP Message Transmission Optimization Mechanism (MTOM).

If you are subject to sudden bursts in traffic then you would experience a performance lag during a traffic burst as the application suddenly needs to create more threads to handle the increase. If you are using .NET framework 1.1 or newer then you can set SetMinThreads method of the ThreadPool class.

I hope these thoughts are helpful and I hope to see fire coming from your next web service.

Posted by mzammuto | 0 Comments

Windows Vista screenshots

If you have not had a chance to try out Vista yet then these screenshots will interest you. It includes IE 7.0, Media Player 11 and more.

 

UPDATE: I saw the commment about registration, try this link too. Also see links on Microsoft.com or here and another third party. Yet another and here are some higher res pics

Posted by mzammuto | 1 Comments

10 reasons to love Windows Workflow Foundation

Thanks for reading. Check out the Windows Workflow Beta 1.2: We have two different download pages. One is tailored for Office 12 users and developers and the other is tailored for WinFX developers.

 

  1. Ubiquitous. Single Workflow for Microsoft Windows which will serve as the workflow engine for WinFX, Office 12, SharePoint and many other products as well being implemented by ISVs and corporate developers.
  2. Flexible. Windows Workflow is a framework, not an application, and it together development of Human Workflow (Information Worker) and System workflow (B2B) systems allowing you to consolidate your collaboration and business development to one technology. Your solutions can take a wide range of forms such as client/server applications, web services, SharePoint applications and Microsoft Office applications.
  3. Changes its mind. Designing human workflow can be very frustrating to developers and human workflow development projects are highly prone to scope-creep. The truth is that people do not like to have their options limited. Our decision tree has a lot of branches. Flexible Control Flow allows your workflow to mirror human decision processes. WF also supports long running and stateful workflows.
  4. You can pick it up fast. The WF framework provides an abstraction from low-level workflow code and integrates into Visual Studio 2005. You do not need to learn some third party tool or master some complex middleware, just use your favorite .NET language. Developers can create custom activity libraries or download activities developed by others which have been posted at WindowsWorkflow.Net. You can even define workflow classes using XAML.
  5. An air of mystery. Come on! It has been called WinOE, Windows Workflow Services, WWF and WF. Anything that has had so many names before it is even released HAS to pique your interest
  6. On-ramp for BizTalk developers. The Windows Workflow Foundation Workflow Designer looks much like BizTalk Server Orchestration Designer. Microsoft’s Connected Systems division is producing both offerings and we want to give BizTalk developers a leg up on creating workflow applications. Just think of WF as a new bow in your quiver. For example, use WF when you need a human workflow solution, such as a document-centric application, that needs to execute on a client system.
  7. Microsoft Office. Office has emerged the development platform of choice for many corporate developers. As we have previously announced “Workflow in Office ‘12’ server and client products will rely on and extend the Windows Workflow Foundation-based workflow support in Windows SharePoint Services. Supporting workflows covering formal document processes, Web content management, and more. Office ‘12’ will also allow business users to create document-centric workflows. Web Designers can use Microsoft FrontPage can use a rule-based approach rather than the graphically-oriented technology of the Workflow Designer. Office ‘12’ servers will also include a set of Office-specific Windows Workflow Foundation activities for working with tasks and documents, along with support for creating forms using Microsoft InfoPath”.
  8. WinFX integration. WinFX is the developer platform for Windows Vista and Windows “codename Longhorn” Server and will include Windows Workflow Foundation. You can also install WinFX Runtime Components for Windows XP and Windows Server 2003 so WF can power all of your WinFX-based workflow needs.
  9. Our prices are insane!! Workflow is expensive to develop, extend & maintain. Microsoft is consolidating many of our own workflow needs into WF and making them available to the developer community. There will also be no additional charge for the WinFX Runtime Components. The Visual Studio extensions for Windows Workflow are available as a free download and provide you with an ongoing upgrade path.
  10. Workflow is a competitive advantage: Technology is a tool for productivity gains. We buy some technology because we like it, sure. But the engine of global advancement is realized through gains on personal and professional productivity. In the 1980s we began to revolutionize the information worker’s productivity, in the 1990s we tackled communications and accessibility of data. I believe the next big source of gains in human productivity will come from reducing the friction between our actions, making us smarter, faster, more and accurate. In short, we are all workflow developers now.

Have a very Happy Thanksgiving, - Michael Zammuto

Posted by mzammuto | 2 Comments

New WinFX CTP & Workflow Beta 1.2

We released Beta 1.2 of Windows Workflow Foundation two weeks ago for Office 12 Beta 1. But WinFX developers could not use this new Workflow since WF Beta 1.2 is not compatable with the September CTP of WinFX. The wait is over. The WinFX November CTP is now available and is compatable with WF Beta 1.2. Development of rich WinFX  and human workflow applications using Windows Workflow is easy with Visual Studio extensions for both products built using a single workflow framework.

Here is a first unified view of the future of Windows applications. The combined power of WinFX, Office 12 and Windows Workflow promises to fundamentally change application development. Use a single set of tools to build a broad range of user collaboration and enterprise workflow applications. Flexibility, power, speed to market and ease of use. It has never been a better time to be a developer.

Microsoft Pre-Release Software WinFX Runtime Components - November Community Technology Preview (CTP)

Microsoft® Windows® Software Development Kit (SDK) for the November 2005 WinFX® Runtime Components Community Technology Preview (CTP)

Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 1.2 for Microsoft Pre-Release Software WinFX Runtime Components - November CTP

Is you have the WinFX September CTP installed you need the Pre-released WinFX Runtime Components Uninstall Tool

Posted by mzammuto | 0 Comments

Windows Live Rocks

I am a Beta user of Windows Live mail service. So when I sign into my Hotmail account I am redirected to the Windows Live Mail interface. Love it. Lots of great features a la AJAX technology. Drag and drop, context menus, lightning fast search. I can also get there from Live.com which displays an inbox mail Gadget. Along with customized news, the weather (I don’t need technology to tell me it is going to rain here in greater Seattle, but nice to have anyway) and other features. I think it is clear that Microsoft is on the right track with web based software services and I look forward to seeing what is next.

Posted by mzammuto | 1 Comments

New Beta: Windows® Workflow Foundation Beta 1.2 for Office "12" (Beta 1)

Tonight we released Windows Workflow Foundation (WF) Beta 1.2. This software is an update to the WF released at PDC. There are two downloads available. One consists of the platform components for Office 12 Beta users needed to run WF applications. The other download consists of solution templates, activities, the SDK and other tools for workflow developers who are using the Visual Studio 2005 release candidate. Make sure that you read the instructions!

 

WF is an exciting product in a number of ways. Internally, a number of key Microsoft products including Office and Vista will be implementing workflow functionality using WF. Like so many other organizations, several of Microsoft’s products have implemented workflow by building the functionality into the product. As an organization that marks an opportunity for us to consolidate our workflow related efforts into a reusable offering that will save us money and make us more efficient.

 

Similarly, corporate developers and ISVs should find the product to be a huge timesaver in building rich workflow applications. I spent a lot of my career in corporate development and managing product development for ISVs and workflow is another piece of the puzzle.

 

There is a great new webcast available featuring John Evdemon and Paul Andrew. For more information you can visit WindowsWorkflow.NET. Be aware that at this time the download links point to the PDC bits.

Posted by mzammuto | 0 Comments
More Posts Next page »
 
Page view tracker