Потребление услуг RIA без проекта Silverlight - PullRequest
4 голосов
/ 30 сентября 2010

У нас есть проект Silverlight, который использует сервисы RIA. Есть некоторый код, которым я хочу поделиться между этим проектом и веб-сервисом. Я должен оставить код там, где он есть сейчас, т.е. я не могу поделиться кодом.

То, что я подумал, было бы хорошо, чтобы веб-служба позвонила в службу RIA. Он будет находиться на том же сервере.

Я пошел в свой проект веб-службы и добавил ссылку на службу в службу ria. Я выбрал расширенный вариант и поставил галочку для опции «генерировать асинхронные операции».

Я думал, что все будет хорошо, но я получил несколько предупреждений. В сгенерированном клиентском коде отсутствовал какой-либо фактический код, относящийся к асинхронным вызовам, и app.config также пуст Вот предупреждения,

Warning 2   Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='CarServiceSoap']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_CarServiceSoap'] C:\Develop\DotNet\Trunk\Applications\WcfServices\CarTransmitter\CarTransmitter.Core\Service References\CarService\Reference.svcmap  1   1   CarTransmitter.Core

Warning 3   Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_CarServiceSoap']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='CarService']/wsdl:port[@name='BasicHttpBinding_CarServiceSoap']   C:\Develop\DotNet\Trunk\Applications\WcfServices\CarTransmitter\CarTransmitter.Core\Service References\CarService\Reference.svcmap  1   1   CarTransmitter.Core

Warning 1   Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Referenced type 'CarData.Organisation, CarData, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' with data contract name 'Organisation' in namespace 'http://schemas.datacontract.org/2004/07/CarData' cannot be used since it does not match imported DataContract. Need to exclude this type from referenced types.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='CarServiceSoap'] C:\Develop\DotNet\Trunk\Applications\WcfServices\CarTransmitter\CarTransmitter.Core\Service References\CarService\Reference.svcmap  1   1   CarTransmitter.Core

Ответы [ 3 ]

1 голос
/ 30 сентября 2010

Используйте опцию проекта сервисов RIA для создания вашей сервисной библиотеки.Это создает 2 проекта, которые связаны друг с другом (для генерации кода прокси-объектов).И то, и другое фактически просто libs (1 Silverlight и 1 .Net)

Свяжите любую клиентскую библиотеку служб RIA с вашим приложением Silverlight.Затем свяжите проект .web RIA с вашим веб-приложением хостинга (для стандартного использования RIA).Вы также можете добавить библиотеку .web в службу Wcf в качестве библиотеки .Net (не использовать ее в качестве службы).

Если вы не создали свой основной проект Silverlight в качестве проекта служб RIA, вам потребуетсяпереместите настройки из файла app.config в файл web.config.Если у вас уже есть настройки службы поддержки, вам нужно только скопировать строку подключения БД.Строка соединения с БД должна быть необходима только для вашего проекта Wcf.

После этого вы сможете использовать вызовы RIA на стороне сервера (не забудьте добавить свои собственные вызовы submitchanges, как это делает RIA за кулисами один раз для каждой серии обновлений), или просто использовать данныеслой (EF и т. д.) напрямую.

0 голосов
/ 24 сентября 2011

Да. Это можно сделать.

  1. Создать проект библиотеки
  2. Добавить LINQ к модели Entity
  3. Добавить открытый класс DomainService1: LinqToEntitiesDomainService
  4. Проверьте, выглядит ли ваш web.config этот

    [? Xml version = "1.0"?] [Конфигурация] [configSections] [sectionGroup name = "system.serviceModel"] [section name = "domainServices" type = "System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 31BF3856AD364E35" allowDefinition = "requireTefinition =" requireTefinition = "requireTefinition =" requireTefinition = "requireTefinition =" requireTefinition = "requireTefinition =" requireTefinition = "requireTefinition =" requireTefinition = "requireTefinition =" requireTefoition = = MachineT ложный" /] [/ SectionGroup] [/ ConfigSections]

    [system.webServer] [validation validateIntegratedModeConfiguration = "false" /] [modules runAllManagedModulesForAllRequests = "true"] [add name = "DomainServiceModule" preCondition = "managedHandler" type = "System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken /36B3538" 31B35 [/ Модули] [/System.webServer] [System.serviceModel] [DomainServices] [конечные точки] [add name = "OData" type = "System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory, System.ServiceModel.DomainServices.Hosting.OData, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35" /] [add name = "soap" type = "Microsoft.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, Microsoft.ServiceModel.DomainServices.Hosting, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35" /] [add name = "JSON" type = "Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory, Microsoft.ServiceModel.DomainServices.Hosting, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35" /] [/ Конечные точки] [/ DomainServices] [serviceHostingEnvironment aspNetCompatibilityEnabled = "true" multipleSiteBindingsEnabled = "true" /] [/system.serviceModel]

    [ConnectionStrings] [add name = "ASPNETDBEntities1" connectionString = "metadata = res: ///Model1.csdl | res: ///Model1.ssdl | res: //*/Model1.msl; provider = System. Data.SqlClient; строка подключения к провайдеру = "источник данных = localhost; начальный каталог = ASPNETDB; постоянная информация о безопасности = True; идентификатор пользователя = sa; пароль = ваш пароль; множественный_результаты = True; App = EntityFramework" "providerName =" System.Data. EntityClient "/] [/ connectionStrings] [System.web] [compilation debug = "true"] [сборки] [добавить сборку = "System.Data.Entity, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089" /] [/ сборки] [/ компиляция] [/System.web] [/ Конфигурация]

    1. Делайте WEB-публикацию локально и тестируйте сервисную ссылку. Наслаждайтесь!
0 голосов
/ 01 октября 2010

Не закончен полностью, продвинулся немного дальше. Проблемы, с которыми я сталкиваюсь, требуют нового вопроса.

Решением вышеупомянутой проблемы является снятие флажка «Повторное использование типов в ссылочных сборках». Когда вы добавляете сервисную ссылку, вы нажимаете расширенную кнопку и получаете опцию «повторное использование типов в ссылочных сборках».

Это потому, что я делюсь некоторым кодом между двумя проектами, которые я использую, и он пытался «повторно использовать» объекты, которые были на моей стороне в общем коде. Вместо этого я просто хотел, чтобы он создавал для меня прокси-объекты, а не использовал их повторно.

...