2010-09-22 14 views
7

¿Existe una biblioteca de servidor web para F #, similar a SimpleHTTPServer en Python?F # biblioteca del servidor web

La instalación de un servidor completo como IIS es excesiva para lo que deseo, que es una aplicación simple que se puede consultar utilizando un navegador web, utilizando de manera efectiva HTTP como método de supervisión. Idealmente, una solicitud a la dirección /engines/id/state se correlacionaría con una función get_state(engine_id) que proporciono.

Respuesta

12

Un servicio WCF autohospedado no es un mal comienzo; aquí está uno pequeño para empezar:

open System 
open System.IO 
// add reference to these two guys, need .NET full (not client profile) 
open System.ServiceModel 
open System.ServiceModel.Web 

[<ServiceContract>] 
type MyContract() = 
    [<OperationContract>] 
    [<WebGet(UriTemplate="{s}/{t}")>] 
    member this.Get(s:string, t:string) : Stream = 
     let html = sprintf @" 
<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN""> 
<html><head></head><body>Called with '%s' and '%s'</body></html>" s t 
     upcast new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)) 

let Main() = 
    let address = "http://localhost:64385/" 
    let host = new WebServiceHost(typeof<MyContract>, new Uri(address)) 
    host.AddServiceEndpoint(typeof<MyContract>, new WebHttpBinding(), "") 
     |> ignore 
    host.Open() 
    printfn "Server running at %s" address 
    printfn "Press a key to close server" 
    System.Console.ReadKey() |> ignore 
    host.Close() 

Main() 
// now go hit 
// http://localhost:64385/foo/42 
// in your browser 
+0

Después de ejecutar Obtengo 'Exception DispatchOperation '*' para el contrato 'MyContract' requiere Invoker. en System.ServiceModel.Dispatcher.OperationInvokerHandler.EnsureValid (System.ServiceModel.Dispatcher.DispatchOperation operation) [0x00000] en : 0' en el servidor y el texto que comienza con "falsetrue1310 .." en el navegador. Estoy usando F # con Mono en OS X, así que puede haber un error allí. ¿Alguna pista sobre qué buscar? –

+0

No. Ni siquiera sabía que WCF funcionaba con Mono en absoluto, wow. – Brian

+0

probablemente debería agregar una etiqueta "Mono" a su pregunta – BlackTigerX

4

no he mirado en esto en absoluto, pero tal vez echar un vistazo a

https://github.com/SuaveIO/suave/blob/master/README.md

Suave es un biblioteca de desarrollo web simple F # proporcionando un peso ligero web servidor y un conjunto de combinadores para manipular el flujo de ruta y la tarea composición.

+0

Parece muy interesante . Gracias. –

1

Tome un vistazo a frack (una interfaz en forma de cremallera), y si necesita una sintaxis más agradable, frank (que se acumula en la parte superior del frack).

También está Kayak, está escrito en C# pero puede usarlo fácilmente desde F #.

+0

Creo que el enlace correcto para Kayak ahora es https://github.com/kayak/kayak/ al menos si te importa el código fuente. – jocull

Cuestiones relacionadas