That's not so complicated, but will require some work from your side. You can create a service using WCF technology.
I suppose you're going to use Visual Studio and create an application for .NET. If your goal is Mono, you will have to adopt the example below somehow.
1 - Create a console .NET project and add manually references to System.ServiceModel and System.Runtime.Serialization.
2 - You should convert your abstract class to an interface. This will be the hardest part of your work, because you should achieve the same WSDL as a result.
For example:
[System.Web.Services.WebServiceAttribute(Namespace="http://websrv.cs.fsu.edu/~engelen/calc.wsdl")]
[System.Web.Services.WebServiceBinding(Name="calc", Namespace="http://websrv.cs.fsu.edu/~engelen/calc.wsdl")]
public abstract partial class calc : System.Web.Services.WebService {
/// <remarks>
///Service definition of function ns__add
///</remarks>
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="urn:calc", ResponseNamespace="urn:calc")]
[return: System.Xml.Serialization.SoapElement("result")]
public abstract double add(double a, double b);
Convertion example:
using System.ServiceModel;
// other usings, namespace etc
[ServiceContract(Namespace = "http://websrv.cs.fsu.edu/~engelen/calc.wsdl", Name = "calc")]
public interface ICalcService
{
[OperationContract(Name = "add")]
[return: MessageParameter(Name = "result")]
[XmlSerializerFormatAttribute(Style=OperationFormatStyle.Rpc, Use=OperationFormatUse.Encoded)]
double add(double a, double b);
// the rest of methods
}
Alternatively, you could try to generate a C# proxy class using svcutil:
svcutil http://www.genivia.com/calc.wsdl
You'll get calc.cs as a result, so you can pull out service and data contracts from it.
3 - Anyway, after you create an interface with your service contract, you create its implementation:
public class CalcServiceImpl : ICalsService
{
public double add(double a, double b)
{
return a + b;
}
// the rest
}
4 - After that you should create a ServiceHost instance. Like that:
ServiceHost host = new ServiceHost(typeof(CalcServiceImpl), new Uri("http://myhost/MyServices")))
host.AddServiceEndpoint(typeof(ICalcService), new BasicHttpBinding(), "CalcService");
host.Open();
Console.ReadKey();
host.Close();
Of course, this is a very simplified example, but I hope it will give you the direction.