2016-01-19 5 views
5

मैं एचआईटीपीप्लाफ्टर हैंडलर (संस्करण 1.2) का उपयोग कर आईआईएस (आईआईएस 10.0) में चल रहे मूल सुवे एप्लिकेशन को प्राप्त करने का प्रयास कर रहा हूं।एचईटीपीप्लाफ्टर हैंडलर कनेक्शन के साथ आईआईएस पर होस्ट किए गए सुवे ऐप कनेक्शन

जब मैं यह एक एकल WebPart ऐसी वापसी के रूप में

(OK "Hello World") 

आवेदन आईआईएस ठीक में चलता है और मैं http://localhost/testapp पर नाम से यह करने के लिए अनुरोध कर सकते हैं (TestApp डिफ़ॉल्ट वेब के तहत आवेदन का नाम है साइट)।

हालांकि, अगर मैं WebPart जैसे

let app = 
    choose 
     [ GET >=> choose 
      [ path "/hello" >=> OK "Hello GET" 
       path "/goodbye" >=> OK "Good bye GET" ] 
      POST >=> choose 
      [ path "/hello" >=> OK "Hello POST" 
       path "/goodbye" >=> OK "Good bye POST" ] ] 

के लिए कुछ और अधिक जटिल का उपयोग वेबसाइट शुरू होता है, लेकिन मैं आवेदन नाम से यह नहीं पहुँच सकते हैं। हालांकि मैं अभी भी बंदरगाह तक पहुंचने में सक्षम हूं।

जब मैंने नाम से एप्लिकेशन को मारा तो मुझे HTTP 503.2 (खराब गेटवे) प्रतिक्रिया प्राप्त होती है।

एप्लिकेशन HttpPlatformHandler द्वारा निष्पादित एक FAKE स्क्रिप्ट से शुरू किया गया है।

संदर्भ के लिए, यह नकली स्क्रिप्ट जो आवेदन शुरू होता है:

#r "./tools/FakeLib.dll" 
#r "Suave.dll" 

open System 
open Suave 
open Suave.Successful 
open Fake 
open System.Net 
open Suave.Filters 
open Suave.Sockets 
open Suave.Operators 
open System.IO 

Environment.CurrentDirectory <- __SOURCE_DIRECTORY__ 

let port = Sockets.Port.Parse <| getBuildParamOrDefault "port" "8083" 

let serverConfig = 
    { defaultConfig with 
     logger = Logging.Loggers.saneDefaultsFor Logging.LogLevel.Verbose 
     bindings = [ HttpBinding.mk HTTP IPAddress.Loopback port ] 
    } 

let app = 
    choose 
    [ GET >=> choose 
     [ path "/hello" >=> OK "Hello GET" 
      path "/goodbye" >=> OK "Good bye GET" ] 
     POST >=> choose 
     [ path "/hello" >=> OK "Hello POST" 
      path "/goodbye" >=> OK "Good bye POST" ] ] 

startWebServer serverConfig (OK "Hello") 
//startWebServer serverConfig app 

ऊपर स्क्रिप्ट की उम्मीद के रूप में काम करता है। हालांकि अगर मैं (OK "Hello") के बजाय appWebPart का उपयोग करता हूं तो मुझे ऊपर वर्णित समस्या का सामना करना पड़ता है।

पूर्णता यहाँ के लिए web.config HttpPlatformHandler के लिए स्थापित है:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
    <handlers> 
     <remove name="httpplatformhandler" /> 
     <add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" /> 
    </handlers> 
    <httpPlatform 
       stdoutLogEnabled="true" startupTimeLimit="20" 
       processPath=".\tools\FAKE.exe" 
       arguments=".\test.fsx port=%HTTP_PLATFORM_PORT%" > 
     <environmentVariables> 
     </environmentVariables> 
    </httpPlatform> 
    </system.webServer> 
</configuration> 

मैं लॉग की समीक्षा की है, लेकिन दुर्भाग्य से मैं कुछ भी है कि एक त्रुटि दर्शाता है नहीं देख सकता।

मैं ईवेंट व्यूअर देख लिया है, और केवल सुराग कुछ गलत हो सकता है कि आवेदन लॉग में इस जानकारी घटना है:

The description for Event ID 1001 from source HttpPlatformHandler cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer. 

यहाँ जहां ऐप मामले से लॉग के एक हिस्से को है के रूप में (choose के बिना) की उम्मीद चलता है:

