WebService without IIS but WCF
Webservice with WCF as Standalone
Mittwoch 21 Juli 2010 at 8:54 pm. Stichwörter: c#, wcf, webservice
Letztens wollt ich mal wieder ein wenig WebService mit C# testen. Naja, eigentlich einen WebService mit Silverlight nutzen.
Jedenfalls war klar, der Webservice soll nicht auf dem IIS laufen.
Mit WCF soll sowas recht einfach herzustellen sein.
Und es ist so einfach.
Hier noch schnell Webseiten die ich in Anspruch nahm:
- .NET Framework Class Library : ServiceEndpoint Class
- Configuring Namespace Reservations
- AddressAccessDeniedException: HTTP could not register URL http://+:8080/<…>.
Der Link war wichtig, eben wegen der im Linktext genannten Exception.
Die Verwendung des WebService in einem Client lasse ich hier mal weg.
Der WebService soll als normale Console Application gestartet werden können bzw. direkt aus der IDE heraus. Er läuft also nicht auf dem IIS und auch nicht als Windows Service.
IHelloService.cs
Das ist das Interface des WebService. Wie leicht zu sehen, übernommen von gängigen Beispielen ;)
using System.ServiceModel;
namespace ClassLibrary1.Service
{
[ServiceContract]
public interface IHelloService
{
[OperationContract]
string Hello();[OperationContract]
double CalcAdd(double a, double b);
}
}
HelloService.cs
Und hier die Web Service Implementierung.
namespace ClassLibrary1.Service
{
public class HelloService : IHelloService
{
public string Hello()
{
return "Servus";
}public double CalcAdd(double a, double b)
{
return a + b;
}
}
}
ServiceCreator.cs
In diesem Fall ist der Web Service in einer Library DLL ausgelagert.
Ich hatte dazu noch eine kleine GUI App erstellt zum Starten/Stoppen usw.
Jedenfalls lässt sich mit diesem Code eine Service per WCF erstellen/starten und stoppen.
using ClassLibrary1.Service;
using System.ServiceModel;
using System;
using System.ServiceModel.Description;namespace ClassLibrary1
{
/// <summary>
///
/// Allow access Port to access this Service
/// http://blogs.msdn.com/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx
///
/// Access WSDL of this application.
/// http://localhost:9090/HelloService/?WSDL
/// </summary>
public class ServiceCreator
{
private ServiceHost host = null;private Uri baseAddress = new Uri(@"http://localhost:9090/HelloService/");
public ServiceCreator()
{
Init();
Start();
}private void Init()
{
host = new ServiceHost(typeof(HelloService), baseAddress);// Enable Mex
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);}
public void Start()
{
if (host == null)
{
Init();
}
host.Open();
}public void Stop()
{
if (host != null)
{
host.Close();
host = null;
}
}
}
}
Kein Kommentar