Я бы предпочел не вступать в споры о том, подходят ли HTTP-команды PUT и DELETE или устарели, и сосредоточиться на вопросе о том, как заставить Silverlight работать, когда «принудительно» использовать эти команды.
Я пытаюсь создать клиентское приложение Silverlight 4, которое вызывает существующую веб-службу REST, которая выполняет операции для команд PUT и DELETE. Эта услуга не изменится.
Я добавил в конструктор своего App.xaml.cs следующий оператор:
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
У службы есть файл 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>
Я использую класс WebClient для обработки запросов GET и POST. Когда я пытаюсь сделать то же самое с PUT или DELETE для команды / метода, я получаю неоднозначную «ошибку безопасности», которая побудила меня добавить приведенный выше оператор.
Я видел различные сообщения и статьи в блогах, в которых говорилось об использовании HttpWebRequest для решения этой проблемы, но я не нашел ни одной, которая на самом деле УКАЗЫВАЕТ, КАК делать эти (асинхронные) вызовы из клиента Silverlight.
Если что-то не так с приведенным выше кодом, сообщите мне. В противном случае, если вы можете показать мне или указать на пример, демонстрирующий, как можно реализовать эти запросы, я буду очень признателен за помощь.