Dienstag, 17. Januar 2012
Große Datenvolumen über WebService
it-entwickler, 01:08h
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.
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
it-entwickler, 00:50h
Als Beispel nehmen wir die Tabelle mit Postleitzahlen.
Die Tabelle muss dann in XML umgewandelt werden, z.B.:
'
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 = '
*/
-- 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
Die Tabelle muss dann in XML umgewandelt werden, z.B.:
'
33333
44444
'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 = '
33333
44444
'*/
-- 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
it-entwickler, 20:32h
Das ist die oft gestellte Frage aller NewBee's
Setzt Ihr die DropDownLost-Eigenschaft "AutoPostBack" auf "true"
Setzt Ihr die DropDownLost-Eigenschaft "AutoPostBack" auf "true"
... link
HTML Elemente ausblenden und einblenden per csharp
it-entwickler, 20:27h
Beispiel:
... link
Zeilenumbruch in csharp
it-entwickler, 20:22h
geht mit
System.Environment.NewLine
System.Environment.NewLine
... link
ASP-Control Wetre in JavaScript übermitteln
it-entwickler, 20:14h
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;
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
it-entwickler, 20:10h
Standartmäßige Windows Benutzerkonten über eine Enumeration kann man so auswählen
System.Security.Principal.WindowsBuiltInRole.Administrator
System.Security.Principal.WindowsBuiltInRole.Administrator
... link