powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SilverLight: cross-domain - помогите !!!!
26 сообщений из 26, показаны все 2 страниц
SilverLight: cross-domain - помогите !!!!
    #35766607
SLHelpMe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Долго гуглил эту тему, но не поборол.

При доступе 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
SilverLight: cross-domain - помогите !!!!
    #35767522
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как файла clientaccesspolicy.xml (в корне проекта с сервисами) достаточно (если все запускается из-под VS)... посмотрел как у меня при хостинге под IIS - оказалось этот файл лежит еще в одном месте - в wwwroot
Еще помню, я так и не поборол этой ошибки когда пытался из SL коннектиться напрямую к WCF (не под IIS), т.е. тоже с большой радостью узнал бы как это сделать.
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35768969
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
SilverLight: cross-domain - помогите !!!!
    #35769755
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,
большое спасибо!
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35771522
RuBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Очень интересует та же проблема, но не могу разобраться как использовать этот код в двух словах, не могу разобраться)
Это код вебсервиса? Если да, то обязательно ли использовать WCF? что-то не разберусь...
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35772035
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuBoris,
это код WCF-сервиса (отдельно стоящего), которому добавлено некое "квази-веб" поведение (WebHttpBehavior, WebGetAttribute).
Но решение проблемы не в WCF а в clientaccesspolicy.xml, вернее - в том как его правильно "приготовить", чтобы SL смог его "увидеть" http://msdn.microsoft.com/nl-nl/library/cc645032(en-us,VS.95).aspx .
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35773277
RuBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно примерчик файла самый простой))
как разрешить доступ к вэбслужбе отовсюду без всяких запретов?
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35773349
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SilverLight: cross-domain - помогите !!!!
    #35773586
RuBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сэнкс за ответ, но именно такой файл у меня и лежит в корневом каталоге вэбслужбы, а такая ошибка все равно есть.
Пробую запускать вэбслужбу на ASP.NET Development Server, при этом из обычного консольного приложения методы вэбслужбы вызываются нормально, а при вызове из SL хоть убей ошибка.
Что это может быть такое?
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35773824
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Что это может быть такое?
ну х.з., попробуйте отладить "по науке":
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
SilverLight: cross-domain - помогите !!!!
    #35773967
RuBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно попросить одну нескромную вещь?))
можете выложить самый простой вариант вэбслужбы (.NET 2.0), правильно сконфигурированный для использования в SL
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35774124
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
RuBorisно именно такой файл у меня и лежит в корневом каталоге вэбслужбы
замечательно. а теперь переложи его туда, где он должен лежать.
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35774144
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый простой, проект VS2008 (нужно откомпилировать, а то здесь лимит на аттачи - 100кб)
Возникает cross-domain-проблема и clientaccesspolicy.xml (в папке WebSvc) успешно ее решает...
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35779463
RuBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, спасибо большое LR
Если SL проект и проект вэбслужбы находятся в одном солюшене, то добавление файла clientaccesspolicy.xml действительно решает проблему. А вот если вэбслужба запущена отдельно, например в другом экземпляре VS, то добавление clientaccesspolicy.xml ничего не изменяет.
Может еще что-то там сделать надо?
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35780022
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuBoris,

проверил на IIS, оказалось что clientaccesspolicy.xml нужен еще в одном месте - в корне веб-узла, wwwroot, возможно в описанном Вами случае нужно положить его в корень девелоперского движка...
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35806276
RuBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неприятная такая ситуация произошла))...что-то поменяли в настройках 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
SilverLight: cross-domain - помогите !!!!
    #35807037
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот наткнулся, в данный момент читаю (почти как Достоевского) вот этого парня . Еще ничего не проверял "на живом" (уж больно взахлеб читается), но в свете обсуждаемой проблемы отметил такой момент
"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
SilverLight: cross-domain - помогите !!!!
    #35807274
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
RuBorisа вот если запустить отдельно тестовую страницу
это как, дывойным мышиным щелчком по хтмл из виндоз-експлорера? просто не делай так больше никогда и все...
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35810603
RuBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо LR хоршая ссылка, есть что почитать

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

а в чем причина такого поведения?
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #35812336
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
RuBorisа в чем причина такого поведения?
кросс-протокол вроде. говорят, это не лечится.
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #36108333
LeksUSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa, поведай в каком namespace искать метод StringToStream(string);
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #36108344
LeksUSR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виноват, нашел
...
Рейтинг: 0 / 0
SilverLight: cross-domain - помогите !!!!
    #36334461
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коллеги, какой конфиг должен быть в этом случае?
Код: 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
SilverLight: cross-domain - помогите !!!!
    #36724578
VolkXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
SilverLight: cross-domain - помогите !!!!
    #36724822
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SilverLight: cross-domain - помогите !!!!
    #36724829
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

и конечно же
Код: plaintext
1.
ca = New ServiceHost(GetType(GetCP))
 ca.Open()

app.config

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 <service behaviorConfiguration="DefaultServiceBehavior" name="OnlineRegCmd.GetCP">
                <endpoint address="" behaviorConfiguration="WebHttpBehavior"
                    binding="webHttpBinding" bindingConfiguration="" contract="OnlineRegAddon.CP">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8500" />
                    </baseAddresses>
                </host>
            </service>
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SilverLight: cross-domain - помогите !!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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