C# 在RIA服务客户端代码生成中排除服务

C# 在RIA服务客户端代码生成中排除服务,c#,.net,silverlight,wcf,wcf-ria-services,C#,.net,Silverlight,Wcf,Wcf Ria Services,我有一个使用RIA Services 1.0 SP1的Silverlight 4应用程序 在承载Silverlight应用程序的web应用程序中,我有一些RIA服务和一个纯WCF服务,这是为其他消费者提供的(不是Silverlight应用程序) RIA服务正在尝试(但失败)在Silverlight应用程序中生成客户端代理代码以调用WCF服务。我不需要从Silverlight呼叫该服务 如何防止RIA服务为该服务生成客户端代码? 我有一个属性可以用来忽略该服务吗 编辑 我假设RIA服务会尝试生成代

我有一个使用RIA Services 1.0 SP1的Silverlight 4应用程序

在承载Silverlight应用程序的web应用程序中,我有一些RIA服务和一个纯WCF服务,这是为其他消费者提供的(不是Silverlight应用程序)

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

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

编辑
我假设RIA服务会尝试生成代理,但我不确定。以下是更多信息:

我有以下警告:

为服务“MyNamespace.MyWcfService”生成客户端代理失败:错误:地址处的终结点“WSHttpBinding_SurveyCenter WCFService”http://localhost/Service'与Silverlight 4不兼容。跳过

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

我的服务类如下所示:

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

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


这听起来像是silverlight端的代理代码生成器。RIA服务不需要web引用。如果silverlight项目中有web引用,请将其删除

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


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

Ria,据我所知,仅从DomainService类生成代码。您的WCF服务是否继承自DomainService


这听起来像是silverlight端的代理代码生成器。RIA服务不需要web引用。如果silverlight项目中有web引用,请将其删除

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


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

您可以使用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 );
    }
 }
公共类受限服务主机:DomainServiceHostFactory
{
私有静态列表允许的方案;
静态受限ServiceHost()
{
RestrictedProtocolServiceHost.\u allowedSchemes=新列表();
RestrictedProtocolServiceHost.\u allowedSchemes.Add(Uri.UriSchemeHttp);
RestrictedProtocolServiceHost.\u allowedSchemes.Add(Uri.UriSchemeHttps);
}
受保护的重写ServiceHost CreateServiceHost(类型serviceType,Uri[]baseAddresses)
{
baseAddresses=baseAddresses.Where(uri=>RestrictedProtocolServiceHost.\u allowedSchemes.Contains(uri.Scheme)).ToArray();
返回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>

您可以使用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 );
    }
 }
公共类受限服务主机:DomainServiceHostFactory
{
私有静态列表允许的方案;
静态受限ServiceHost()
{
RestrictedProtocolServiceHost.\u allowedSchemes=新列表();
RestrictedProtocolServiceHost.\u allowedSchemes.Add(Uri.UriSchemeHttp);
RestrictedProtocolServiceHost.\u allowedSchemes.Add(Uri.UriSchemeHttps);
}
受保护的重写ServiceHost CreateServiceHost(类型serviceType,Uri[]baseAddresses)
{
baseAddresses=baseAddresses.Where(uri=>RestrictedProtocolServiceHost.\u allowedSchemes.Contains(uri.Scheme)).ToArray();
返回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>


没有。它只是一个标有
[ServiceContract]
的类,带有匹配的
.svc
文件。上面可能有[EnableClientAccess]标记吗?没有。更新了我的问题的更多细节。这听起来像是silverlight端的代理代码生成器。RIA服务不需要网络参考是的。。。想一想,如果你添加了一个服务参考,我会感觉到你的痛苦。除了riaNo生成的代理之外,服务引用还将生成一个代理。它只是一个标有
[ServiceContract]
的类,带有匹配的
.svc
文件。上面可能有[EnableClientAccess]标记吗?没有。更新了我的问题的更多细节。这听起来像是silverlight端的代理代码生成器。RIA服务不需要网络参考是的。。。想一想,如果你添加了一个服务参考,我会感觉到你的痛苦。服务引用将在RIA生成的代理之外生成一个代理对不起,响应太晚了-我不确定我是否明白你的意思。我在编译时遇到了一个关于代理代码生成的问题,这会有什么帮助?很抱歉响应太晚-我不确定我是否明白你的意思。我在编译时遇到了代理代码生成的问题,这会有什么帮助?