Класс Encoding
находится в пространстве имен System.Text
. Вы должны добавить это к «использованию».
Что касается других сообщений, то это связано с ограничениями Silverlight. Полагаю, что образцы MSDN были взяты из "большой" версии .NET Framework, не так ли?
В Silverlight, как вы видите, некоторые вещи запрещены для предотвращения нежелательного поведения приложения (например, блокировка вызовов), а некоторые вещи не поддерживаются из-за ограничения ресурсов.
В частности, ContentLength
является одним из последних. Библиотека будет определять длину контента на основе фактического объема данных, которые вы записываете в запрос. Просто удали эту строку, и все будет в порядке.
Но GetResponseStream()
на самом деле один из первых. Это связано с тем, что эта операция подразумевает фактическое открытие сетевого подключения, что может занять некоторое время. А поскольку блокирование вызовов в Silverlight не разрешено, метод GetResponseStream()
также должен использоваться.
Вместо этого вы должны использовать так называемый «асинхронный шаблон», то есть пару методов BeginGetResponseStream
/ EndGetResponseStream
. Вы делаете это, вызывая метод Begin
и предоставляя обратный вызов, который будет вызван после завершения операции. Затем внутри этого обратного вызова вы используете метод End
, чтобы получить результат операции. Вот так:
request.BeginGetRequestStream( ar =>
{
var dataStream = request.EndGetRequestStream( ar );
// Write the data to the request stream.
dataStream.Write( byteArray, 0, byteArray.Length );
// Close the Stream object.
dataStream.Close();
// and so on...
}, null );
То же самое относится и к методу GetResponse
.