Как получить доступ к службе WCF RIA из службы Windows?

У меня есть работающее приложение Silverlight 4 (VS2010, SL4, WCF RIA, размещенное на моем устройстве разработки с использованием Cassini, 64-разрядная версия Windows 7). Внутри каталога ClientBin у меня есть файл .svc, описывающий мою службу:

<% @ServiceHost Service="MyApp.Services.MyService 
Factory="System.ServiceModel.DomainServices.Hosting.DomainServiceHostFactory" %>

Когда я перехожу к http://localhost:52878/ClientBin/MyApp-Services-MyService.svc вижу следующее:

Вы создали услугу. Чтобы протестировать эту службу, вам нужно будет создать клиента и использовать его для вызова службы. Это можно сделать с помощью инструмента svcutil.exe из командной строки со следующим синтаксисом: svcutil.exe http://localhost:52878/ClientBin/MyApp-Services-MyService.svc?Wsdl

Я хочу получить доступ к этой службе из приложения службы Windows. Насколько я понимаю, мне нужно включить конечные точки SOAP, чтобы это произошло. Итак, я добавляю в свой файл web.config следующее:

<domainServices>
  <endpoints>
    <add name="soap" 
        type="System.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, 
        System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, 
        Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </endpoints>
</domainServices>

Во-первых, Intellisense жалуется на наличие тега, говоря:

Элемент system.ServiceModel имеет недопустимый дочерний элемент domainServices.

Во-вторых, вышеупомянутое приложение Silverlight перестает работать, предположительно из-за того, что это изменение нарушает работу базовых веб-служб.

В-третьих, похоже, что сборка System.ServiceModel.DomainServices.Hosting на самом деле не содержит типа SoapXmlEndpointFactory; если я попытаюсь перейти к службе после добавления вышеуказанного в web.config, я вижу:

Не удалось загрузить тип System.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory из сборки System.ServiceModel.DomainServices.Hosting, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35.

Если я проверю сборку с помощью Reflector, я вижу, что она содержит типы DomainServiceEndpointFactory и PoxBinaryEndpointFactory, но не SoapXmlEndpointFactory.

Может кто-нибудь, дайте мне знать, как мне это делать? Я не могу поверить, что должно быть так сложно просто использовать службу WCF RIA в чем-то другом, кроме приложения Silverlight!


person Duncan Bayne    schedule 09.05.2010    source источник
comment
Некоторые предложения с форума SL (forum.silverlight.net/forums/p/180880 /409333.aspx), включая для параметра Copy Local значение true в сборке System.ServiceModel.DomainServices.Hosting (не работает, поскольку проблема в том, что указанный тип отсутствует в этой сборке) и обеспечение того, чтобы .NET Framework 4.0 установлен (он есть).   -  person Duncan Bayne    schedule 10.05.2010


Ответы (4)


Вы пробовали просто выполнить

svcutil.exe http://localhost:52878/ClientBin/MyApp-Services-MyService.svc?wsdl.

Или вы установили набор инструментов RIA Services? http://www.microsoft.com/downloads/details.aspx?FamilyID=7b43bab5-a8ff-40ed-9c84-11abb9cda559&displaylang=en

Требуется для конечных точек SOAP и JSON.

person Doobi    schedule 10.05.2010
comment
Я установил RIA Services Toolkit (из microsoft.com/downloads/), изменил объявление domainServices, чтобы использовать правильное пространство имен и сборку, и теперь оно работает. Спасибо! - person Duncan Bayne; 13.05.2010

Вместо ...

System.ServiceModel.DomainServices.Hosting

использовать сборку ...

Microsoft.ServiceModel.DomainServices.Hosting

из набора инструментов WCF RIA Services. Он содержит тип SoapXmlEndpointFactory.

Местоположение по умолчанию ... %Program Files%\Microsoft SDKs\RIA Services\v1.0\Toolkit\Libraries\Server

person Andrey Kunchev    schedule 25.01.2011
comment
Спасибо! Мне потребовалось время, чтобы увидеть разницу между двумя библиотеками DLL. - person Robert Kaucher; 27.08.2012

Класс SoapXmlEndpointFactory является частью

Microsoft.ServiceModel.DomainServices.Hosting

сборка, входящая в состав Silverlight Toolkit.

См. здесь

person Neil Knight    schedule 10.05.2010

<sectionGroup name="system.serviceModel">
  <section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="MachineToApplication" requirePermission="false" />
</sectionGroup>

Объявите это в ConfigSections. Важно правильно включить sectionGroup

person KroaX    schedule 11.09.2012