在IIS7.5上部署WebSharper 2.4 sitelet

时间:2012-07-13 21:38:22

标签: f# iis-7.5 websharper

我从Visual Studio 2012创建了一个websharper sitelet项目,我称之为SiteletTest。

我编译了这个项目。

然后我将SiteletTest / Web复制到inetpub / wwwroot。

然后我转到localhost/SiteletTestlocalhost/SiteletTest/Homelocalhost/SiteletTest/home,但在每种情况下我都会获得http 404。

如果我转到localhost/Main.html然后我会得到一个页面,所以转到此目录似乎有效,但是websharper似乎没有工作。

我的web.config在下面,我不知道还能做什么。我已经将应用程序池设置为使用.net 4:

<configuration>
 <system.web>
  <compilation debug="true" targetFramework="4.5" />
  <authentication mode="Forms" />
  <pages>
   <controls>
    <add tagPrefix="WebSharper" namespace="IntelliFactory.WebSharper.Web" assembly="IntelliFactory.WebSharper.Web" />
    <add tagPrefix="ws" namespace="Website" assembly="Website" />
   </controls>
  </pages>
  <httpModules>
   <add name="WebSharper.Remoting" type="IntelliFactory.WebSharper.Web.RpcModule, IntelliFactory.WebSharper.Web" />
   <add name="WebSharper.Sitelets" type="IntelliFactory.WebSharper.Sitelets.HttpModule, IntelliFactory.WebSharper.Sitelets" />
  </httpModules>
 </system.web>
 <system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules>
   <add name="WebSharper.Remoting" type="IntelliFactory.WebSharper.Web.RpcModule, IntelliFactory.WebSharper.Web" />
   <add name="WebSharper.Sitelets" type="IntelliFactory.WebSharper.Sitelets.HttpModule, IntelliFactory.WebSharper.Sitelets" />
  </modules>
 </system.webServer>
 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
   </dependentAssembly>
  </assemblyBinding>
  <assemblyBinding appliesTo="v4.0.30319" xmlns="urn:schemas-microsoft-com:asm.v1">
   <dependentAssembly>
    <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="2.0.0.0" newVersion="4.3.0.0" />
   </dependentAssembly>
  </assemblyBinding>
 </runtime>
</configuration>

在我知道这是否符合我的需求之前,我不打算购买许可证,所以,如何让这个工作

我不想复制sitelet代码,但这里有一些片段:

   type Action =
        | Home
        | Contact
        | Protected
        | Login of option<Action>
        | Logout
        | Echo of string

和另一个片段:

module Pages =

    /// The home page.
    let HomePage : Content<Action> =
        Skin.WithTemplate "Home" <| fun ctx ->
            [
                H1 [Text "Welcome to our site!"]
                "Let us know how we can contact you" => ctx.Link Action.Contact
             ]

1 个答案:

答案 0 :(得分:2)

我很确定你错过了三件事中的一件:

1-您的sitelet /路由器未定义......类似这样:

type Site() =
    interface IWebsite<Action> with
        member x.Sitelet =
            Sitelet.Infer
            <|  function
                | Home -> Pages.HomePage
                ...
        member x.Actions = []

这会将每个操作案例映射到正确的页面。有很多方法可以定义它,但上面的Sitelet.Infer只是按名称映射路径。

2-您没有指定网站装配属性......如下所示:

[<assembly : Website(typeof<Site>)>]
do ()

我认为这告诉ASP.NET将上述Sitelet加载为您的站点。

3-第三个选项是从C#Web项目的Default.aspx页面自动加载客户端JavaScript控件。如果您使用Web应用程序(ASP.NET)模板,您将看到一个示例......但是我认为您不能以完全REST的方式控制URL路径。