WCF – Wir bilden einen Service
WCF (Windows Communication Foundation) ist eine neue Kommunikationsplattform für verteilte Anwendungen. Das Kerngebiet von WCF liegt dabei bei Serviceorientierten Anwendungen und deren Entwicklung.
Um kurz zu zeigen wie einfach es ist seinen eigenen Service zu schreiben, habe ich wie immer ein kleines Beispiel hochgeladen. Das Beispiel beinhaltet dabei 2 Projekte. Ein Server (also der Dienserbringer) und einen Client (der Dienstnutzer). In unserem Beispiel bietet der Server einen Service an, welche alle empfangenen Strings in umgekehrter Buchstabenfolge zurücksenden. Sendet der Client also “Hallo Welt” an den Server, so erhält er als Antwort “tleW ollaH”
Dazu müssen beide Applikationen den Namespace “System.ServiceModel” referenzieren, welcher die entsprechenden WCF-Klassen bereitstellt.
Hinweise zum Server:
Da der Server eine bestimmte Service-URL reservieren und auf einen bestimmten Port horchen muss, müssen diese beiden Angaben eingerichtet werden. Um die URL zu reservieren gibt man in der Konsole folgendes ein (benötigt Administratorenrechte!):
- Windows Server 2003, XP:
httpcfg.exe set urlacl /u http://myhost:8000/ /a “O:AOG:DAD:(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)” - Windows Vista:
netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
Danach muss man den Port noch als Ausnahme bei der Windows Firewall hinzufügen:
- Windows Server 2003, XP:
httpcfg.exe set iplisten -i 0.0.0.0:8000 - Windows Vista:
netsh http add iplisten ipaddress=0.0.0.0:8000
Die genauen Angaben über die Befehle findet man auf:
http://msdn.microsoft.com/en-us/library/ms733768.aspx
Wenn die beiden Konsolenanwendungen laufen, sieht das ganze dann so aus:
Service- und OperationContract des Servers:
using System;
using System.ServiceModel;
namespace WCF_Example
{
[ServiceContract]
public interface IReverseString
{
[OperationContract]
String ReverseString(String strInput);
}
}
Implementation des Servers:
using System;
namespace WCF_Example
{
public class StringOperation : IReverseString
{
public string ReverseString(string strInput)
{
String strOutput = String.Empty;
Console.WriteLine("\nFolgender String wurde empfangen: " + strInput);
Console.WriteLine("String wird verarbeitet");
for (int i = strInput.Length - 1; i >= 0; i--)
{
strOutput += strInput.Substring(i, 1);
}
Console.WriteLine("Verarbeitung beendet");
return strOutput;
}
}
}
Sourcecode des Clients:
using System;
using System.ServiceModel;
using WCF_Example;
namespace WCF_Client
{
public class Client
{
public String ReverseString(String strInput)
{
ChannelFactory<IReverseString> factory = new ChannelFactory<IReverseString>( new WSHttpBinding(), new EndpointAddress("http://localhost:43210/StringOperation"));
IReverseString revString = factory.CreateChannel();
return revString.ReverseString(strInput);
}
}
}

