2013-08-29 6 views
8

Sto provando a creare un server REST all'interno di un progetto Unity e inizialmente ho pensato che Nancy sembrava la scelta più ovvia. Molti mal di testa dopo però e sto ancora avendo difficoltà a raggiungere Nancy per eseguire all'interno del runtime Mono Unità - posso compilare ed eseguire da Xamarin ma l'Unità mi dà uscita piuttosto inutile whne tento di utilizzare il bene:Esecuzione di un server REST all'interno di Unity3d

Internal compiler error. See the console log for more information. output was: 
Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded. 
    at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool) 
    at System.Reflection.Assembly.GetTypes() [0x00000] in <filename unknown>:0 
    at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in <filename unknown>:0 
    at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in <filename unknown>:0 
    at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 
    at Mono.CSharp.Driver.LoadReferences() [0x00000] in <filename unknown>:0 
    at Mono.CSharp.Driver.Compile() [0x00000] in <filename unknown>:0 
    at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 

Non posso essere l'unica persona che ha provato qualcosa di simile, e sto cercando di usarlo in diversi progetti, quindi avere qualcosa di riutilizzabile è di alta priorità - qualcuno ha implementato con successo qualcosa di simile, e se così è possibile qualche suggerimento?

Mi piacerebbe davvero far funzionare Nancy, ma un altro modo di incorporare facilmente un server REST sarebbe altrettanto prezioso.

+0

Solo un longshot - ma questo non è un problema della versione .NET? Unity3d l'ultima volta che l'ho usato era ancora su una versione 2.x di Mono e si è dichiarato che usava un "sottoinsieme" del runtime di .NET 2.0. In pratica ho scoperto che posso utilizzare varie funzionalità delle versioni .NET successive, ma non tutte. Nancy, d'altra parte, se non sbaglio, mira a lavorare da .NET 3.5 in avanti (ma non su versioni precedenti). –

+0

Trova anche questo: http://answers.unity3d.com/questions/636739/reflectiontypeloadexception.html –

risposta

0

Secondo this thread on Unity Answers, è successo perché il sottoinsieme .NET che utilizza l'unità non ha incluso System.Web, in modo da copiare System.Web.dll v2.0.50727 al progetto ha risolto questo problema.

Tuttavia, se serve la memoria, richiamo un'opzione in Unity per forzare l'utilizzo di un runtime .NET 2.0 completo piuttosto che del sottoinsieme, che potrebbe anche risolvere il problema. Era da un po 'che usavo Unity, quindi l'opzione poteva essere stata rimossa.

Modifica:See here si chiama "livello di compatibilità".

Edit 2: E 'in Player Settings

0

sono mai riuscito a ottenere un server http in esecuzione all'interno del client unità, (la risposta accettata guarda a destra, ma era troppo tardi per me per provarlo, mi permetta sapere se non funziona) sembra che almeno nell'unità 4 siano state escluse le parti necessarie del runtime mono. Le cose possono essere diverse nell'unità 5, al momento non sto lavorando con l'unità, quindi temo di non essere aggiornato.

Con questo in mente, la soluzione che ho optato per un client HTTP di ascolto, con un server esterno, ha funzionato abbastanza bene, tuttavia le cose diventano leggermente più complesse del necessario.

L'altra soluzione di cui ho sentito parlare più tardi è l'utilizzo del protocollo di risparmio, un esempio allo https://github.com/amilstead/unity3d-thrift-twisted che dovrebbe essere sufficiente per iniziare e il supporto di Thrift in un'ampia varietà di lingue, gli idiomi sono un po ' diverso da quelli di http, ma generalmente questo è probabilmente il modo migliore per la maggior parte delle circostanze in cui si vorrebbe un server http incorporato.