2014-01-13 110 views
2

任何人都可以給我一個ASP網點4.0網站項目的工作示例,其中有一個XSockets的工作實現嗎?XSockets和Asp.Net 4.0網站項目

我已經設置了一個空白的解決方案,可以連接到ws:// localhost:4502 /通用的很好,但我無法連接到添加到App_Code文件夾的自定義控制器。

我使用最新的XSockets,通過nuget今天安裝(2014年1月13日)。

當試圖連接到自定義控制器時,我得到一個XSocketException「在加載的插件中找不到處理程序名稱」。

自定義控制器代碼是I文件,名爲MyTestController.cs,位於App_Code文件夾中。我一直試圖讓它工作4-5個小時,沒有運氣。我找不到任何說明我需要在RegisterRoutes調用中手動註冊新控制器的文檔。

我試圖創建一個MVC應用程序來查看添加XSockets做什麼,但是這並沒有手動註冊任何路線。

使用Web應用程序或MVC應用程序是不可能的,因爲我們需要嘗試將它實現爲一個非常大且成熟的遺留網站。

定製控制如下:

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Threading; 
using System.Web; 

using XSockets.Core.Common.Socket.Event.Interface; 
using XSockets.Core.XSocket; 
using XSockets.Core.XSocket.Helpers; 


/// <summary> 
/// Summary description for TestController 
/// </summary> 
/// 
namespace XSocketsTest1 
{ 

    public class MyTestController: XSocketController 
    { 
     public MyTestController() 
     { 
      Debug.Print("TestController Created"); 
      this.OnOpen += TestController_OnOpen; 
      this.OnClose += TestController_OnClose; 
     } 

     void TestController_OnClose(object sender, XSockets.Core.Common.Socket.Event.Arguments.OnClientDisconnectArgs e) 
     { 
      Debug.Print("TestController_OnClose"); 
      //throw new NotImplementedException(); 
     } 

     void TestController_OnOpen(object sender, XSockets.Core.Common.Socket.Event.Arguments.OnClientConnectArgs e) 
     { 
      Debug.Print("TestController_OnOpen"); 
      this.Send("Hello there. You have connected.", "msgClient"); 
     } 

     void RunReport() 
     { 
      Debug.Print("RunReport"); 
      this.Send("You called RunReport", "msgClient"); 
     } 
    } 
} 

Default.aspx的是在這裏:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <h1>Clean Page - XSockets In Web Site Project Tester</h1> 
     <p>This is to prototype xsockets in a web site project.</p> 
     <p>Target environment needs to be .net 4.0 Web Site project, and <em>cannot be a web application</em>.</p> 

     <h4>Results</h4> 
     <div class="js-log-contents log-contents"> 
     </div> 

    </div> 
    </form> 

    <style type="text/css"> 
     .log-contents{border:2px solid grey;min-height:200px; width:400px;} 
     .log-contents.success{border-color:#0f0;} 
     .log-contents.error{border-color:#f00;} 
     em{font-weight:bolder;} 
    </style> 
    <script src="Scripts/jquery-2.0.3.min.js"></script> 
    <script src="Scripts/XSockets.latest.js"></script> 
    <script src="Scripts/XSockets.fallback.latest.js"></script> 
    <script type="text/javascript"> 
     var page = 
      { 
       self: this, 
       config: { 
        //controllerAddress: "ws://localhost:4502/MyTest"            // Does Not Work 
        controllerAddress: "ws://localhost:4502/MyTestController"        // Does Not Work 
        //controllerAddress: "ws://localhost:4502/XSocketsTest1.MyTest"      // Does Not Work 
        //controllerAddress: "ws://localhost:4502/XSocketsTest1.MyTestController" // Does Not Work 
        //controllerAddress: "ws://localhost:4502/Generic"            // Works 
       }, 

       logger: 
       { 
        logIdentifier: "js-log-contents", 
        failCssClass: "error", 
        successCssClass: "success", 
        fail: function (msg) { $("." + this.logIdentifier).append(msg).removeClass(this.successCssClass).addClass(this.failCssClass); }, 
        success: function (msg) { $("." + this.logIdentifier).append(msg).removeClass(this.failCssClass).addClass(this.successCssClass); } 
       } 
      }; 


    // XSockets client code - copied from xsockets.net. 
     var conn; 
     var controllerAddress = page.config.controllerAddress; 
     conn = new XSockets.WebSocket(controllerAddress); 

     conn.on(XSockets.Events.open, function (clientInfo) { 
      console.log("Open successful, controller name is " + controllerAddress, clientInfo) 
      page.logger.success("Successfully opened " + controllerAddress); 
     }); 

     conn.on(XSockets.Events.onError, function (err) { 
      console.log('Error, controller name is ' + controllerAddress, err); 
      page.logger.fail("Failed to open " + controllerAddress); 
     }); 

     $(function() { 
     }); 
    </script> 
</body> 
</html> 

回答

2

當您添加類App_Code文件夾中,他們將通過Visual Studio中「建標行動= content「而不是」build action = compile「 如果你想讓你的控制器在App_Code中,只需右鍵單擊該文件並選擇屬性,然後將編譯動作改爲編譯而不是內容。

雖然XSockets有一個MVC模式,但它與ASP.NET MVC無關,所以你不會看到任何路由。 XSockets的構建是獨立的,不依賴於IIS,Apache等。

由於App_Code下的類(控制器)不能編譯XSockets在啓動時無法找到它。如果你不能改變爲「編譯動作」=編譯出於某種原因,然後添加一個類庫,在其中安裝XSockets.Core並構建你的控制器。然後,您可以在啓動XSockets服務器的項目中引用此lib。它現在將被XSockets找到。

Btw。我發現你在客戶端連接時發送了一個「msgClient」事件,但是在javascript中我沒有看到該主題的任何訂閱。

0

有沒有人知道如何改變構建動作或者「添加一個類庫來安裝XSockets.Core並構建你的控制器,然後你可以在你啓動XSockets服務器的項目中引用這個lib。被XSockets找到。「 ..

據我可以告訴你不能改變一個文件在asp.net網頁項目中的構建動作,我甚至不知道如何添加一個類庫來安裝XSockets.Core並建立控制器.. xD