[Robotics Studio] 靠自己的程式啟動 DSS 環境-- Day30

  • 9006
  • 0
  • 2009-02-17

[Robotics Studio] 靠自己的程式啟動 DSS 環境-- Day30

一般而言我們都是開發 DSS Service, 然後透過  DSSHost.exe 執行, 或是撰寫 VPL, 透過 VplHost.exe 執行.

但是現在我要展示如何撰寫一個獨立的執行檔自己成為 DSS Host, 然後啟動 DSS Service.

所以, 首先, 打開 VS2008, 新增一個 Windows Form 應用程式專案 (.NET Framework 要選 3.5), 名稱為 mydsshost:

image

接下來加入 .NET 參考:
Microsoft.Ccr.Core, Microsoft.Dss.Environment, Microsoft.Dss.Runtime

using 加上:

using Microsoft.Dss.Hosting;
using Microsoft.Dss.Core;

然後在 Form 的屬性 Load , 以及 FormClosed 分別加上如下的程式碼:

private void Form1_Load(object sender, EventArgs e)
{
    DssEnvironment.Initialize(new DssRuntimeConfiguration()
    {
        PublicHttpPort = 50000,
        PublicTcpPort = 50001,
        SecuritySettings = @"store\SecuritySettings.xml",
    }, null);
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    DssEnvironment.Shutdown();
}

這樣就可以執行程式了, 執行起來你當然看不到任何東西, 但是可以透過 Browser 連到 http://localhost:50000 就會看到熟悉的畫面了.

以上, 就是微軟官方文件的內容, 接下來要介紹的是類似以前我很愛看的 undocument windows 的內容,
所謂 undocument windows, 就是寫一些官方說明沒寫的東西...
至於為什麼沒寫, 可能有很多原因, 可能是因為工程師偷懶, 高層沒抓到,
或可能是高層命令不能讓官方以外的人寫出足以威脅官方生存的...(不能再寫更多離題的事情!)

話說我照著官方文件寫出了上面的東西, 接下來我當然想要呼叫自己寫的 DSS Service 囉,
這樣還需要參考 .NET Microsoft.Dss.Base
然後放一個 button 到 form 上, button click 的程式如下:

private void button1_Click(object sender, EventArgs e)
{
    DssEnvironment.CreateService("http://schemas.tempuri.org/2009/01/mazegenerator.html");
}

然後我就滿心期待寫完三十篇文章等著領獎品了...
等到我按下 button 期待很久, 啥都沒有發生啊!!!

如果透過 browser 去 http://localhost:50000/controlpanel 看, 只有看到 System DSS Service , 其他都沒有...

如果把自己寫的 DSS Service dll 複製到 mydsshost 的執行目錄, 也是沒有用.

最後終於在睡覺的時候, 夢到周公告訴我答案 (所以以下答案由周公大人提供, 有問題請找他.)

DssRunTimeConfiguration 有參數 HostRootDir 可以設定, 官方說法:http://msdn.microsoft.com/en-us/library/microsoft.dss.core.dssruntimeconfiguration.hostrootdir.aspx


周公說法 : 當 DssEnvironment.Initialize 傳 DssRuntimeconfiguration 時, 如果你不給 HostRootDir ,
表示 HostRootDir 就是你的程式執行的目錄.
而你也當然可以自己指定 HostRootDir , 但重點是 : HostRootDir 下面的 bin 目錄就是存放 DSS Service dll 的地方.
所以你可以指定為 Robotics Studio Express 的安裝目錄, 這樣你就可以 Create 任何之前的 DSS Service,
或是把自己寫的 dll 複製到 mydsshost 執行目錄下的 bin 目錄 , 這樣你就可以 create 該 dll 所提供的 DSS Service.
要注意, 如果該 DSS Service 有 partner dss service, 你也要把相關的 dll 都複製過去,
還有, 如果 dll 有用 store 底下的東西 (比如說 store 下面的 media 目錄),
你也要把那些檔案一併複製到正確的相對目錄 (store/media) 才行.


另外, SecuritySettings 是指你可以給一個相對於 HostRootDir 的檔案名稱, 檔案可以不必存在 (表示沒有任何設定),
但是若你指定了檔案名稱, 表示你啟用 Security 設定, 之後若 security 有任何設定改變, 會存在那個檔案當中,
若你沒有指定檔案名稱, 表示你不啟用 Security 設定, 之後這個 DSS Host 沒辦法改變或使用 Security 設定.
(以上是官方說法 "Key File" 所展開的涵義, 難道官方工程師認為人人都有周公幫忙嗎?!)

以上, 謝謝周公大力協助, 希望我下篇文章可以介紹如何操控實體機器人元件給大家看.