2011-03-18 51 views
2

我有一个使用RIA Services 1.0 SP1的Silverlight 4应用程序。排除RIA Services客户端代码生成服务

在承载Silverlight应用程序的Web应用程序中,我有几个RIA服务和一个纯WCF服务,用于其他客户(而不是Silverlight应用程序)。

RIA Services正在尝试(和失败)在Silverlight应用程序中生成客户端代理代码以调用WCF服务。我不需要从Silverlight调用该服务。

如何防止RIA服务为该服务生成客户端代码?
我有一个属性,我可以使用忽略该服务?

编辑
我是假设,这将是RIA服务尝试生成代理,但我不知道。下面是详细信息:

我有以下汇编警告:

客户端代理生成服务“MyNamespace.MyWcfService”失败:错误:端点地址是“WSHttpBinding_SurveyCentreWcfService”的“http://本地主机/服务”不兼容Silverlight 4.跳过...

我没有在我的Silverlight应用程序中手动添加任何服务引用,但WCF RIA服务链接在项目属性中设置。

我的服务类看起来是这样的:

[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(Namespace = "http://www.xxx.com/services/")] 
public class MyWcfService 
{ 
    ... 
} 

回答

0

RIA,据我所知,只能从的DomainService类生成的代码。您的WCF服务是否继承自DomainService?

这种类似的声音可能是silverlight方面的代理代码生成器。 RIA服务不需要Web引用。如果您在silverlight项目中有Web引用,请将其删除。

此外,您可以在build.log文件中看到哪些代理生成工具正在查看哪些文件。解密有点困难,但它可能有助于解决您的问题。

非常不可能,但请确保没有自定义工具在您的Silverlight应用程序中的任何文件上设置。

+0

无它没有。它只是一个标有'[ServiceContract]'的类,并带有匹配的'.svc'文件。 – 2011-03-18 02:33:07

+0

它上面可能有一个[EnableClientAccess]标签吗? – 2011-03-18 02:35:33

+0

Nop。用更多细节更新我的问题。 – 2011-03-18 02:53:08

0

你可以看看使用DomainServiceHostFactory来限制哪些请求可以发起什么样的服务,下面的例子:

public class RestrictedServiceHost : DomainServiceHostFactory 
{ 
    private static List<string> _allowedSchemes; 

    static RestrictedServiceHost() 
    { 
     RestrictedProtocolServiceHost._allowedSchemes = new List<string>(); 
     RestrictedProtocolServiceHost._allowedSchemes.Add(Uri.UriSchemeHttp); 
     RestrictedProtocolServiceHost._allowedSchemes.Add(Uri.UriSchemeHttps); 
    } 

    protected override ServiceHost CreateServiceHost (Type serviceType, Uri[] baseAddresses) 
    { 
     baseAddresses = baseAddresses.Where(uri => RestrictedProtocolServiceHost._allowedSchemes.Contains(uri.Scheme)).ToArray(); 
      return base.CreateServiceHost(serviceType, baseAddresses); 
    } 
} 

你那么如果用你的web.config这样的:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"> 
     <serviceActivations> 
     <add service="RIA.FooDomainService" 
      relativeAddress="Services/FooProject-FooDomainService.svc" 
      factory="YourWebProject.RestrictedProtocolServiceHost"/> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
+0

对不起,迟到的回应 - 我不确定我是否明白你的观点,我有一个编译时间代理代码生成问题,这将如何帮助? – 2011-03-28 00:53:06

相关问题