WCF RIA服务部署问题

8
我有一个非常简单的Silverlight示例应用程序。我为其添加了一个域服务,并使用一个实体模型添加了一个实体。客户端应用程序在启动时只需加载实体中的所有行。当我在我的开发环境中运行它时,它按预期工作。然而,当我将其移动到我们的测试服务器上时,我会收到一个异常,说我正在调用的方法找不到(查询'GetCTCStation'的加载操作失败。远程服务器返回错误。未找到)。当我使用Fiddler更仔细地检查客户端/服务器通信时,我发现请求正在发送到http://[server url]/ClientBin/SilverlightApplication7-Client-Web-CTCService.svc/binary
我将域服务添加到Web项目的根目录下,所以我不明白为什么客户端要在ClientBin目录中寻找它。显然那里没有。我在这里做错了什么?我从来没有遇到过RIA的七月预览版的任何问题。
它是相对路径,但这在Generated_Code文件中自动处理。而且在webconfig中也没有配置。我在创建域服务时使用了默认设置。我尝试在实例化服务时明确设置uri,但出现了相同的异常。
10个回答

9
经过长时间的努力和尝试,我终于找到了解决方案。这篇文章是关键:(链接)
基本上,在发布项目时,一些dll文件未包含在bin文件夹中。请确保在“引用”下正确设置以下dll文件(确保System.ComponentModel.DataAnnotations指向C:\Program Files\Microsoft SDKs\RIA Services\v1.0\Libraries\Server\System.ComponentModel.DataAnnotations.dll):
需要将System.ComponentModel.DataAnnotations和以System.Web开头的每个dll的“复制本地”设置为true。
构建项目并重新发布。这对我解决了问题。
我要感谢所有为解决此问题做出贡献的人(在此线程和其他线程中)。

该SDK中不再存在System.ComponentModel.DataAnnotations.dll文件。我们应该将这个答案投下否决票吗? - YeahStu
1
我正在使用Silverlight 5和Ria Services 1.0 SP2,这个答案仍然有效。实际上,请@Dragan或任何能够的人将其标记为答案。 - Doguhan Uluca

1
我也遇到了这个问题(RIA返回“未找到”),但在我的情况下,问题是我的查询返回的行数超过了maxitemsinobjectgraph允许的最大值。 我的临时解决方法是添加.Take(5000)以减少结果集,但永久解决方案需要扩展maxitemsinobjectgraph,如下所示。 希望这能帮助其他人...
<behaviors>    
 <behavior name="MyServiceBehavior">        
  <dataContractSerializer maxItemsInObjectGraph="3" />    
 </behavior>
</behaviors>

请记住默认值为Int32.MaxValue,即2,147,483,647

MSDN - maxItemsInObjectGraph

MSDN - Int32.MaxValue


1
在我的情况下,解决方案是将网站的引用文件夹中以下程序集的“复制本地”属性设置为“True”:
System.ComponentModel.DataAnnotations  
System.ServiceModel.DomainServices.EntityFramework  
System.ServiceModel.DomainServices.Hosting  
System.ServiceModel.DomainServices.Hosting.OData  
System.ServiceModel.DomainServices.Server  
System.Web.ApplicationServices  
System.Web  
System.Web.Extensions  
System.Web.Mobile  
System.Web.Services

如果下一次重建后一切正确,这些程序集将被复制到您项目的 bin 文件夹中。

我没有执行任何好用的 IIS 7 配置。


1
如果您检查该服务请求上的错误(以您目前看到的方式是正常的),Fiddler 中的内容是什么?NotFound 在插件中是通用的,但 Fiddler 可能会向您显示 HTTP 500 或其他响应主体中包含更多详细信息的内容。

在我的情况下,我遇到了401错误。尝试对所有必需的文件使用复制本地选项,但仍然没有运气...有什么建议吗? - Nikos Tsokos

1

1)您正在部署在哪个IIS上?如果< 7,则需要热补丁

2)包括所有RIA程序集(设置复制本地=> True),包括:

System.Web.Ria

System.Web.DomainServices.(根据您使用的内容有4种)

3)这可能是由于您ASPNET应用程序中的<authentication>节点设置为Windows,但您的站点在IIS中设置为匿名。 对于大多数人来说,只需将<authentication>节点更改为mode =“Forms”即可消除此错误并使您继续进行。 对于其他人,如果您的IIS配置设置为同时使用集成身份验证和匿名身份验证,则需要在IIS管理控制台中的站点的目录安全性设置中取消选中其中一个。


1

微软建议在MSDN上安装Ria服务。

建议在托管应用程序的Web服务器上安装RIA服务。

这里有一个技巧,可能会让大多数人望而却步。默认情况下,安装将列出一些先决条件,您通常不希望在服务器上安装。

先决条件检查

缺少以下必需组件:

  • Microsoft Visual Studio 2010或更高版本或Visual Web Developer 2010
  • Express Microsoft Silverlight 4 Developer Runtime或更高版本Microsoft
  • Silverlight 4 SDK或Microsoft Silverlight 5 SDK

使用命令行参数SERVER=TRUE运行installation将绕过此检查。

msiexec /i RiaServices.msi SERVER=TRUE

我也建议您使用此解决方案,因为它不需要针对特定一组可能在未来版本中更改的dll进行特殊配置。此外,发布过程将稍微快一些,因为这些文件不会被包含。

请注意,您还可以使用Web平台安装程序通过'WCF RIA Services Server install for .Net Framework 4.0'在服务器上安装Ria Services,其具有与SERVER=TRUE开关相同的效果。不幸的是,这只适用于版本1,并且缺少服务包2。


0

WCF RIA Services VS 2008 部署错误

网络上有很多不错的帖子,最好的一个似乎是这里(感谢 Tim)

虽然我找到的所有帖子在某种程度上都很有用,但在我的情况下最终解决方案是不合适的数据库连接字符串。尽管 VS 生成的 DB 字符串在 VS 中运行良好,但在我将其缩短为以下形式之前,我无法将其部署到我的 QA 服务器:

add name="myEntities" connectionString="metadata=res://*/ReviewsModel.csdl|res://*/ReviewsModel.ssdl|res://*/ReviewsModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=dataSource;Initial Catalog=intitalCatalog;User ID=userID;Password=password;&quot;" providerName="System.Data.EntityClient" 

0
你检查了绑定配置的地址部分吗?看起来它正在使用相对地址。

0

WCF RIA服务VS 2008部署错误 这里是您正在寻找的解决方案,下载示例并检查您自己的WCF RIA(Vs2008)服务。


0
对我来说,问题在于IIS中的身份验证未设置为“匿名”。我使用Fiddler获取生成的RIA SCV URL,然后在浏览器中打开该URL。消息非常明确。
我只需要允许匿名访问,重新启动应用程序池,一切都按预期工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接