Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Silverlight и Web Services


Автор: RuBoris 20.1.2009, 12:16
Всем добрый день!

Получаю ошибки при использоваии Web service из Silverlight.
Даже самый просто код, создаю вэб службу по умолчанию с таким методом
Код

[WebMethod]
    public string HelloWorld()
    {
        return "Hello";
    }


А в моем Silverlight проекте добавляю ссылку на эту службу и при клике на одну кнопку делаю так:
Код

 protected void Button_Click(object sender, RoutedEventArgs e)
        {
            DateTimeServiceSoapClient service = new DateTimeServiceSoapClient();
            service.HelloWorldCompleted += new EventHandler<HelloWorldCompletedEventArgs>(service_HelloWorldCompleted);
            service.HelloWorldAsync();
            
        }
        
       void service_HelloWorldCompleted(object sender, HelloWorldCompletedEventArgs e)
        {
        }


Ошибку получаю в коде, который создается автоматически (файл Reference.cs):
Код

public SilverlightApplication1.localhost.HelloWorldResponse EndHelloWorld(System.IAsyncResult result) {
                object[] _args = new object[0];
                SilverlightApplication1.localhost.HelloWorldResponse _result = ((SilverlightApplication1.localhost.HelloWorldResponse)(base.EndInvoke("HelloWorld", _args, result)));
                return _result;
            }


Код ошибки такой:
An error occurred while trying to make a request to URI 'http://localhost:1563/SimpleWebService/Service.asmx'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. Please see the inner exception for more details.

Пожалуйста, поделитесь у кого есть какие соображения.

Спасибо.

ЗЫ: Вэб служба сама по себе работает нормально, проверял из консольного приложения.

Автор: Gelis 20.1.2009, 13:53
В свойствах проекта для веб сервиса поставь порт как статический и перебилдь проект. Должно помочь. 
Если не поможет, то: http://silverlightuk.blogspot.com/2008/02/silverlight-2-and-flash-cross-domain.html

Автор: RuBoris 20.1.2009, 15:03
переход на статический порт не помог.
а вот с настройками cross-domain-policy я что-то не понял...как их использовать. Создаю в корневом каталоге вэб сервиса файл crossdomain.xml с таким содержимым

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

этого должно быть достаточно?...на стороне silverlight что-нибудь надо делать?

сейчас ошибка та же самая, что я делаю не так?

Автор: Gelis 20.1.2009, 21:22
Мне в свое время с такой же ошибкой помогла установка порта статическим :(

Автор: RuBoris 23.1.2009, 11:08
Хэлп ми плиз!!!! Нужно настроить позарез cross-domain-policy.
Всего один файл нужно настроить небольшой как я понимаю, а ничего не работает!

Автор: likegift 30.1.2009, 21:43
была такая проблема, 2 дня ковырялся. 
если все еще не работает, то могу в архивах покапаться

Автор: RuBoris 9.2.2009, 17:01
Нет, проблему я так и не решил. Но покопавшись в настройках IIS сейчас хотя бы изменилось то, что можно обращаться из SL к вэбслужбе, но только если SL проект запущен в VS, а если запустить отдельно тестовую страницу для SL объекта, то ошибка по-прежнему такая:

------------------------
System.ServiceModel.CommunicationException: An error occurred while trying to make a request to URI 'http://192.168.0.1/MyService/MyService.asmx'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. Please see the inner exception for more details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error.
at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
at System.Net.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)
--- End of inner exception stack trace ---
at System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
--- End of inner exception stack trace ---
at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
at MyComp.MyService.MyServiceSoapClient.MyServiceSoapClientChannel.EndGetDynamicParams(IAsyncResult result)
at MyComp.MyService.MyServiceSoapClient.MyComp.MyService.MyServiceSoap.EndGetDynamicParams(IAsyncResult result)
at MyComp.MyService.MyServiceSoapClient.OnEndGetDynamicParams(IAsyncResult result)
at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)
------------------------

Что могу делать не так, или делаю что не надо?

Автор: likegift 11.2.2009, 06:54
Цитата(RuBoris @ 9.2.2009,  20:01)
а если запустить отдельно тестовую страницу для SL объекта, то ошибка по-прежнему такая:


попробуй обращаться к сервису из кода сильвера вот таким образом:

Код

  Uri ser_adress = new Uri(App.Current.Host.Source, "../Service1.svc");
            ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client("BasicHttpBinding_Service1", ser_adress.AbsoluteUri);
            proxy."Твойметод"Completed += new EventHandler<"Твойпроект".ServiceReference1."Твойметод"CompletedEventArgs>(proxy_"Твойметод"Completed);
            proxy."Твойметод"Async(параметры);



а то ты когда деплоишь проект, у тебя теряется путь до сервиса, поэтому ИИС начинает гнать про кроссдомен.
и это.. используй wcf - сервис вместо web - сервиса.

Автор: RuBoris 11.2.2009, 15:07
объясните пожалуйста, что такое "BasicHttpBinding_Service1" (параметр endpointConfigurationName)

в мсдн немногосложно (((((:
The name of the endpoint in the application configuration file.

а также:
Use this constructor (ClientBase(string endpointConfigurationName,string remoteAddress)) to determine the target endpoint information from the name of the endpoint in an application configuration file (The target value is located by finding the name attribute of the client <endpoint> element) and the specified address.


Автор: likegift 11.2.2009, 20:46
ну давай по шагам. исходники примера кинул http://ifolder.ru/10509039

user posted image
открываем 8ую студию. создаем новый проект TestSilver.

user posted image
удаляем лишние файлы, а тестовую страницу переменовываем в TestPage.

user posted image
добавляем в TestSilverWeb наш новый сервис.

user posted image
обзываем его Service1.
на всякий случай компилириуем

user posted image

и добавляем в сирвилат.

user posted image
здесь жмем кнопку Discover, система находит наш единственный сервис.
мы жмем на него, обзываем, к примеру, ServiceReference и кликаем на кнопку ОК.

user posted image
далее, открываешь файл ServiceReferences.ClientConfig и правишь ссылку. красным я подчеркнул имя, которым мы назовем нашу папку на веб сервере при публикации.
ребилдим наш солюшн и публикуем

user posted image
публикуем наш проект на веб сервер и пробуем запустить отдельно наш Сервис.
пока не запустится -дальшу лезть бесполезно, потому проверяем включена ли анонимная авторизация 
на сервере для нашего веб-приложения MyServiceTest, а так же проверяем работает ли наш пул.

user posted image
если все хорошо, то появляется примерно вот такое окно, после запуска сервиса

user posted image
дальше самое приятное. если все хорошо, то запускаем нашу тестовую страницу и жмем кнопку.



Автор: RuBoris 13.2.2009, 15:06
спасибо

Автор: likegift 13.2.2009, 21:11
Цитата(RuBoris @ 13.2.2009,  18:06)
спасибо

заработало?

Автор: RuBoris 17.2.2009, 18:19
да
больше я не запускаю тестовую локальную html страницу, а запрашиваю SL объект с web-сервера)

Автор: astikk 21.2.2010, 18:39
Привет! всем, сразу прошу прощения если немножко ошибся топиком, для размещения темы

есть вопрос такого характера: я использую связку Silverlight + .RIA

есть бд на серверной стороне. для неё делаю DomainEntityModel. выбираю базу. таблицы. все как надо

далее создаю DomainEntityClass под мою модель данных.

проблема заключается в том что:

после сборки приложения
в сгеренированном классе на стороне клиента =( у меня отсутствуют методы для работы с моделью =(

что я не так сделал? smile 

Автор: Tishka88 2.10.2010, 08:28
Всем доброго дня!!!...та же самая проблема, что у ТС...как можно ее решить, если использовать все таки web service, а не WCF Service???... smile 

Автор: jonie 2.10.2010, 12:12
Снял видео (аттач есть архив 7z), не понимаю в чем проблема... кросдоменная политика нужна только если у вас сервис и силверлайт находятся в разных доменах, подробнее гуглите про "Access-Control-Allow-Origin" поле в HTTP протоколе

Автор: Tishka88 4.10.2010, 08:14
Цитата(jonie @ 2.10.2010,  12:12)
Снял видео (аттач есть архив 7z), не понимаю в чем проблема... кросдоменная политика нужна только если у вас сервис и силверлайт находятся в разных доменах, подробнее гуглите про "Access-Control-Allow-Origin" поле в HTTP протоколе

а нельзя видео вложить в другом формате,а то не установлен конвертор и нет возможности его скачать...

Автор: Tishka88 4.10.2010, 16:44
ну что не подскажет что ли никто???...уже замучался с этой херней...объясните на пальцах, как создавать Silverlight Apllication с web сервисом и его публиковать...если можно подробнее о настройках для сервиса, настройах междоменных политик...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)