Как подключить мое приложение Silverlight к службе WCF? - PullRequest
2 голосов
/ 24 августа 2010

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

Я протестировал свой сервис 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 не загружается ... но я не знаю, что это значит.

Ответы [ 3 ]

1 голос
/ 19 августа 2011

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

0 голосов
/ 26 августа 2010

Вы можете попробовать это следующим образом:

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

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

0 голосов
/ 24 августа 2010

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

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

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

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

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

...