వర్గం ఆర్కైవ్స్: SharePoint అభివృద్ధి

SharePoint తో ఇంటరాక్టింగ్ వెదురు క్యాలెండర్ "ఊహించని దోషం ఏర్పడింది" కారణాలు

నేడు, I’ve been working in an environment that uses a Bamboo calendar web part for some improved collaboration. This a standard medium/small farm with two load balanced WFEs, ఇండెక్సింగ్ మరియు InfoPath మరియు ఒక గుంపుగా SQL తిరిగి చివరకు ఒక "అప్లికేషన్ సర్వర్".

The client installed some disaster recovery software onto one of the WFEs and that resulted in a broken WFE for a specific site in the site collection. Whenever load balancing pointed at the affected WFE and that site, users saw a largely blank white screen with the sentence “An unexpected error occurred”. No other info showed, ఆ వాక్యం.

They asked me to look at it. I easily reproduced the problem and then added a ?contents=1 to the end of the URL. This is how I learned they were using the Bamboo web part. I went back to the page and now, హఠాత్తుగా, ఇది నాకు ఒక nice క్రమముగా లోపం సందేశాన్ని చూపించాడు:

image

నేను అనుమతిస్తూ కంటే ఇతర ప్రదర్శించడానికి నియంత్రిత దోష సందేశం పొందడానికి ఏమి జరుగుతుందో లేదా ఏమి తెలియదు ?contents=1 bit of the query string.

ఈ బహుశా చాలా అరుదైన అంచు విషయంలో కానీ మీరు ఆ సందేశం వస్తే, "ఊహించని దోషం ఏర్పడింది" ముందుకు వెళ్ళి జోడించండి ?క్వారీ స్ట్రింగ్ కు విషయాల = 1 మరియు దారితీస్తుంది ఇక్కడ చూడండి.

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

వద్ద ట్విట్టర్ లో నన్ను అనుసరించండి http://www.twitter.com/pagalvin

Technorati టాగ్లు: ,

Microsoft.SharePoint.dll న దర్పణం ఉపయోగించి

Redgate .NET Reflector మైఖేల్ బ్లూమెంటల్ ఒక అప్ చాలు ఉంది హెచ్చరికలు మరియు వీక్షణలు గురించి వ్యాసం ("Which views can be used when Creating an Alert ?"), which is interesting on its own merits. అయితే, I was even more interested to see how he methodically walks through the process of using Redgate’s .NET Reflector. Step by step, he shows how to use that tool track down how SharePoint determines whether a view on a list should be "subscribable" ఒక మంచి పదం లేకపోవడం కోసం (he explains this much better than I do 🙂 ).

SharePoint కాలంలో ఈ సమయంలో, you’d almost have to be deaf and blind to have not heard or read about using that tool. It’s advanced stuff and my own sense is that it’s in many ways a tool of last resort. అయితే, మీరు అది అవసరం భావిస్తున్నాను కాని నిజంగా తెలియదు ఉంటే ఎలా, మైఖేల్ యొక్క వ్రాయడం అప్ ఈ విషయం మీద ఒక గొప్ప ట్యుటోరియల్ వంటి తెలుస్తోంది.

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

వద్ద ట్విట్టర్ లో నన్ను అనుసరించండి http://www.twitter.com/pagalvin

క్యాలెండర్ వీక్షణ లో క్యాలెండర్ అంశాలు సార్టింగ్

