2010-09-22 4 views
7

Existe-t-il une bibliothèque de serveurs Web pour F #, similaire à SimpleHTTPServer en Python?Bibliothèque de serveurs Web F #

L'installation d'un serveur complet comme IIS est exagérée pour ce que je veux, qui est une application simple qui peut être interrogée à l'aide d'un navigateur Web, en utilisant effectivement le protocole HTTP comme méthode de surveillance. Idéalement, une demande à l'adresse /engines/id/state correspondrait à une fonction get_state(engine_id) que je fournis.

Répondre

12

Un service WCF auto-hébergé n'est pas un mauvais départ; voici un tout petit pour commencer:

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

Après l'exécution, j'obtiens 'Exception DispatchOperation '*' pour le contrat 'MyContract' requiert l'Invoker. à System.ServiceModel.Dispatcher.OperationInvokerHandler.EnsureValid (opération System.ServiceModel.Dispatcher.DispatchOperation) [0x00000] dans : 0' sur le serveur et le texte commençant par "falsetrue1310 .." sur le navigateur. J'utilise F # avec Mono sur OS X, donc il y a peut-être un bug. Un indice sur ce qu'il faut rechercher? –

+0

Non. Je ne savais même pas que la WCF courait sur Mono, wow. – Brian

+0

vous devriez probablement ajouter un tag "Mono" à votre question – BlackTigerX

4

Je n'ai pas examiné du tout, mais peut-être coup d'œil à

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

Suave est un développement web simple F # bibliothèque offrant une légère Web et un ensemble de combinateurs à manipuler le flux de route et la tâche composition.

+0

Cela semble très intéressant . Merci. –

1

Jetez un oeil à frack (une interface de type rack), et si vous avez besoin d'une plus belle syntaxe, frank (qui construit au-dessus de Frack).

Il y a aussi Kayak, il est écrit en C# mais vous pouvez facilement l'utiliser depuis F #.

+0

Je pense que le lien correct vers Kayak est maintenant https://github.com/kayak/kayak/ au moins si vous vous souciez du code source. – jocull

Questions connexes