Web- und Software Development

Tweets von Usern durchsuchen

Written By: Mario Priebe - Apr• 02•11

Eine Zeit lang habe ich jeden Samstag hier auf meinem Blog, automatisch meine Twitter-Empfehlungen gepostet. Dies hatte den Grund, das ich interessante Dinge, welche ich bei Twitter schrieb, hier mit der Blogsuche wiederfinde.

Nun habe ich einen Webdienst mit dem Namen Snap Bird gefunden, der es einem ermöglicht Tweets von einem Benutzer zu durchsuchen.

Ich find’s ganz cool und sicher auch für den einen oder anderen zu gebrauchen.
Also, happy searching : )

Wie ermittle ich eine Telefonnummer aus dem Telefonbuch? – WP7 Quicky

Written By: Mario Priebe - Mrz• 31•11

Um eine Telefonnummer aus dem Telefonbuch des Benutzers vom Windows Phone 7 zu ermitteln, kann man mit seiner Applikation den Benutzer dazu aufordern, die entsprechende Nummer zu selektieren. Dazu verwendet man die Klasse PhoneNumberChooserTask aus dem Namespace Microsoft.Phone.Tasks.

1
2
3
PhoneNumberChooserTask pck = new PhoneNumberChooserTask();
pck.Completed += new EventHandler<PhoneNumberResult>(pck_Completed);
pck.Show();

In der CompletedMethode steht dann zur Weiterverarbeitung die selektierte Telefonnummer zur Verfügung.

1
2
3
4
void pck_Completed(object sender, PhoneNumberResult e)
{
    MessageBox.Show(e.PhoneNumber);
}

Lesen, schreiben und löschen im IsolatedStorage

Written By: Mario Priebe - Mrz• 27•11

Folgende Codebeispiele zeigen, wie man ein Dateien und Verzeichnisse im IsolatedStorage erstellen, lesen und löschen kann.

Überprüfung ob ein File im IsolatedStorage existiert:

1
2
3
4
5
6
7
private bool FileExist(string fileName)
{
    using (var file = IsolatedStorageFile.GetUserStoreForApplication())
    {
        return file.FileExists(fileName);               
    }
}

File erstellen:

1
2
3
4
5
6
var myFile = "MyFile.txt";
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
    if (!file.FileExists(myFile))
        file.CreateFile(myFile).Close();
}

Der Aufruf der Close() Methode bewirkt, das der Prozess der das File verwendete, selbiges wieder freigibt.

File lesen:

1
2
3
4
5
6
7
8
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
    //weiterverarbeitung, bsp deserialize
    using (var reader = new JsonTextReader(new StreamReader(fileStream)))
    {
        var td = serializer.Deserialize<List<TrainingDay>>(reader);
    }
}

File löschen:

1
2
3
4
5
6
var myFile = "MyFile.txt";
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
    if (file.FileExists(myFile))
        file.DeleteFile(myFile );
}

Existierende Files auslesen

1
2
3
4
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
    string[] files = file.GetFileNames();
}

Erstellen eines Ordners im IsolatedStorage

1
2
3
4
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{    
    file.CreateDirectory("MyDir");
}

Erstellen eines Unterordners im IsolatedStorage

1
2
3
4
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{    
    file.CreateDirectory("MyDir/MySubDir");
}

Wichtig ist hier die Verwendung eines Slashes anstatt eines Backslashes, da sonst versucht wird, das Verzeichnis absolut im Root anzulegen, was nicht erlaubt ist.

Ordner auslesen:

1
2
3
4
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{   
    string[] folders = file.GetDirectoryNames();
}

Löschen eines Ordners

1
2
3
4
5
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{    
     if(file.DirectoryExists(MyDir"))
         file.DeleteDirectory("MyDir");
}

Und zum Schluss, wie man den Isolated leeren kann:

1
IsolatedStorageFile.GetUserStoreForApplication().Remove();

Da der IsolatedStorage nicht nur geleert, sondern komplett gelöscht wurde, muss man bei einer erneuten Verwendung des Speichers auf IsolatedStorageFile.GetUserStoreForApplication() erneut referenzieren, wodurch dieser neu angelegt wird. Wer jedoch wie hier beschrieben using verwendet und das Anlegen in einem anderen Kontext durchführt, der sollte keine Problem haben.

Viel Spaß beim entwickeln : )

WCF Service mit Userauthentifizierung

Written By: Mario Priebe - Mrz• 15•11

Folgende Herangehensweise soll zeigen, wie man einen WCF Service mit Userauthentifizierung implementiert.

Zertifikat:

Um ein Zertifikat zu erstellen, kann man das Tool Pluralsight Self-Cert Tool (Mirror) dazu verwenden. In diesem Tool (als Administrator ausführen) definiert man den Namen des Zertifikates sowie den Speicherort.

Service:

Im Service erstellen wir eine Validator-Klasse die von UserNamePasswordValidator erbt. Dort überschreibt man die Methode Validate, in der man den Usernamen und die Passwortübergabe durch den Client überprüft.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MyCustomUserNameValidator : UserNamePasswordValidator
{
    public override void Validate(string userName, string password)
    {
        if (null == userName || null == password)
        {
            throw new ArgumentNullException();
        }
 
        if (!(userName == "test1" && password == "test1"))
        {
            throw new SecurityTokenException("Unknown Username or Password");
        }
    }
}

app.config:

In der app.config müssen nun die Parameter konfiguriert werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 
  <system.web>
    <compilation debug="true" />
  </system.web>
 
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="Binding1">
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
 
    <services>
      <service name="SSOClientAuthentifizierungsService.Service1" behaviorConfiguration="Service1Behavior">
 
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
 
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8732/Design_Time_Addresses/SSOClientAuthentifizierungsService/Service1/" />
          </baseAddresses>
        </host>
 
        <endpoint address ="" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="SSOClientAuthentifizierungsService.IService1" />
 
      </service>
    </services>
 
    <behaviors>
      <serviceBehaviors>
        <behavior name="Service1Behavior">
 
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
 
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="SSOClientAuthentifizierungsService.MyCustomUserNameValidator, SSOClientAuthentifizierungsService"/>
 
            <clientCertificate>
              <authentication certificateValidationMode="PeerOrChainTrust" />
            </clientCertificate>
 
            <serviceCertificate findValue="ssoTool" storeName="TrustedPeople" storeLocation="LocalMachine" x509FindType="FindBySubjectName"/>
          </serviceCredentials>
 
        </behavior>
      </serviceBehaviors>
    </behaviors>
 
  </system.serviceModel>
</configuration>

Client:

Der Client referenziert nun den Service und ruft über die ClientCredentials die ServiceMethoden auf:

1
2
3
4
5
6
7
8
9
10
11
static void Main(string[] args)
{
    Service1Client c = new Service1Client();
    c.ClientCredentials.UserName.UserName = "test1";
    c.ClientCredentials.UserName.Password = "test1";
 
    var value = c.GetData(10);
    Console.WriteLine(value.ToString());
 
    Console.ReadKey();
}

Quellen:

Downloads:

Service | Client

Viel Spaß beim entwickeln : )