నేను ఇచ్చిన రోజున ప్యానెల్ చర్చలు ట్రాక్ ఒక క్యాలెండర్ ఉపయోగించి వెబ్,,en,నేను రెండు సెషన్ల కలిగి,,en,మధ్యాహ్న,,en,నేను ఉదయం సెషన్స్ మాత్రమే సెషన్ ID ద్వారా అక్షర ఇవ్వబడ్డాయి చూపే ఒక అభిప్రాయం సృష్టించడానికి కావలసిన,,en,ఈ సాధనకు కొద్దిగా గమ్మత్తైన,,en,నేను సులభంగా కేవలం ఆ రోజు ఈవెంట్స్ చూపిస్తున్న ఫిల్టర్ వీక్షణ సృష్టించవచ్చు,,en,క్యాలెండర్ అన్ని ఆ సంఘటనలు చూపించు మరియు వారు అన్ని అదే గంట జరుగుతాయి ఉంటే,,en,ఇది గంట స్లాట్ లో వాటిని ప్రక్క ప్రక్కనే జాబితా,,en,ఆ గొప్ప పని,,en,గమ్మత్తైన భాగంగా ఉంది,,en,అది ID ఆకృతిలో వాటిని జాబితా కోరుకుంటున్నారు,,en,"సెషన్ 02 నేను జోడిస్తే,,en,ఆపై "సెషన్ 01,,en,సెషన్ ID వీరిని జాబితా,,en,వెబ్ వినియోగదారు ఇంటర్ఫేస్ ఉపయోగించి వీక్షణ కాన్ఫిగర్,,en,అదృష్తం లేదు,,en,అంశాలను క్రమం ఈ విధంగా ఏ ఎంపికలు ఉన్నాయి,,en. I have two sessions: morning and afternoon. I want to create a view that shows morning sessions only listed alphabetically via a session ID. This is a little tricky to accomplish (నేను స్పష్టంగా వాస్తవ ఏదో తప్పిన తప్ప).

I can easily create a filtered view showing just that day’s events. The calendar will show all those events and if they all take place on the same hour, it lists them side by side in the hour slot. That’s great. The tricky part is that, అప్రమేయంగా, it wants to list them in ID format. ఈ విధంగా, if I add "Session 02" and then "Session 01" క్యాలెండర్, ఆ క్రమంలో వాటిని చూపిస్తుంది (ఉదా, సెషన్ 02 ఆపై సెషన్ 01). To list them in Session ID order, నేను ఈ విషయాలు ప్రయత్నించండి ఆలోచన:

  1. Configure the view using the web user interface. No luck. There are no options to sort items this way.

    పని లేదని నుండి, I am now hoping there’s a CAML query somewhere in there that will allow me to override the sort. CQWP lets me make that kind of change, బహుశా క్యాలెండర్ అలాగే అవుతుంది?

  2. వెబ్ భాగం సవరించు, look for an "export" ఫంక్షన్ మరియు … BZZZT! I can’t export its XML. There is no export option.

    I’m still holding out hope that I can find and modify some CAML query. Since I can’t export the web part, ఆ SharePoint డిజైనర్ ఆకులు.

  3. I add the calendar web part to a sandbox site and open that site using SharePoint Designer. I look at the markup for the web part and I find what I’m looking for. It’s encoded madness, కానీ అది లేదు: "<ListViewXml …. >ఎన్కోడ్ పిచ్చి</ListViewXml>". ముఖ్యంగా, ఈ రత్నం ఉంది:

<ప్రశ్న>
<పేరు>
<DateRangesOverlap>
<FieldRef Name="EventDate"/>
<FieldRef Name="EndDate"/>
<FieldRef Name="RecurrenceID"/>
<Value Type="DateTime">
<నెల />
</విలువ>
</DateRangesOverlap>
</పేరు>
<Orderby><FieldRef Name="Session_x0020_ID" /></Orderby>
</ప్రశ్న>

