2012-03-28 57 views
0

我有一個項目有RIAService,實體框架引用了我的Silvelright項目。所以當我建立項目,建立RIA服務項目的DLL,並把它放在Silverlight項目的Bin/Debug文件夾中。在Window服務中使用RIA服務項目的DLL

域名服務功能是類似下面

[EnableClientAccess()] 
public partial class MyClassDomainService : LinqToEntitiesDomainService<MyDatabaseEntities> 
{ 
    [Invoke] 
    public void MyFunction(int Para1, string Para2, int Para3, string Para4) 
    { 
      //mycode 
    } 
} 

現在我已經建立這個項目簡介和複製此RIAService.dll和其他需要的DLL到我的另一個項目是窗口服務項目。

現在在窗口服務中,我創建了此域服務的對象,如下面的timerQlinkRequest_Elapsed()函數中所示。

private void timerQ_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    try 
    { 
     MyClassDomainContext objcontext = new MyClassDomainContext(); 
     objcontext.MyFunction(1, "ADD", 1234, "Vehicle"); 
    } 
    catch (Exception ex) 
    { 
     LogMessage("Error : StackTrace : " + ex.StackTrace); 
    } 
} 

安裝和啓動窗口服務後,我收到以下錯誤ex.stackTrace日誌filem如下

Error : StackTrace : at MS.Internal.JoltHelper.get_Context() 
    at MS.Internal.XcpImports.Application_GetCurrent(IntPtr& pApp) 
    at System.Windows.Application.get_Current() 
    at System.ServiceModel.DomainServices.Client.WebDomainClient`1.ComposeAbsoluteServiceUri() 
    at System.ServiceModel.DomainServices.Client.WebDomainClient`1..ctor(Uri serviceUri) 
    at RIAService.Web.Service.QLink.MyClassDomainContext..ctor() 
    at MywindowService.MyService1.timerQ_Elapsed(Object sender, ElapsedEventArgs e) 

所以我的主要困惑是,我可以這樣做?如果是,那麼我哪裏出錯?

請幫幫我。

等待回覆。

+0

你是否試圖從多個項目使用相同的ria服務?這兩個項目在相同的解決方案中是否存在任何限制? – 2012-03-28 14:55:38

+0

兩者都是不同的解決方案。一個是窗口服務解決方案和其他解決方案有RIAService項目和Silverlight項目以及Silverlight.Web項目。所以在構建RIAService.dll後,我複製粘貼,然後將其放到一個文件夾中,並將其用於Window服務項目。 – 2012-03-28 17:10:53

回答

0

我得到其他方式的解決方案,

在我project.Web(ASP.NET項目),我創建了叫我的WCF RIA服務的功能,簡單的WCF應用程序。

而在窗口服務解決方案中,我添加該WCF服務的服務引用並調用該WCF函數並完成我的任務。

@duluca感謝回覆。

1

你不應該做你想做的事情。 WCF RIA的創建是爲了縮小服務器和客戶端應用程序特定實現之間的差距。當您構建項目時,會有各種代碼生成,將客戶端與服務器上的實現聯繫起來。

現在,你可以在這裏做的是:

  1. 將你的第二個客戶端相同的解決方案,並將其添加爲第二RIA客戶端向Silverlight.Web項目。您可以從項目設置中完成此任務,並且您將獲得完整的RIA優勢。
  2. 您可以嘗試調用已部署的RIA服務,就好像它是WCF服務一樣;畢竟它被稱爲WCF RIA服務的原因。現在您不會獲得所有內置支持(大部分由代碼生成提供),但您仍然可以通過WCF操作手動執行CRUD操作。檢查here「直接瀏覽到域服務」部分, 查看如何找到svc文件。

我推薦第一個選項,如果你打算使用編輯功能。但第二個選項應該對於只讀數據相對無痛地工作。但是,我又建議公開一個O-Data端點,這在WCF RIA中很容易實現。