WCF сервис доступен из silverlight - PullRequest
2 голосов
/ 11 мая 2011

Мое приложение состоит из веб-сайта MVC3, который содержит элемент управления Silverlight.В приложении MVC3 я размещаю службу WCF.Я использую этот сервис в элементе управления silverlight для получения данных из БД.

В MVC web.config сервис определен как:

<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="OnlineCustomersTracker.Services.CustomersTrackerServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="OnlineCustomersTracker.Services.CustomersTrackerService">
    <endpoint address="" behaviorConfiguration="OnlineCustomersTracker.Services.CustomersTrackerServiceAspNetAjaxBehavior"
      binding="webHttpBinding" contract="OnlineCustomersTracker.Services.CustomersTrackerService" />
  </service>
</services>

Методя вызываю:

 [OperationContract]
 [WebGet(ResponseFormat = WebMessageFormat.Xml)]
 public string DoWork()
 {
    // Add your operation implementation here
    return "Work done";
 }

В Silverlight я вызываю службу:

CustomersTrackerServiceClient client = new CustomersTrackerServiceClient(new BasicHttpBinding(),
                                                                                 new EndpointAddress(
                                                                                     "http://localhost:62535/Services/CustomersTrackerService.svc"));
        client.DoWorkCompleted += new System.EventHandler<DoWorkCompletedEventArgs>(client_DoWorkCompleted);
        client.DoWorkAsync();

Когда я получаю доступ к службе из silverlight, я получаю исключение: удаленный сервер возвратил ошибку: NotFound.

Странно то, что сервис работает из веб-браузера.Я что-то не так делаю в silverlight?

application request

Я отследил звонок от firefox, и элемент управления silverlight отправляет сообщение на адрес службы: http://localhost:62535/Services/CustomersTrackerService.svc. Кажетсячто мой сервис прослушивает только запросы на получение.Можно ли разрешить отправку запроса ... или настроить службу в silverlight для отправки запросов?

Ответы [ 3 ]

1 голос
/ 11 мая 2011

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

Чтобы включить ведение журнала, вы можете добавить это в файл конфигурации службы:

<configuration>
....
<system.diagnostics>
<trace autoflush="true" />
<sources>
  <source name="System.ServiceModel" switchValue="Verbose">
    <listeners>
      <add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:\path\to\wcfLog.svcLog" />
    </listeners>
  </source>
</sources>
</system.diagnostics>
</configuration>

Другая проблема, с которой вы, вероятно, столкнетесь, - это междоменная проблема, особенно при первой попытке доступа к сайту с помощью клиента Silverlight. Вы должны добавить crossdomain.xml и clientaccesspolicy.xml в корень веб-сайта.

Это должно содержать xml, как это:

crossdomain.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <allow-http-request-headers-from domain="*" headers="*" />
 </cross-domain-policy>

ClientAccessPolicy.xml

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource include-subpaths="true" path="/"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

Клиенты Silverlight будут пытаться получить доступ к этим файлам в корне вашего сайта, поэтому вам следует обслуживать их оттуда, что должно быть просто, если это сайт ASP, размещенный в IIS. Подробная информация о MSDN .

Вы можете предоставить службу WCF для их обслуживания, если ваша служба размещена самостоятельно, но ее сложнее настроить. Некоторые подробности о самостоятельном решении

1 голос
/ 11 мая 2011

Я наконец нашел проблему. Я не правильно настроил конечные точки. На самом деле у меня была только одна конечная точка - JSON. Я нашел отличную статью для настройки сервиса с несколькими конечными точками. http://www.codemeit.com/wcf/wcf-restful-pox-json-and-soap-coexist.html

1 голос
/ 11 мая 2011

Возможно, вы еще не настроили междоменную политику доступа ...

Проверьте это, это может быть то, что вы пропустили:

http://www.codeproject.com/KB/silverlight/4StepsSilverLight.aspx

; -)

1010 * Richie *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...