(నేను డీకోడ్ చేసిన &LT;'లు మరియు &GT యొక్క స్పష్టత కోసమని బహుళ వరుసలకు వాటిని విభజించారు).

చేర్చు <Orderby> సెషన్ ID ద్వారా బిట్ మరియు ఇప్పుడు అది రకాల, అంతర్గత జాబితా అంశం ID.

అతిపెద్ద చిట్కా లేదా’ కు టోపీ బెక్కి ఇసర్మాన్ ఇషా Sagi యొక్క బ్లాగ్ పోస్ట్ ఆమె వ్యాఖ్య కోసం: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. I wouldn’t have put the <Orderby> ఆమె వ్యాఖ్య లేకుండా కుడి స్థానంలో.

నేను వెంటనే స్క్రీన్ షాట్లు సాధించాడు మరింత స్పష్టంగా వ్రాయడానికి ఆశిస్తున్నాము, కానీ ఒకవేళ నేను ఎప్పుడూ, కనీసం నేను ఈ చాలా చేసింది.

</చివర>

SharePoint ఫీచర్స్ & సొల్యూషన్స్ మేనేజ్మెంట్ — CRUD లో U మర్చిపోవద్దు (లేదా ఆ విషయం కొరకు D)

మేము సమిష్టిగా SharePoint పరిష్కారాలు గురించి సమయం ఆలోచన యొక్క ఒక గొప్ప ఒప్పందానికి ఖర్చు — ఎలా వాటిని సృష్టించడానికి, ఇది సాధనం ఉపయోగించడానికి, వారు అమర్చే విఫలం ఉన్నప్పుడు ఏమి జరుగుతుంది, టైమర్ ఉద్యోగాలు, దర్శినిలను, మొదలైనవి. We spend so much time thinking about the up-front bits that it’s easy to forget that we need to retract them as well. Retracting solutions is probably more difficult, ఒక సంభావిత రూపకల్పనను కోణం నుండి, than deploying them. Deployment is basically a cookbook affair. Typically, ఒక ఫీచర్ ఇన్స్టాల్, బహుశా ఒక ఫీచర్ రిసీవర్ ఒక జాబితాలో కొన్ని డేటా లోడ్ చేశారు, that sort of thing. అయితే, ముడుచుకునే సమర్థవంతంగా మరింత క్లిష్టంగా ఉంటుంది.

ఇవ్వబడిన పరిష్కారం ఇటువంటి కళాఖండాలు సృష్టించవచ్చు:

  • కంటెంట్ రకం
  • జాబితా శతకము
  • సైట్ శతకము
  • ఒక జాబితాలో డేటా
  • కూడా రిసీవర్లు
  • InfoPath రూపాలు

జాబితాలో వెళ్తాడు.

అది సరిగ్గా ఆ కళాఖండాలు instantiates ఒక పరిష్కారం రూపొందించడానికి ఖచ్చితంగా ముఖ్యమైన ఉన్నప్పటికీ, it’s just as important to consider the update and delete cases. If your solution creates a new list and populates that list with data, what happens when the solution is retracted? In some cases, the list should be deleted. In other cases, it should be left intact for historical purposes. Your business requirements will guide you to the right decision.

To help with this, create a matrix that lists each artifact your solution deploys to SharePoint. List three columns per artifact, one for create, update and delete. For each case, determine the correct outcome for that operation.

This sort of analysis is obviously best done before the solution is ever deployed to a SharePoint farm. అయితే, like smoking, it’s never too late to start doing things correctly. Create that matrix and develop a plan to address the missing update/delete scenarios. It may be a hard problem to solve, but at least you’ll have put a box around the problem.

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

వద్ద ట్విట్టర్ లో నన్ను అనుసరించండి http://www.twitter.com/pagalvin

Technorati టాగ్లు:

త్వరిత Fix: SharePoint సంభాషిస్తున్నారు వెబ్ సేవలు, InvalidOperationException

ఒక మిలియన్ సంవత్సరాల క్రితం, I helped developed a web service that was invoked via a custom action for a SharePoint Designer workflow. ఈ వారం, క్లయింట్ ఉత్పత్తి తరలించడానికి కావలెను (చివరకు!) కాబట్టి మేము.

కస్టమ్ చర్య జరిమానా పని, కానీ అది ఆవాహన వెబ్ సేవ కాదు, మాకు ఈ లోపం ఇవ్వడం:

System.InvalidOperationException: ఈ ఆపరేషన్ ఆకృతీకరణ డేటాబేస్ నుండి చదవడానికి SQL సర్వర్ లో అనుమతులు కలిగిన వినియోగదారులు ఒక సర్వర్ వ్యవసాయానికి చేరారు మాత్రమే ఒక కంప్యూటర్ ప్రదర్శించబడుతుంది. సర్వర్ వ్యవసాయ ఈ సర్వర్ కనెక్ట్, SharePoint ఉత్పత్తులు మరియు టెక్నాలజీస్ ఆకృతీకరణ విజార్డ్ ఉపయోగించడానికి, అడ్మినిస్ట్రేటివ్ పరికరములు ప్రారంభం మెనులో ఉన్న.
at Microsoft.SharePoint.Administration.SPWebApplication.Lookup(ఉరి requestUri)

Turns out that I forgot to add the service to the SharePoint application pool in IIS. Once I did that, ఇది జరిమానా పని.

పోస్ట్ ఈ MSDN ఫోరమ్ నాకు అవసరమైన ఆధారాన్ని ఇచ్చింది: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

ట్విట్టర్ లో నన్ను అనుసరించండి: http://twitter.com/pagalvin

Technorati టాగ్లు:

త్వరిత మరియు సులువు: SPItemList యొక్క SPFolder పొందండి

నేను మీరు ఏమి నేను ఈ సమస్య లోకి అమలులో ఉంచండి మరియు Google అర్థం ఉంది ఎప్పుడూ, కాబట్టి నేను ఈ వ్రాసి ఉంటుంది చిత్రవిచిత్రమైన.

నేను గత వారం లేదా రెండు ఈవెంట్ రిసీవర్ డీబగ్గింగ్ చాలా చేయడం పరిష్కరించగలుగుతున్నాము. The ER is defined against a document library. The individual items in the document library are tightly related to their parent folders. ఈ విధంగా, I am always getting the folder of the item for various manipulations. While debugging, నేను దీని ID నాకు తెలుసు నిర్దిష్ట అంశం కోసం ఒక ఫోల్డర్ మెటాడేటా అప్డేట్ అవసరం.

ఇక్కడ కొద్దిగా కన్సోల్ ప్రయోగాన్ని వార్తలు (వ్యవసాయ లో సర్వర్ లో అమలు చేయడానికి రూపొందించబడింది) ఆ రెండు వాదనలు పడుతుంది: అంశం ID మరియు ఒక రంగంలో కు కేటాయించడానికి విలువ, "Approval Status". It hard codes a lot of stuff and has no error checking.

కోడ్ హార్డు కోడెడ్ సైట్ చూస్తుంది, gets a hard coded document library and then finds the indicated item. It then finds the parent folder of that item and assigns the status value.

The key lesson here for me is that SPItem doesn’t get you access to the folder. You need to use SPListItem.File.

ఎవరైనా విమర్శ అందించే లేదా అంశం ఫోల్డర్ పొందుటకు ఒక మంచి మార్గం సూచించారు అడిగే ఉంటే, ఒక వ్యాఖ్యను దయచేసి.

<కోడ్>
ఉపయోగించి వ్యవస్థ;
ఉపయోగించి System.Collections.Generic;
ఉపయోగించి System.Text;
ఉపయోగించి Microsoft.SharePoint;
ఉపయోగించి System.Collections;

నేంస్పేస్ Conchango
{
    /// <సంగ్రహము>
 /// </సంగ్రహము>
 తరగతి ManualFolderUpdate
    {
        స్థిరమైన రద్దు ప్రధాన(తీగ[] వాదనల)
        {
            తీగ msh = "ManualFolderUpdate (v1.0): "; // msh = "Message Header"

 మీటలు బిగించుకునే చెక్క.WriteLine(msh + "Starting up.  నేను గత 08/04/08 న చివరి మార్పు జరిగినది.");

            తీగ url = http://localhost/xyzzy;

            ఉపయోగించి (SPSite oSPSite = కొత్త SPSite(url))
            {

                ఉపయోగించి (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Documents"];

                    మీటలు బిగించుకునే చెక్క.WriteLine(msh + "Got the document library.");

                    మీటలు బిగించుకునే చెక్క.WriteLine(msh + "Doc lib item count: [" + docLib.ItemCount + "].");

                    Int FolderID = 0;
                    తీగ NewStatus = "xyzzy";

                    FolderID = వ్యవస్థ.రూపంలో మార్పు తెచ్చు.ToInt32(వాదనల[0].ToString());
                    మీటలు బిగించుకునే చెక్క.WriteLine("Seeking folder for item: [" + FolderID + "].");

                    SPListItem li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    మీటలు బిగించుకునే చెక్క.WriteLine(msh + "Got the parent folder.");

                    NewStatus = వాదనల[1].ToString();
                    మీటలు బిగించుకునే చెక్క.WriteLine("Setting status to [" + NewStatus + "].");

                    మీటలు బిగించుకునే చెక్క.WriteLine("Press return to commit the update or CTRL-C to abort.");

                    మీటలు బిగించుకునే చెక్క.ReadLine();

                    thisItemFolder.Item["Approval Status"] = NewStatus;
                    thisItemFolder.Item.Update();

                    మీటలు బిగించుకునే చెక్క.WriteLine(msh + "Finished updating the folder.  నిష్క్రమించే.");

                } // SPWeb ఉపయోగించి

            } // SPSite ఉపయోగించి

 మీటలు బిగించుకునే చెక్క.WriteLine(msh + "Finished.");

        } // ప్రధాన

    } // తరగతి foldersync
} // నేంస్పేస్
</కోడ్>

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

SharePoint లో కస్టమ్ చర్యలు దాచడం

కొన్ని నెలల క్రితం, ఒక క్లయింట్ కోసం ఒక ప్రాజెక్ట్ లో పనిచేస్తున్నప్పుడు, I created a feature. Among other things, ఆ ఫీచర్ కస్టమ్ చర్య నిర్వచించిన (ఈ సైట్ సెట్టింగులు కింద కనిపిస్తుంది). The only purpose for this custom action was to demonstrate to me that the feature activation was working as expected. ప్రధానంగా, నేను డీబగ్గింగ్ ఒక ముడి రూపంగా ఉపయోగించబడింది.

నా ఇబ్బంది చాలా, ఎవరైనా అడుగుతూ చుట్టూ వచ్చింది ముందు ఈ డీబగ్గింగ్ వస్తువుగా dev నుండి UAT మరియు ఉత్పత్తి రాబోతుంది చేసిన, "what is this xyzzy link?"

ఇప్పుడు ద్వారా, మేము ఉత్పత్తి ఉన్నారని మరియు నేను నిజంగా ఫీచర్ అన్ ఇన్స్టాల్ చెయ్యాలని అనుకుంటున్నారా లేదు, fix elements.xml and then reinstall.

టాడ్ Bleaker pointed out an easy way to handle it. In his words:

"CustomActions are not copied into the database, వారు Elements.xml ఫైలు నుండి నేరుగా చదివి పని అప్లికేషన్ రాష్ట్ర లోకి నకలు. ఈ విధంగా, మీరు సోమరిగాచేయు అవసరం లేదు, అన్ఇన్స్టాల్, మళ్ళీ ఇన్స్టాల్, మరియు CustomAction తొలగించడానికి ఫీచర్ క్రియాశీలం. కేవలం Elements.xml ఫైలు నుండి తొలగించి అప్లికేషన్ పూల్ రీసైకిల్(లు) సఫలమైన. తదుపరి సమయం ఫీచర్ పరిమితిలో, మీరు ఇకపై CustomAction చూడలేరు."

నేను అతని సూచనలను అనుసరించి, కోర్సు యొక్క, వారు పని.

నా విషయంలో, this is a department level installation with just a single WFE. If you find yourself with this problem in future and with multiple WFE’s, నేను మీరు ప్రతి లో మార్పు ఉంటుంది నమ్మకం.

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

Technorati టాగ్లు: ,

త్వరిత Fix: SharePoint సైట్ యాక్సెస్ విసిరివేయుట [HttpException (0x80004005): అభ్యర్థన సమయం ముగిసింది.]

One of my developer colleagues was working on a project this week and ran into a timeout problem while working on building some crazy web part. His web part was fine, but "suddenly" ఒక సంబంధం సైట్ చాలా నెమ్మదిగా మారింది మరియు తరచుగా ఈ దోషంతో సమయం ముగిసింది:

[HttpException (0x80004005): అభ్యర్థన సమయం ముగిసింది.]

I logged in and saw that several other sites were just fine. I suspected that there were some hidden web parts on the page and using నమ్మదగిన ?విషయాల = 1 డీబగ్ టెక్నిక్, నేను నిజానికి కనుగొన్న 11 పేజీ వెబ్ భాగాలు, only two of which were visible. Even better (ఒక let's-ఆశ-I-కనుగొనేందుకు-ఏదో-అగ్లీ-ఇక్కడ అనే I--పరిష్కరించడానికి చేయవచ్చు కోణం నుండి), three of those closed web parts had a name of "Error".

నేను ఆ వెబ్ భాగాలు తొలగించబడ్డాయి (ఇది కూడా ఒక ఆశ్చర్యకరంగా చాలా సమయం పట్టింది) and that solved the problem. For today 🙂

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

Technorati టాగ్లు:

WSS నుండి SSRS వెబ్ సర్వీసెస్ ప్రారంభించడం / FBA లు ఎన్విరాన్మెంట్ MOSS

We needed to invoke the "CreateSubscription" method on an SSRS web service that is hosted in an FBA managed MOSS environment from a custom web part. We kept getting variations of:

  • 401: అధికారం లేదు
  • ఆబ్జెక్ట్ తరలించబడింది

The "object moved" message was most interesting because it was saying that the "object" (మా SSRS సేవ) had "moved" to login.aspx. This clearly meant we had some kind of authentication problem.

I eventually realized that I had bookmarked a blog entry by Robert Garret that described how to invoke a general purpose WSS/MOSS web service living inside an FBA environment. Note that I can’t link directly to the article (యొక్క 06/09/08) because it wants to authenticate. The link I provide brings you to an "all posts" view and you can locate the specific article by searching for "Accessing MOSS Web Services using Forms Based Authentication".

ఇక్కడ మాకు పనిచేసింది కోడ్ వార్తలు:

ReportingService2006 rs = సున్న; 
// Authenticate Authentication auth = కొత్త Authentication(); 
auth.Url = "http://URL/_vti_bin/Authentication.asmx";
auth.CookieContainer =
కొత్త CookieContainer();
LoginResult result = auth.Login("userid", "password");
అయితే (result.ErrorCode == LoginErrorCode.NoError) 
{
// No error, so get the cookies.
CookieCollection cookies = auth.CookieContainer.GetCookies(కొత్త Uri(auth.Url));
Cookie authCookie = cookies[result.CookieName];
rs =
కొత్త ReportingService2006();
rs.Url =
"http://server/_vti_bin/ReportServer/ReportService2006.asmx";
rs.CookieContainer =
కొత్త CookieContainer();
rs.CookieContainer.Add(authCookie);
}
ప్రయత్నించండి
{
  rs.CreateSubscription(report, extSettings, desc, eventType, matchData, parameters1);
}
పట్టుకొను (మినహాయింపు మాజీ)
{
  Console.WriteLine(ex.Message.ToString());
}

I interpret things to work like this:

  • Our web part needs to dial up the authentication service and say, "Hey, Tony, it’s me!".
  • Authentication service replies saying, "Hey, I know you. How are the kids? Here’s a token."
  • We call up the SSRS service and say, "Tony sent me, here’s the token."

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

త్వరిత మరియు సింపుల్: సి లో SharePoint ఆబ్జెక్ట్ మోడల్ ఉపయోగించి సదుపాయం వెబ్ సైట్ #

I tried searching for a little snippet code that would show how I can create a new SPWeb in a site collection. I didn’t find it as quickly or easily as I expected so I thought I’d slap together a little entry on the subject.

ఈ కోడ్ ఒక కొత్త వికీ సైట్ సృష్టిస్తుంది:

 SPSite siteCollection;

    siteCollection = కొత్త SPSite("http://conchang-o9l8qi");

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy Title",
        "xyzzy description", 1033, SPWebTemplate.WebTemplateWIKI, అబద్ధమైన, అబద్ధమైన);

My initial searches failed because I was looking for phrases like "provision a web site using sharepoint object model" and the like.

మీరు అన్వేషణ for "Webs.Add()", మీరు చాలా ఉపయోగకరంగా బ్లాగు ఎంట్రీలు అనేక చూడండి, MSDN articles and SDK documentation that go into depth on this subject. I definitely recommend ఈ సైట్.

</చివర>

నా బ్లాగ్ సబ్స్క్రయిబ్.

Technorati టాగ్లు: