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 的热心帮助下问题得到了解决。

https://www.experts-exchange.com/questions/29084691/RIA-Service-Error-in-a-Silverlight-Application.html

解决方案是将以下行添加到 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>