Silverlight 应用程序中的 RIA 服务错误
RIA Service Error in a Silverlight Application
在一个非常简单的 Silverlight 应用程序中,我有一个 DomainService Class,它有一个 returns 字母对象列表的方法。
当我在 VisualStudio 中 运行 应用程序工作正常。但是,当我使用 IIS(版本 10.0.166299.5)将它发布到 Windows 10 本地计算机上的文件夹并 运行 时,出现以下错误:
远程服务器返回错误:NotFound。
在System.ServiceModel.DomainServices.Client.OperationBase.Complete(异常错误)在System.ServiceModel.DomainServices.Client.LoadOperation.Complete(异常错误)在System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)在System.ServiceModel.DomainServices.Client.DomainContext.<>c__DisplayClass1b.b__17 (对象)
我怀疑这是因为我的 WebConfig 文件中缺少某些错误。 我的 WebConfig 目前看起来是这样的:
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6" />
<httpRuntime targetFramework="4.6" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="DomainServiceModule" preCondition="managedHandler" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>
我的域服务 Class 的代码是这样的:
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
using SilverData.Web.Models;
namespace SilverData.Web.Services
{
[EnableClientAccess]
public class DrugsRiaService : DomainService
{
public IQueryable<Letter> GetAllLetters()
{
List<Letter> letters = new List<Letter>();
Letter letterA = new Letter { ID = 1, Statement = "Mike" };
Letter LetterB = new Letter { ID = 2, Statement = "Emma" };
Letter LetterC = new Letter { ID = 3, Statement = "Peter" };
letters.Add(letterA);
letters.Add(LetterB);
letters.Add(LetterC);
return letters.AsQueryable();
}
}
}
我不确定,这是我的猜测,因为我已经有一段时间没有使用 RIA 了,但我认为字母需要作为可查询以外的东西返回...试试 ToList() ,它会导致查询执行,并且有效负载包含从数据库中检索到的完整枚举。请记住,这是来自客户端的远程调用,而不是可以扩展可查询的本地调用。
错误是由于没有提供 .svc 文件的问题。在 Kyle Abraham on Experts Exchange 的热心帮助下问题得到了解决。
解决方案是将以下行添加到 Webconfig
的网络服务器部分
<handlers>
<add name=".svc" verb="*" path="*.svc" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</handlers>
在一个非常简单的 Silverlight 应用程序中,我有一个 DomainService Class,它有一个 returns 字母对象列表的方法。
当我在 VisualStudio 中 运行 应用程序工作正常。但是,当我使用 IIS(版本 10.0.166299.5)将它发布到 Windows 10 本地计算机上的文件夹并 运行 时,出现以下错误:
远程服务器返回错误:NotFound。 在System.ServiceModel.DomainServices.Client.OperationBase.Complete(异常错误)在System.ServiceModel.DomainServices.Client.LoadOperation.Complete(异常错误)在System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)在System.ServiceModel.DomainServices.Client.DomainContext.<>c__DisplayClass1b.b__17 (对象)
我怀疑这是因为我的 WebConfig 文件中缺少某些错误。 我的 WebConfig 目前看起来是这样的:
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6" />
<httpRuntime targetFramework="4.6" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="DomainServiceModule" preCondition="managedHandler" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>
我的域服务 Class 的代码是这样的:
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
using SilverData.Web.Models;
namespace SilverData.Web.Services
{
[EnableClientAccess]
public class DrugsRiaService : DomainService
{
public IQueryable<Letter> GetAllLetters()
{
List<Letter> letters = new List<Letter>();
Letter letterA = new Letter { ID = 1, Statement = "Mike" };
Letter LetterB = new Letter { ID = 2, Statement = "Emma" };
Letter LetterC = new Letter { ID = 3, Statement = "Peter" };
letters.Add(letterA);
letters.Add(LetterB);
letters.Add(LetterC);
return letters.AsQueryable();
}
}
}
我不确定,这是我的猜测,因为我已经有一段时间没有使用 RIA 了,但我认为字母需要作为可查询以外的东西返回...试试 ToList() ,它会导致查询执行,并且有效负载包含从数据库中检索到的完整枚举。请记住,这是来自客户端的远程调用,而不是可以扩展可查询的本地调用。
错误是由于没有提供 .svc 文件的问题。在 Kyle Abraham on Experts Exchange 的热心帮助下问题得到了解决。
解决方案是将以下行添加到 Webconfig
的网络服务器部分<handlers>
<add name=".svc" verb="*" path="*.svc" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</handlers>