2010-08-24 3 views
2

Я искал этот ответ, и все, что я нашел, это link, но когда я попытался следовать учебному пособию, мне не удалось. Мне нужно подключить приложение Silverlight к базе данных, чтобы показать информацию из определенной таблицы. Поскольку я не хочу использовать тот же ORM для своей страницы и моего приложения silverlight, я создал новый проект webservice WCF и создал внутри него классы LINQ to SQL.Как подключить приложение Silverlight к службе WCF?

Я протестировал свой сервис WCF, и он отлично работает, но каким-то образом приложение Silverlight не достигает его. Я изменил файл web.config, и теперь он выглядит следующим образом.

Мой web.config

<?xml version="1.0"?> <configuration> 

    <connectionStrings> 
    <add name="bd_webportosConnectionString" connectionString="Data Source=BARNEY\DEV;Initial Catalog=bd_webportos;User ID=sa;Password=Stigeo_1_adm_1" 
     providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> 
    <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="basicHttpBindingConfig"> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Ntlm"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:7298/DataToSilverlight.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1" 
      contract="DataRetrieverReference.IService1" name="BasicHttpBinding_IService1" /> 
    </client> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information 
--> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration> 

Я не знаю, как решить эту проблему. И хотя я застрял, я старался идти вперёд, но потом я снова застрял на следующем шаге, чтобы добавить ссылку на службу в приложение silverlight. Как я пытаюсь делать то, что он говорит следующее сообщение Показано:

Был ошибку загрузки метаданных из адреса. Пожалуйста, убедитесь, что вы ввели действительный адрес .

Я протестировал сервис через тестовый клиент WCF, и это сработало, но мое приложение silverlight не достигает его. Я получаю следующее исключение:

Произошла ошибка при попытке сделать запрос на URI «http://localhost:7298/DataToSilverlight.svc». Это может быть связано с попыткой сделать доступ к службе в междоменном способе без надлежащей политики междоменного домена на месте или в политике , непригодной для SOAP-сервисов. Вы можете связаться с владельцем службы , чтобы опубликовать файл политики кросс-домена и обеспечить его возможность отправлять HTTP-заголовки, связанные с SOAP. Эта ошибка также может быть вызвана использованием внутренних типов в веб-службе прокси без использования атрибута InternalsVisibleToAttribute. Подробнее см. Внутреннее исключение для .

Можете ли вы, ребята, помочь мне решить эту большую проблему или даже показать другой способ добиться того, чего я хочу?

Я также недавно обнаружил, что мой crossdomain.xml не загружается ... но я не знаю, что это значит.

+0

Вы должны изменить заголовок на «Как подключить Silverlight к службе WCF»? так как это не имеет ничего общего с базой данных, а с клиентским сервером. –

ответ

0

В соответствии с MSDN тег <services> должен находиться в вашем теге <system.serviceModel>. Просто скопируйте весь блок там.

Редактировать: О соединении с частью базы данных.

Silverlight не может магически «запрашивать» базу данных через службу WCF, если вы не создали WCF Data Service/OData.Чтобы получить данные из базы данных для вашего клиента Silverlight прямолинейно, вам необходимо создать методы в службе WCF, которая запрашивает базу данных в соответствии с параметрами метода WCF, упаковывает ее в подходящую структуру данных (List<Customer> в пример в вашей ссылке) и возвращает результат клиенту Silverlight.

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

Похоже, что в службе WCF могут возникнуть дополнительные ошибки конфигурации, которые могут объяснить, почему ссылка на услугу не может быть добавлена. Как выглядит ваш диалог, соответствующий «Рисунок 3-13. Добавление ссылки на веб-службу»? Вы можете отредактировать свой вопрос и вставить экранную дамп.

+0

Это решает первую часть, я думаю, но вторая часть моего вопроса до сих пор остается без ответа. Я никогда раньше не работал с подобными вещами, и я немного смущен этим. Почему вы говорите, что это не имеет никакого отношения к базе данных, если это способ их увязки? –

+0

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

+0

То, что, похоже, вас смущает, - это роль WCF. WCF - это не просто интерфейс базы данных, это скорее универсальный сервис/сервер. Его можно использовать для многих вещей. Чтение данных из базы данных - это всего лишь одно из многих, что вы можете сделать с помощью службы WCF. –

0

Вы можете попробовать этот способ:

http://www.dotnetspider.com/tutorials/Silverlight-Tutorial-315.aspx

Простой и легкий.

+0

Я сделал это, но это не сработало. Мой метод, который получает информацию о базе данных, не доходит до моего обработчика. Кроме того, код немного отличается: webService.GetDataCompleted + = new EventHandler (webService_GetDataCompleted); –

+0

ради вас, надеюсь, вы не забудете добавить следующую строку ниже инициализации события: webService.GetDataASync(); – Sam

+0

Я этого не забыл. –

1

Silverlight работает в среде с песочницей. Поэтому, когда мы хотим позвонить в службу WCF из приложения silverlight, нам нужно развернуть простые политики .xml и crossdomain.xml в корневом директоре и директоре приложений IIS. если вы используете приложение silverlight из веб-сервера VS studio, а WCF размещается на внутреннем веб-сервере VS, тогда вы не столкнетесь с такой проблемой.

Смежные вопросы