[V] 2016-01-19T02:43:40.6932823Z: initialising BufferManager with 827392 bytes [Suave.Socket.BufferManager] 
[I] 2016-01-19T02:43:40.7114149Z: listener started in 20.885 ms with binding 127.0.0.1:18450 [Suave.Tcp.tcpIpServer] 
[V] 2016-01-19T02:43:40.8146603Z: 127.0.0.1 connected, total: 1 clients [Suave.Tcp.job] 
[V] 2016-01-19T02:43:40.8166665Z: reserving buffer: 811008, free count: 99 [Suave.Tcp.job] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:43:40.8217965Z: -> processor [Suave.Web.httpLoop.loop] 
[V] 2016-01-19T02:43:40.8228181Z: reading first line of request [Suave.Web.processRequest] 
[V] 2016-01-19T02:43:40.8378128Z: reserving buffer: 802816, free count: 98 [Suave.Web.readMoreData] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:43:40.8498033Z: reading headers [Suave.Web.processRequest] 
[V] 2016-01-19T02:43:40.8776578Z: freeing buffer: 802816, free count: 99 [Suave.Web.split] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:43:40.8866594Z: parsing post data [Suave.Web.processRequest] 
[V] 2016-01-19T02:43:40.8886553Z: <- processor [Suave.Web.httpLoop.loop] 
[V] 2016-01-19T02:43:40.9057610Z: 'Connection: keep-alive' recurse [Suave.Web.httpLoop.loop] 
[V] 2016-01-19T02:43:40.9057610Z: -> processor [Suave.Web.httpLoop.loop] 
[V] 2016-01-19T02:43:40.9057610Z: reading first line of request [Suave.Web.processRequest] 
[V] 2016-01-19T02:43:40.9057610Z: reserving buffer: 802816, free count: 98 [Suave.Web.readMoreData] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:43:45.2531307Z: reading headers [Suave.Web.processRequest] 
[V] 2016-01-19T02:43:45.2541141Z: freeing buffer: 802816, free count: 99 [Suave.Web.split] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:43:45.2541141Z: parsing post data [Suave.Web.processRequest] 
[V] 2016-01-19T02:43:45.2541141Z: <- processor [Suave.Web.httpLoop.loop] 
[V] 2016-01-19T02:43:45.2551164Z: 'Connection: keep-alive' recurse [Suave.Web.httpLoop.loop] 

और यहाँ लॉग के एक हिस्से को जहां एप्लिकेशन (choose के माध्यम से मार्ग के साथ) अपेक्षा के अनुरूप काम नहीं करता है:

[V] 2016-01-19T02:44:59.6356127Z: initialising BufferManager with 827392 bytes [Suave.Socket.BufferManager] 
[I] 2016-01-19T02:44:59.6537478Z: listener started in 20.987 ms with binding 127.0.0.1:18708 [Suave.Tcp.tcpIpServer] 
[V] 2016-01-19T02:44:59.8848907Z: 127.0.0.1 connected, total: 1 clients [Suave.Tcp.job] 
[V] 2016-01-19T02:44:59.8879891Z: reserving buffer: 811008, free count: 99 [Suave.Tcp.job] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:44:59.8929862Z: -> processor [Suave.Web.httpLoop.loop] 
[V] 2016-01-19T02:44:59.8939749Z: reading first line of request [Suave.Web.processRequest] 
[V] 2016-01-19T02:44:59.9068548Z: reserving buffer: 802816, free count: 98 [Suave.Web.readMoreData] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:44:59.9209857Z: reading headers [Suave.Web.processRequest] 
[V] 2016-01-19T02:44:59.9259688Z: freeing buffer: 802816, free count: 99 [Suave.Web.split] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:44:59.9338521Z: parsing post data [Suave.Web.processRequest] 
[V] 2016-01-19T02:44:59.9378580Z: <- processor [Suave.Web.httpLoop.loop] 
[V] 2016-01-19T02:44:59.9518518Z: freeing buffer: 811008, free count: 100 [Suave.Tcp.job] [Suave.Socket.BufferManager] 
[V] 2016-01-19T02:44:59.9518518Z: Shutting down transport. [Suave.Tcp.job] 
[V] 2016-01-19T02:44:59.9528516Z: 127.0.0.1 disconnected, total: 0 clients [Suave.Tcp.job] 

जब ऐप कनेक्शन निष्पादित करता है तो खुलता है और फिर तुरंत बंद हो जाता है। जब मैंने पोर्ट द्वारा ऐप मारा तो एक नया कनेक्शन खुलता है और फिर तुरंत बंद हो जाता है (फिर से)।

क्या मैं ऐप के लिए होस्ट कॉन्फ़िगरेशन के साथ कुछ गलत कर रहा हूं, या क्या मैं कुछ चुन रहा हूं कि मैं चुनिंदा फ़ंक्शन का उपयोग कैसे कर रहा हूं? किसी भी सहायता की सराहना की जाएगी। धन्यवाद!

+0

आप डिबगर संलग्न करने की कोशिश की? क्या कोई अपवाद है? क्या होगा यदि आप किसी फ़ाइल या कुछ ऐसे में Suave लॉग को रीडायरेक्ट करते हैं, तो क्या यह कुछ भी दिखाता है? –

+0

जवाब देने (और पूछने) के लिए धन्यवाद। मैं इसे चलाने के बाद FAKE.exe से संलग्न कर सकता हूं लेकिन मैं इसे लॉन्च करने से पहले ऐसा करने में सक्षम नहीं हूं। मैं अपवाद का पता लगाने में सक्षम नहीं हूं। मैंने लॉग आउटपुट को शामिल करने के लिए प्रश्न संपादित किया। – Jeremy

+0

तो क्या आप किसी अपवाद को देखते हैं यदि आप प्रक्रिया शुरू करने के बाद संलग्न करते हैं? –

उत्तर

4

मुझे लगता है कि मार्गों दिखना चाहिए:

path "/app/hello"

+0

वह था। पथ मूल सापेक्ष हैं और वे निर्देशिका में मेल नहीं खाते थे। धन्यवाद! ट्विटर पर पहुंचने के लिए डेविड हनी को भी चिल्लाओ .. – Jeremy

+0

एक तरफ, मैंने [पथ के लिए स्रोत] देखा [https://github.com/SuaveIO/suave/blob/master/src/Suave/ Combinators.fs)। यह AbsolutePath पर मेल खाता है, इसलिए अगर अनुरोध स्थानीयहोस्ट/हैलो है, तो यह "/ हैलो" ढूंढ रहा है। – Jeremy

संबंधित मुद्दे