Исключить услуги по генерации клиентского кода RIA Services - PullRequest
2 голосов
/ 18 марта 2011

У меня есть приложение Silverlight 4, использующее RIA Services 1.0 SP1.

В веб-приложении, в котором размещено приложение Silverlight, у меня есть несколько служб RIA и чистый сервис WCF, предназначенный для других потребителей (не приложение Silverlight).

Службы RIA пытаются (и не могут) сгенерировать прокси-код клиента в приложении Silverlight для вызова службы WCF. Мне не нужно вызывать этот сервис из Silverlight.

Как я могу запретить RIA Services генерировать код клиента для этой службы?
Есть ли у меня атрибут, который я могу использовать, чтобы игнорировать этот сервис?

EDIT
Я предполагал, что это будет RIA Services, пытающаяся сгенерировать прокси, но я не уверен. Вот больше информации:

У меня есть следующее предупреждение компиляции:

Сбой создания клиентского прокси для службы 'MyNamespace.MyWcfService': Ошибка: конечная точка 'WSHttpBinding_SurveyCentreWcfService' по адресу 'http://localhost/Service' не совместима с Silverlight 4. Пропуск ...

Я не добавил вручную ссылку на службу в приложении Silverlight, но ссылка на службы WCF RIA установлена ​​в свойствах проекта.

Мой класс обслуживания выглядит так:

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

Ответы [ 2 ]

0 голосов
/ 18 марта 2011

Вы можете использовать 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 голосов
/ 18 марта 2011

Риа, насколько я знал, генерировал код только из классов DomainService.Ваша служба WCF наследует от DomainService?

Похоже, это может быть генератор прокси-кода на стороне silverlight.Службы RIA не требуют веб-ссылки.Если у вас есть веб-ссылка в проекте silverlight, удалите ее.

Кроме того, в файле build.log вы можете увидеть, какие инструменты генерации прокси смотрят на какие файлы.Это немного сложно расшифровать, но это может помочь с вашей проблемой.

Очень маловероятно, но убедитесь, что никакие пользовательские инструменты не установлены ни для каких файлов в приложении Silverlight.

...