Dienstag, 17. Januar 2012
Große Datenvolumen über WebService
Mal angenommen, man muss große Datenmenge an WebService übergeben, z.B, Liste von Postleitzahlen aus 30000 Elementen

Ein Versuch Array dem Webservice zu übergeben verursacht Fehler 400. Anfrage ist nicht akzeptiert.

Die Ursache: unser Array wird in Text-String umgewandelt. Und die Länge von diesem Text-String ist nicht unendlich.

Beschränken wir Array auf 500 Elementen, werden die Daten erfolgreich übergeben.

D.h. man könnte die länge Array's einfach schneiden und einzelne Schnitte übergeben.

Im jeden Schnitt wird dann einzelne Elemente übergeben:

// go each element of array of lists of HTTP data and call a webfunction
foreach (List ls in ArrayOfListOfZipCodes)
{
sbll = new ServiceBIZ();
sbll.GetCountOfInterestingByZipCompleted += new GetCountOfInterestingByZipCompletedEventHandler(MainControl_GetCountOfInterestingByZipCompleted);
sbll.GetCountOfInterestingByZipAsync(ls.ToArray());
}

In Call Back kummulieren wir die Ergebnisse

private void MainControl_GetCountOfInterestingByZipCompleted(object sender, GetCountOfInterestingByZipCompletedEventArgs e)
{

if (!e.Cancelled)
{
// Update the UI
iCountResult = iCountResult + e.GetCountOfInterestingByZipResult;
lblInteres.Text = iCountResult.ToString();
}

}

Wichtig ist, dass für jeden Schnitt eine neue Instanz von Proxy-Classe erstellt werden muss. Sonst bekommen wir einen Fehler in CallBack, weil die Funktion noch besetzt ist.

Für WebService sieht das Ganze so aus, als ob ihn mehrere Clients aufrufen würden.

In CallBack Funktion muss wäre es noch sinnvoll den Zugriff zu den Contorls zu synchronisieren.

... link


Dienstag, 17. Januar 2012
Tabelle als XML Parameter in die gespeicherte Prozedur
Als Beispel nehmen wir die Tabelle mit Postleitzahlen.

Die Tabelle muss dann in XML umgewandelt werden, z.B.:
'3333344444'


Die Prozedere bekommt XML als Parameter und speichert in eine Tabelle.

CREATE PROCEDURE [dbo].[GetCountOfInterestingByZip]
@xml XML -- for testen = null -- incoming Data
AS
-- for testing
DECLARE @xml XML
SET @xml = '3333344444'
*/
-- import Data from XML object in the temporary table
DECLARE @idoc INT
EXEC sp_xml_preparedocument @idoc OUT, @xml
print CAST(@idoc as varchar(10))
DECLARE @inputData TABLE (Zip varchar(10))
INSERT @inputData
SELECT code FROM OPENXML(@idoc, '/Zips/Zip') WITH ([code] VARCHAR(10) 'code' )
EXEC sp_xml_removedocument @idoc

Weiter benutzen @inputData Tabelle

... link


Sonntag, 15. Januar 2012
DropDownList macht nach SelectedIndexChanged nichts
Das ist die oft gestellte Frage aller NewBee's

Setzt Ihr die DropDownLost-Eigenschaft "AutoPostBack" auf "true"

... link


HTML Elemente ausblenden und einblenden per csharp
Beispiel:

... link


Zeilenumbruch in csharp
geht mit

System.Environment.NewLine

... link


ASP-Control Wetre in JavaScript übermitteln
Dafür braucht man die Eigenschaft ClientID.

Hier ist ein Beispiel:




var txtUsernameID = ' [Macro error in =: Macro = not allowed in sandbox] ';
var username = $(txtUsernameID).value;

... link


Standartmäßige Windows Benutzerkonten über eine Enumeration
Standartmäßige Windows Benutzerkonten über eine Enumeration kann man so auswählen

System.Security.Principal.WindowsBuiltInRole.Administrator

... link