部署的 WCF Silverlight 应用程序返回 404 错误

Posted

技术标签:

【中文标题】部署的 WCF Silverlight 应用程序返回 404 错误【英文标题】:Deployed WCF Silverlight application returns 404 Error 【发布时间】:2015-08-16 23:09:19 【问题描述】:

我有一个托管在 IIS 8 中的 Silverlight 5 Web 应用程序。我可以在 VS 2013 中正常运行我的应用程序,但在部署到运行 IIS 8 的 Windows 2012 服务器时,我的应用程序无法运行。提琴手给了我以下信息: 说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

我的 Web.config 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="system.serviceModel">
      <section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" allowDefinition="MachineToApplication" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <appSettings>
    <add key="ApplicationName" value="......" />
  </appSettings>
  
  <system.web>
    <httpModules>
      <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </httpModules>
    <httpRuntime targetFramework="4.5" maxRequestLength="10000000" executionTimeout="120" />
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
    <roleManager enabled="true" />
    <authentication mode="Forms">
      <forms name=".ABCD_ASPXAUTH" timeout="20" />
    </authentication>
    <profile>
      <properties>
        <add name="FriendlyName" />
      </properties>
    </profile>
    <pages controlRenderingCompatibilityVersion="4.0" />
    
    <customErrors mode="RemoteOnly" defaultRedirect="DefaultRedirectErrorPage.aspx">
      <error statusCode="403" redirect="AccessDenied.htm" />
      <error statusCode="404" redirect="Http404ErrorPage.aspx" />
    </customErrors>
    
  </system.web>
  <system.web.extensions>
    <scripting>
      <webServices>
        <authenticationService enabled="true" requireSSL="false" />
        <roleService enabled="true" />
      </webServices>
    </scripting>
  </system.web.extensions>
  
  <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=31BF3765AD364E35" />
    </modules>
  </system.webServer>
  
  <system.serviceModel>
    <client />
    <behaviors>
      <serviceBehaviors>
        <behavior name="AppServicesBehavior">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
        <behavior name="ReportServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="WebBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="userHttp">
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="System.Web.ApplicationServices.AuthenticationService" behaviorConfiguration="AppServicesBehavior">
        <endpoint contract="System.Web.ApplicationServices.AuthenticationService" binding="basicHttpBinding" bindingConfiguration="userHttp" bindingNamespace="http://asp.net/ApplicationServices/v200" />
      </service>
      <service name="System.Web.ApplicationServices.RoleService" behaviorConfiguration="AppServicesBehavior">
        <endpoint contract="System.Web.ApplicationServices.RoleService" binding="basicHttpBinding" bindingConfiguration="userHttp" bindingNamespace="http://asp.net/ApplicationServices/v200" />
      </service>
      <service name="Telerik.Reporting.Service.ReportService" behaviorConfiguration="ReportServiceBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="Telerik.Reporting.Service.IReportService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="resources" binding="webHttpBinding" behaviorConfiguration="WebBehavior" contract="Telerik.Reporting.Service.IResourceService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <connectionStrings>
    ''''''''''''''''
  </connectionStrings>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Critical, Error, Warning" propagateActivity="true">
        <listeners>
          <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\Projects\Log\Traces.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

</configuration>

谁能告诉我为什么以前配置的 Win 2012 服务器现在不能加载部署的应用程序,而我仍然可以从 VS 2013 运行? 或者有没有办法让 Fiddler 给出更详细的错误?

我设置了跟踪,但日志没有提供更好的线索。

谢谢。

【问题讨论】:

确保 IIS 中的应用程序池正在运行。您的应用程序是否编译为 32 位应用程序?在 iis 中为应用程序池设置的 .NET 版本是什么? 应用程序池正在运行,DefaultAppPool 使用 v4.0 集成。不确定我的应用程序 dll 编译为哪个位。 查看您的配置文件看起来您正在使用实体框架。 assembly="System.Data.Entity.. 确保您在开发环境和 IIS 服务器上使用的实体框架的版本相同。这可能是您出错的原因。 谢谢。我在开发环境中的 EntityFramework 版本是 5.0.0.0。如何检查/更改 IIS 服务器上的版本? 【参考方案1】:

您的开发机器上可能安装了 RIA 服务,但服务器上没有安装它。

你有两个选择:

    记得在部署到的每台服务器上安装 RIA 服务

    RIAServices.Server NuGet 包添加到您的 *.Web 项目。这会将 RIAServices dll 的私有本地副本添加到您的解决方案中。

【讨论】:

以上是关于部署的 WCF Silverlight 应用程序返回 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何针对已部署的服务 [跨域问题] 调试 Silverlight 应用程序?

Silverlight+WCF项目Https配置

●创建silverlight+wcf

silverlight 应用程序不能使用 wcf 命名空间

ssl、silverlight、wcf 和本地安装

WCF(Silverlight)双工 - 不打服务器