Как использовать WCF в приложении Silverlight - PullRequest
1 голос
/ 31 декабря 2011

Я хочу знать, как я могу использовать обычную службу WCF (без службы WCF с поддержкой Silverlight) в моем приложении Silverlight. Вот что я попробовал

  1. Я создал простой нормальный сервис WCF
  2. Я изменил привязку на basicHttpBinding в web.config файле
  3. Я поместил файлы clientaccesspolicy.xml и crossdomain.xml в папку wwwroot.

Но даже если я не могу использовать службу WCF. Я получаю это исключение

Исключение System.ServiceModel.CommunicationException не было обработано кодом пользователя
Сообщение = Произошла ошибка при попытке сделать запрос к URI http://localhost/HWT/HelloWorldService.svc'. Это может быть связано с пытаясь получить доступ к услуге междоменным способом без надлежащего междоменная политика или политика, которая не подходит для SOAP Сервисы. Вам может понадобиться связаться с владельцем сервиса, чтобы опубликовать файл междоменной политики и обеспечивает HTTP-доступ, связанный с SOAP заголовки для отправки. Эта ошибка также может быть вызвана использованием внутреннего вводит в прокси веб-службы без использования Атрибут InternalsVisibleToAttribute. Пожалуйста, смотрите внутреннее исключение для более подробной информации.
StackTrace:
в System.ServiceModel.AsyncResult.End [TAsyncResult] (результат IAsyncResult)
в System.ServiceModel.Channels.ServiceChannel.EndCall (действие String, выходы Object [], результат IAsyncResult)
at System.ServiceModel.ClientBase 1.ChannelBase 1.EndInvoke (String methodName, Object [] args, IAsyncResult result)
в ServiceRef.HelloWorldServiceClient.HelloWorldServiceClientChannel.EndGetName (IAsyncResult результат)
в ServiceRef.HelloWorldServiceClient.TestSilClient.ServiceRef.IHelloWorldService.EndGetName (результат IAsyncResult)
at TestSilClient.ServiceRef.HelloWorldServiceClient.OnEndGetName (IAsyncResult результат)
в System.ServiceModel.ClientBase`1.OnAsyncCallCompleted (IAsyncResult результат)

InnerException: System.Security.SecurityException
Message = ""
StackTrace:
в System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, состояние объекта)
в System.Net.Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult AsyncResult)
в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse (результат IAsyncResult)

InnerException: System.Security.SecurityException
Сообщение = ошибка безопасности.
StackTrace:
в System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult AsyncResult)
в System.Net.Browser.BrowserHttpWebRequest. <> c_ DisplayClass5.b _4 (Object sendState)
в System.Net.Browser.AsyncHelper. <> c_ DisplayClass4.b _1 (Object sendState)

Может кто-нибудь объяснить, как лучше всего использовать обычный сервис WCF в приложении Silverlight? Пример мне поможет.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2013

Попробуйте ослабить файл междомена (только для проверки), чтобы убедиться, что это проблема. Используйте этот код в файле crossdomain.xml и посмотрите, работает ли он:

<?xml version="1.0" ?>
<cross-domain-policy>
  <allow-access-from domain="*"/>
  <site-control permitted-cross-domain-policies="all"/>
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
0 голосов
/ 31 декабря 2011

Насколько мне известно, возможные причины вашей проблемы:

  1. неправильно созданные файлы политики
  2. неправильно размещенные файлы политики (должны быть помещены в корневую папку веб-приложения, в котором размещены ваши веб-службы, а не в папку служб, если у вас есть)

Вы можете проверить, запрашивает ли ваше приложение SL какой-либо из файлов политики, используя, например, Fiddler . Если вы видите, что файл политики загружен, но приложение не работает, возможно, причина 1. Если файлы не запрашиваются, вы, вероятно, потеряли их (как в пункте 2).

Существует возможность вообще не использовать файлы политики. Если ваши веб-службы размещены в том же веб-приложении, что и приложение Silverlight, вы можете передать относительный путь к WS в конфигурации конечной точки клиента (.ClientConfig), и файлы кросс-домена / политики не потребуются. Например, вместо address="http://localhost/Services/ExampleService.svc" используйте sth, например address="../Services/ExampleService.svc" (в зависимости от папки, в которой находится XAP-файл). Для получения дополнительной информации проверьте http://msdn.microsoft.com/en-us/library/cc197941%28v=vs.95%29.aspx.

...