2006-06-17

Gör så här när du kodar mot SPSite och SPWeb

Det handlar om att vara väldigt noggrann med hur du hanterar objekt av klasserna SPSite och SPWeb, för att undvika att applikationen äter upp minnet för dig.
Several of the Windows SharePoint Services objects, primarily the SPSite class and SPWeb class objects, are created as managed objects. However, these objects use unmanaged code and memory to perform the majority of their work. The managed part of the object is small; the unmanaged part of the object is much larger. Because the smaller managed part of the object does not put memory pressure on the garbage collector, the garbage collector does not release the object from memory in a timely manner. The object's use of a large amount of unmanaged memory can cause some of the unusual behaviors described earlier. Calling applications that work with IDisposable objects in Windows SharePoint Services must dispose of the objects when the applications finish using them. You should not rely on the garbage collector to release them from memory automatically.
Artikeln är skriven för WSS v3 men gäller för såväl WSS 2.0 som SPS 2003. Värt att notera är att vi har praktiserat detta under lång tid - bra att Microsoft nu äntligen kommer med en heltäckande rekommendation, det var några vinklar som jag hade missat.

Principen är enkel: se till att du ovillkorligen anropar Dispose() när du är färdig med objektet. Det finns olika sätt att göra detta. Jag brukar lägga ett block med using runt den kritiska koden, vilket ger samma effekt, så här:

String str; 

using (SPSite oSPsite = new SPSite("http://server"))
{
using (SPWeb oSPWeb = oSPSite.OpenWeb())
{
str = oSPWeb.Title;
str = oSPWeb.Url;
}
}
Microsofts artikel med rekommendationer och kodexempel här: Best Practices: Using Disposable Windows SharePoint Services Objects.

Technorati tags: ,

2006-06-14

SOA:s fyra lärosatser

Ok, här kommer något om tjänsteorienterad arkitektur (SOA). Ett stickspår kanske, men intressant och .Net-relaterat i allra högsta grad.

Först några definitioner: SOA brukar definieras som en affärsdriven approach till systemarkitektur baserad på ett antal sammankopplade tjänster. En tjänst är en fristående och återanvändbar modul, som har ett väl definierat gränssnitt och som inte gör några antaganden om anropande applikation eller underliggande plattform. Tjänsteorienterad design har uppstått genom evolution från komponentorienterade och meddelandeorienterade system, och är ett komplement till objektorientering.

Don Box formulerade i för ett par år sedan SOA:s fyra lärosatser (eller hur ska man annars översätta "tenet"), vilka kan fungera som fundamentala design guidelines för all tjänsteorienterad systemutveckling. Jag tar dem på engelska:
1. Boundaries are explicit
Services interact through explicit message-passing behind the boundaries. We make no assumptions on the space behind the service boundaries. Crossing service boundaries can be costly (for example, you may need to span geography, trust boundaries, or execution environments). We explicitly opt in to service invocation, by formally passing defined messages between services. The explicit boundaries allow us to formally express implementation independent interaction—we can be agnostic to choices of platform, middleware, or coding language used to implement other services.

2. Services are autonomous
Services behave reasonably as independent entities. We make no assumptions on the space between the service boundaries. There is no presiding authority in a service-oriented environment. Services are independently deployed, versioned, and managed. The topology in which a service executes can and will evolve. The service should expect that peer services can and will fail, and that it can and will received malformed or malicious messages. Services should be built not to fail, using (for example) redundancy and failover techniques.

3. Services share schema and contract, not class
Services interact solely on their expression of structures using schema, and behaviors using contract. The service's contract describes the structure of messages and ordering constraints over messages. The formality of the expression allows machine the verification of incoming messages, which allows us to protect the service's integrity. Contracts and schema must remain stable over time, so building them flexibly (for example, through use of xsd:any in schema) is important.

