SecurityException при создании cookie в приложении Silverlight 4 - PullRequest
2 голосов
/ 02 августа 2011

У меня проблема с WebRequest в Silverlight 4. В методе ReadCallback на request.EndGetResponse(result) as HttpWebResponse;

У меня ошибка по поводу безопасности. Я не знаю, что является источником этой проблемы. Я добавил в файл проекта DownloadUpload.Web (asp.net 4) 2: clientaccesspolicy.xml и crossdomain.xml, как в этой статье:

http://msdn.microsoft.com/en-us/library/cc197955(v=vs.95).aspx и у меня все еще есть эта ошибка.

Это класс по применению Silverlight:

public class CookieSample
{
    private const string ServerPath = "http://localhost:8975/";
    private const string CookieService = "CookieService.ashx";

    public static void SendCookie()
    {
        WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

        var request = (HttpWebRequest)
            WebRequest.Create(ServerPath + CookieService);

        request.CookieContainer = new CookieContainer();

        request.CookieContainer.Add(new Uri(ServerPath),
            new Cookie("mycookie", "Hello"));
        request.BeginGetResponse(ReadCallback, request);
    }

    private static void ReadCallback(IAsyncResult result)
    {
        var request = (HttpWebRequest)result.AsyncState;
        var response = request.EndGetResponse(result)
            as HttpWebResponse;//here I get error
        var stringValue = response.Cookies["mycookie"].Value;
    }
}

Это класс в проекте DownloadUpload.Web с именем CookieService.ashx.cs

public class CookieService : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            var cookie = context.Request.Cookies["mycookie"];

            cookie.Value += " success";

            context.Response.ContentType = "text/plain";
            context.Response.Cookies.Add(cookie);
            context.Response.Write("Hello World");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

Исключение:

System.Security.SecurityException was unhandled by user code
  Message=""
  StackTrace:
       w System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
       w System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
       w DownloadUpload.Helpers.CookieSample.ReadCallback(IAsyncResult result)
       w System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClassd.<InvokeGetResponseCallback>b__b(Object state2)
       w System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
       w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       w System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
       w System.Threading.ThreadPoolWorkQueue.Dispatch()
       w System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
  InnerException: System.Security.SecurityException
       Message=Security error.
       StackTrace:
            w System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
            w System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
            w System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
       InnerException: 

Что не так с этим кодом?

Я получил его из Silverlight 4 в книге действий.

Вот пути к используемым файлам:

C: \ Users \ Damian \ Downloads \ DownloadUpload \ DownloadUpload.Web \ CookieService.ashx.cs C: \ Users \ Damian \ Downloads \ DownloadUpload \ DownloadUpload.Web \ clientaccesspolicy.xml C: \ Users \ Дамиана \ Downloads \ DownloadUpload \ DownloadUpload \ Helpers \ CookieSample.cs

1 Ответ

2 голосов
/ 10 августа 2011

Если вы использовали точную копию clientaccesspolicy.xml из здесь , вы можете разрешить все заголовки http-запроса, указав подстановочный знак.Я не думаю, что вы используете стандартный вызов действия SOAP.

  <allow-from http-request-headers="*"> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...