我不知道这是否是一个错误/功能,但我需要找到一种方法让它发挥作用。
要重新创建,请使用VS2012,打开一个启用了RIA服务的新SL5项目。创建另一个项目,添加一个简单的WCF服务(或启用SL的WCF)并添加一个接受或返回一个简单对象的方法(我有一个对象,其中包含一个字符串属性)。尝试将其添加为SL项目的服务参考。您将在警告中收到此错误:
自定义工具警告: 没有找到与Silverlight 5兼容的端点。除非通过构造函数提供端点信息,否则生成的客户端类将不可用。
并且实际上没有生成生成的代码。
我发现如果我从service方法中删除对象并使用简单的字符串/ int / bool,那么引用就可以了。此外,如果我将相同的服务添加到没有RIA的常规SL应用程序,一切都会像您期望的那样工作。一旦我在这个服务正在运行的应用程序上启用RIA,并更新服务引用,生成的代码就会再次消失。
我记得这曾经有用,因为我的项目同时使用了RIA和外部WCF服务。这是VS2012的新东西吗?有没有办法解决这个问题?
谢谢,
的Eyal
答案 0 :(得分:7)
我可以复制问题,但只有当Silverlight客户端在其引用的程序集中具有2个System.ServiceModel.DomainServices.Client和System.ServiceModel.DomainServices.Client.Web程序集时,才会发生这种情况。并且只有它针对SL 5。
如果您的情况许可,我建议您尝试2种解决方法:
1)将Silverlight应用程序更改为目标Silverlight 4,而不是5,或 2)右键单击“服务引用”并要求配置它。 单击“在指定的引用程序集中重用类型”复选框 并选择除上述2之外的所有装配。
这似乎是与SL 5或VS2012相关的错误。如果我找到一个更令人满意的答案,我会转发。
答案 1 :(得分:1)
问题是因为Silverlight 5和vs 2012有一些bug。 [它可以通过重新启动vs2012来解决]
如果你看看你的ServiceRefrences.ClientConfig会看到它是空的。您需要在此手动输入服务参考。我附上了我的配置页面的示例,您需要相应地更改名称
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService2" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="../Service2.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService2" contract="ServiceReference1.IService2"
name="BasicHttpBinding_IService2" />
</client>
</system.serviceModel>