4. Service compatibility is determined based on policy
Both service-providers and service-consumers will have policies—operational requirements—for interactions across boundaries. A simple example of provider-side policy is that a service may require that the invoker have a valid account with the service provider. From the consumer-side, an organization may require that service invocations across the Internet be encrypted, so it will only use services that offer the capability of bi-directional security-enhanced data exchanges. Services express their capabilities and requirements in terms of a machine-readable policy expression. Policy assertions are identified by a stable, globally unique name. Individual policy assertions are opaque to the system at large; services must simply be able to satisfy each other's policy requirements.
Ganska akademiskt, javisst, men kloka ord som definitivt är värda att begrunda. Och när man funderar närmare på dem så är det uppenbart sunt förnuft. Sats 1 och sats 3 handlar om att skapa robusthet och tillhandahålla abstraktion genom att göra ett kontrakt av specificerade meddelanden (jmfr COM interfaces och "chunky methods" – gamla principer i ny tappning). Sats 2 är fundamental för alla tjänster: en tjänst måste fungera autonomt, det vill säga oberoende av vem som anropar, och utan implicita antaganden om hur meddelandet ser ut. Det innebär till exempel att en tjänst ska validera inkommande meddelanden och verifiera klientens behörighet. Sats 4 handlar om att tjänster använder policys för att deklarera sina förmågor (capabilities) och anspråk (requirements) – målet är att nå kompabilitet på en semantisk nivå.

Läs mer: Technorati tags: , , ,

2006-06-13

WinFx + .Net 2.0 = .Net 3.0

Dagens matematik: WinFx + .Net 2.0 = .Net 3.0.

Microsofts marknadskillar prickar in ännu ett klockrent namn. Känns inte helt lyckat. Nån mer än jag som blir förvirrad? Nåja, man vänjer sig väl snart.

Enligt uppgift är det en ren sammanslagning så att API:t från .Net 2.0 är intakt och oförändrat, samtidigt som WinFx-delarna går in under samma tak, vilket ger bruttolistan:
  • NET Framework 2.0
  • Windows Presentation Foundation
  • Windows Communication Foundation
  • Windows Workflow Foundation
  • Windows CardSpace (what?)
Dagen till ära har de öppnat en community-site också: http://www.netfx3.com.

Technorati tags: , ,

2006-06-12

Word 2007 Content Controls med mera...

Mo Donovan har bloggat om hur man, helt utan kod, kopplar ett underliggande XML-dokument till enskilda fält i Word 2007 med hjälp av den nya finessen Content Controls. Dessutom en bra övning i hur man trixar med nya formatet Open XML (.docx).

Läs här: Word 2007 Content Controls and XML – Part 1 (the basics).

Technorati tags: , ,

ECM Starter Kit for 2007 Office System

Nytt och hett på Microsoft downloads: ECM Starter Kit for 2007 Office System.
It contains over a dozen code sample projects that include document transformers, new records management features, and custom workflows. It also contains whitepapers and templates for workflow.

The kit is meant to be a supplement to the SharePoint Server SDK. Customers often ask us, “How do I implement X? Do you have an example of how to do Y?” So we put together these samples to implement the things that we get asked about the most. We hope it will be helpful to you in illustrating concepts and providing starting points for customization!
[ECM team blog]
ECM = Enterprise Content Management, om du undrar...

Technorati tags: ,

2006-06-09

Shared Services och MOSS:s arkitektur

Martin Kearn har skrivit en klockren artikel om Shared Services och arkitekturen för Office SharePoint Server:
With MOSS, it is mandatory to have a Shared Service Provider. This is a collection of application servers that provide shared services out to any portals or sites that need them. These services include:
  • Search
  • Index
  • Audience compilation
  • User profiles database
  • My Sites
  • Business Data Catalogue
  • Excel Services
Läs artikeln: MOSS Architecture & Shared Services

Edit: lägger till beskrivande bild:



Technorati tags:

Microsoft backar på PDF-support i Office 2007

Jag antar att ni hört det redan? Microsoft tar bort PDF-support och filformatet XPS från Office 2007 eftersom de riskerar stämning från Adobe. Funktionerna kommer finnas tillgängliga för nedladdning, men eftersom Adobe gnäller så plockas detta bort ur Office-produkten. Kommer dock att finnas som separat nedladdning, åtminstone som status är för tillfället.

Mer info:En stilla undran: vad håller Adobe på med? Är PDF ett öppet format bara för vissa kontorsprogram?

Technorati tags: