Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SilverLight: cross-domain - помогите !!!! / 25 сообщений из 26, страница 1 из 2
20.01.2009, 11:32
    #35766607
SLHelpMe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Долго гуглил эту тему, но не поборол.

При доступе SilverLight к WebService или WCF выпадает ошибка:

An error occurred while trying to make a request to URI 'http://localhost:1597/WebServicesApp_Web/SimpleWCF.svc'. 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.

Добавил файлы и в корень проекта SL и в корень проекта с сервисами:
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 path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

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>

Подскажите плиз, что я делаю не так ?
...
Рейтинг: 0 / 0
20.01.2009, 16:28
    #35767522
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Вроде как файла clientaccesspolicy.xml (в корне проекта с сервисами) достаточно (если все запускается из-под VS)... посмотрел как у меня при хостинге под IIS - оказалось этот файл лежит еще в одном месте - в wwwroot
Еще помню, я так и не поборол этой ошибки когда пытался из SL коннектиться напрямую к WCF (не под IIS), т.е. тоже с большой радостью узнал бы как это сделать.
...
Рейтинг: 0 / 0
21.01.2009, 11:55
    #35768969
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
public class SelfHostedServiceWithSilverlightPolicy
{
    [ServiceContract]
    public interface ITest
    {
        [OperationContract]
        string Echo(string text);
    }
    [ServiceContract]
    public interface IPolicyRetriever
    {
        [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
        Stream GetSilverlightPolicy();
        [OperationContract, WebGet(UriTemplate = "/crossdomain.xml")]
        Stream GetFlashPolicy();
    }
    public class Service : ITest, IPolicyRetriever
    {
        public string Echo(string text) { return text; }
        Stream StringToStream(string result)
        {
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
            return new MemoryStream(Encoding.UTF8.GetBytes(result));
        }
        public Stream GetSilverlightPolicy()
        {
            string result = @"<?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 path=""/"" include-subpaths=""true""/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>";
            return StringToStream(result);
        }
        public Stream GetFlashPolicy()
        {
            string result = @"<?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>";
            return StringToStream(result);
        }
    }
    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000";
        ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
        host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), "basic");
        host.AddServiceEndpoint(typeof(IPolicyRetriever), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        host.Description.Behaviors.Add(smb);
        host.Open();
        Console.WriteLine("Host opened");
        Console.Write("Press ENTER to close");
        Console.ReadLine();
        host.Close();
    }
}
...
Рейтинг: 0 / 0
21.01.2009, 15:52
    #35769755
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
SeVa,
большое спасибо!
...
Рейтинг: 0 / 0
22.01.2009, 12:15
    #35771522
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Добрый день!
Очень интересует та же проблема, но не могу разобраться как использовать этот код в двух словах, не могу разобраться)
Это код вебсервиса? Если да, то обязательно ли использовать WCF? что-то не разберусь...
...
Рейтинг: 0 / 0
22.01.2009, 15:40
    #35772035
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
RuBoris,
это код WCF-сервиса (отдельно стоящего), которому добавлено некое "квази-веб" поведение (WebHttpBehavior, WebGetAttribute).
Но решение проблемы не в WCF а в clientaccesspolicy.xml, вернее - в том как его правильно "приготовить", чтобы SL смог его "увидеть" http://msdn.microsoft.com/nl-nl/library/cc645032(en-us,VS.95).aspx .
...
Рейтинг: 0 / 0
23.01.2009, 11:14
    #35773277
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
а можно примерчик файла самый простой))
как разрешить доступ к вэбслужбе отовсюду без всяких запретов?
...
Рейтинг: 0 / 0
23.01.2009, 11:37
    #35773349
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
RuBorisа можно примерчик файла самый простой))
как разрешить доступ к вэбслужбе отовсюду без всяких запретов?
хм...

SLHelpMeclientaccesspolicy.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 path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

SeVa
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
            string result = @"<?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 path=""/"" include-subpaths=""true""/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>";
...
Рейтинг: 0 / 0
23.01.2009, 12:53
    #35773586
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Сэнкс за ответ, но именно такой файл у меня и лежит в корневом каталоге вэбслужбы, а такая ошибка все равно есть.
Пробую запускать вэбслужбу на ASP.NET Development Server, при этом из обычного консольного приложения методы вэбслужбы вызываются нормально, а при вызове из SL хоть убей ошибка.
Что это может быть такое?
...
Рейтинг: 0 / 0
23.01.2009, 13:59
    #35773824
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
> Что это может быть такое?
ну х.з., попробуйте отладить "по науке":
Debugging Services for Silverlight Applications
ms-help://MS.VSCC.v90/MS.VSIPCC.v90/MS.SilverlightSDK.v20/WCF_CONSilverLT/html/25d21ef6-7940-4966-ae6d-1363dc6a3032.htm
http://msdn.microsoft.com/en-us/library/cc197938(VS.95).aspx
...
Рейтинг: 0 / 0
23.01.2009, 14:42
    #35773967
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
а можно попросить одну нескромную вещь?))
можете выложить самый простой вариант вэбслужбы (.NET 2.0), правильно сконфигурированный для использования в SL
...
Рейтинг: 0 / 0
23.01.2009, 15:29
    #35774124
-
-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
RuBorisно именно такой файл у меня и лежит в корневом каталоге вэбслужбы
замечательно. а теперь переложи его туда, где он должен лежать.
...
Рейтинг: 0 / 0
23.01.2009, 15:34
    #35774144
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Самый простой, проект VS2008 (нужно откомпилировать, а то здесь лимит на аттачи - 100кб)
Возникает cross-domain-проблема и clientaccesspolicy.xml (в папке WebSvc) успешно ее решает...
...
Рейтинг: 0 / 0
27.01.2009, 11:36
    #35779463
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Да, спасибо большое LR
Если SL проект и проект вэбслужбы находятся в одном солюшене, то добавление файла clientaccesspolicy.xml действительно решает проблему. А вот если вэбслужба запущена отдельно, например в другом экземпляре VS, то добавление clientaccesspolicy.xml ничего не изменяет.
Может еще что-то там сделать надо?
...
Рейтинг: 0 / 0
27.01.2009, 14:16
    #35780022
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
RuBoris,

проверил на IIS, оказалось что clientaccesspolicy.xml нужен еще в одном месте - в корне веб-узла, wwwroot, возможно в описанном Вами случае нужно положить его в корень девелоперского движка...
...
Рейтинг: 0 / 0
09.02.2009, 16:51
    #35806276
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Неприятная такая ситуация произошла))...что-то поменяли в настройках IIS и SL объект стал обращаться к вэбслужбе без ошибок. Неприятность в том, что точно так и не понял в чем была причина))
Однако проблема все равно не решена, ошибки нету если 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)
------------------------

Что может быть по-прежнему не так? Файл ClientAccessPlicy.xml у меня уже где только не лежит.
...
Рейтинг: 0 / 0
10.02.2009, 00:11
    #35807037
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Вот наткнулся, в данный момент читаю (почти как Достоевского) вот этого парня . Еще ничего не проверял "на живом" (уж больно взахлеб читается), но в свете обсуждаемой проблемы отметил такой момент
"Now while this file looks all well and good, our Silverlight service call still won't work. Why in the world not? Because for WCF in Silverlight to call a service outside of the local web site, you must also specify what headers to allow. In our case, we want to allow the SOAPAction header.
...
<allow-from http-request-headers="SOAPAction">
...
Now our WCF Silverlight service will work flawlessly.
"
Прямо сейчас проверять влом...мозги работают в другом направлении...Если проверите и будет какой-то результат - отпишите, пожалуйста...
...
Рейтинг: 0 / 0
10.02.2009, 09:38
    #35807274
-
-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
RuBorisа вот если запустить отдельно тестовую страницу
это как, дывойным мышиным щелчком по хтмл из виндоз-експлорера? просто не делай так больше никогда и все...
...
Рейтинг: 0 / 0
11.02.2009, 13:19
    #35810603
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
спасибо LR хоршая ссылка, есть что почитать

-это как, дывойным мышиным щелчком по хтмл из виндоз-експлорера? просто не делай так больше никогда и все...

а в чем причина такого поведения?
...
Рейтинг: 0 / 0
12.02.2009, 06:06
    #35812336
-
-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
RuBorisа в чем причина такого поведения?
кросс-протокол вроде. говорят, это не лечится.
...
Рейтинг: 0 / 0
24.07.2009, 16:26
    #36108333
LeksUSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
SeVa, поведай в каком namespace искать метод StringToStream(string);
...
Рейтинг: 0 / 0
24.07.2009, 16:30
    #36108344
LeksUSR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Виноват, нашел
...
Рейтинг: 0 / 0
26.11.2009, 20:02
    #36334461
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
коллеги, какой конфиг должен быть в этом случае?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000";
        ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
        host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), "basic");
        host.AddServiceEndpoint(typeof(IPolicyRetriever), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        host.Description.Behaviors.Add(smb);
        host.Open();
        Console.WriteLine("Host opened");
        Console.Write("Press ENTER to close");
        Console.ReadLine();
        host.Close();
    }

у меня сервис хостится под консольным приложением и управляется конфигурационным файлом.
Я так понимаю адрес для запроса clientaccesspolicy.xml должен быть тот же, что и адрес для методов.
...
Рейтинг: 0 / 0
06.07.2010, 02:46
    #36724578
VolkXX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Winnipuh,

У меня нечто похожее. Пришлось делать так чтобы заработало :

WebSrv.RequestReceived += server_RequestReceived;
...
AddUrlHandler("/ITRS_SERVICE/clientaccesspolicy.xml", AccessHandler);
AddUrlHandler("/clientaccesspolicy.xml", AccessHandler);

А в хэндлере соответственно :

private void AccessHandler(HttpRequest request, HttpResponse response)
{
string resp = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
resp+= "<access-policy>";
resp+= "<cross-domain-access>";
resp+= "<policy>";
resp+= "<allow-from http-request-headers=\"*\" >";
resp+= "<domain uri=\"*\"/>";
resp+= "</allow-from>";
resp+= "<grant-to>";
resp+= "<resource path=\"/\" include-subpaths=\"true\"/>";
resp+= "</grant-to>";
resp+= "</policy>";
resp+= "</cross-domain-access>";
resp+= "</access-policy>";
response.WriteText(resp, false);
}

Ожило...
...
Рейтинг: 0 / 0
06.07.2010, 10:05
    #36724822
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SilverLight: cross-domain - помогите !!!!
Winnipuh,

или так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<ServiceContract()> _
Public Interface CP
    <OperationContract(), WebGet(UriTemplate:="/clientaccesspolicy.xml")> _
    Function GetCP() As Stream
End Interface

Public Class GetCP
    Implements CP

    Public Function GetCP() As System.IO.Stream Implements CP.GetCP
        'Return Assembly.GetExecutingAssembly().GetManifestResourceStream("OnlineRegCmd.ClientAccessPolicy.xml")
        Const result As String = "<?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 path=""/"" include-subpaths=""true""/>" & _
"            </grant-to>" & _
"        </policy>" & _
"    </cross-domain-access>" & _
"</access-policy>"

        If Not IsNothing(WebOperationContext.Current) Then
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml"
            Return New MemoryStream(Encoding.UTF8.GetBytes(result))
        End If
    End Function
End Class


...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SilverLight: cross-domain - помогите !!!! / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]