我有一个项目,它有RIAService,实体框架引用了我的Silvelright项目。所以当我构建构建RIA服务项目的DLL的项目并将其放在Silverlight项目的Bin / Debug文件夹中时。
域名服务功能如下
[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中得到以下错误,如下所示
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 :(得分:1)
你不应该做你想做的事情。创建WCF RIA是为了弥合服务器和客户端应用程序的特定实现之间的差距。在构建项目时,会发生各种代码生成,将客户端与服务器上的实现联系起来。
现在,你可以做的是:
如果您要使用编辑功能,我建议使用第一个选项。但是对于只读数据,第二个选项应该相对轻松地工作。但话又说回来,我建议公开一个O-Data端点,这在WCF RIA中非常容易。
答案 1 :(得分:0)
我以其他方式获得解决方案,
在我的project.Web(ASP.NET项目)中我创建了一个简单的WCF应用程序,它调用我的WCF RIA服务的功能。
在窗口服务解决方案中,我添加该WCF服务的服务引用并调用该WCF函数并完成我的任务。
@duluca谢谢你的回复。