"SOAP и веб-сервисы XML на платформе .Net" -- это первая моя статья вышедшая в печатном издании. Чему я очень рад.
четверг, 7 февраля 2008 г.
среда, 23 января 2008 г.
OpenPGP для C# .Net (3). Удаление (добавление) ключа из хранилища
Вы уже знаете, как можно узнать какие ключи находятся в хранилище из заметки «Просмотр хранилища ключей»
Теперь рассмотрим, как можно удалить и добавить связку ключей в хранилище.
На деле, удаление и добавление связки ключей, очень похожие операции. Поэтому для краткости и упрощения кода будем удалять связку -- для добавления нам бы потребовалось в начале создать ключи.
И так, первым делом прочитаем хранилище ключей. Эта операция вам уже знакома по первым двум статьям цикла.
// путь до хранилища секретных ключей;
string path = @"secring_bak3.gpg";
// прочитаем хранилище ключей
Stream BundleStream = File.OpenRead(path);
BundleStream =
PgpUtilities.GetDecoderStream(BundleStream);
PgpSecretKeyRingBundle pgpSec =
new PgpSecretKeyRingBundle(BundleStream);
BundleStream.Close()Syhi-подсветка кода
Теперь получим связку, которую хотим удалить, для этого нужно знать уникальный идентификатор. Обычно он представляется в шестнадцатеричном формате, но здесь он должен быть в десятеричном.
// получим связку ключей по уникальному ID
long keyId = -7764185142489588446;
PgpSecretKeyRing pgpKeyRing =
pgpSec.GetSecretKeyRing(keyId);
Непосредственно удаление:
pgpSec = PgpSecretKeyRingBundle.RemoveSecretKeyRing(
pgpSec, pgpKeyRing);
/*
вот как выглядит добавление ключа
PgpSecretKeyRingBundle.AddSecretKeyRing(pgpSec, pgpKeyRing);
*/Syhi-подсветка кода
Вот и все, осталось только сохранить изменения. Для этого надо лишь передать методу Encode() объекта хранилища ключей поток и он запишет в него нужную информацию.
// Запишем хранилище ключей
Stream NewBundleStream = File.OpenWrite(@"new_secring_bak.gpg");
pgpSec.Encode(NewBundleStream);
NewBundleStream.Close();Syhi-подсветка кода
Соберем все вместе.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Org.BouncyCastle.Bcpg;
using Org.BouncyCastle.Bcpg.OpenPgp;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("**Удаление связки ключей**\n");
// путь до хранилища секретных ключей
string path = @"secring_bak3.gpg";
// прочитаем хранилище ключей
Stream BundleStream = File.OpenRead(path);
BundleStream =
PgpUtilities.GetDecoderStream(BundleStream);
PgpSecretKeyRingBundle pgpSec =
new PgpSecretKeyRingBundle(BundleStream);
BundleStream.Close();
// получим связку ключей по уникальному ID
long keyId = -7764185142489588446;
PgpSecretKeyRing pgpKeyRing =
pgpSec.GetSecretKeyRing(keyId);
// удалим связку
pgpSec =
PgpSecretKeyRingBundle.RemoveSecretKeyRing
(pgpSec, pgpKeyRing);
// Запишем хранилище ключей
Stream NewBundleStream =
File.OpenWrite(@"new_secring_bak.gpg");
pgpSec.Encode(NewBundleStream);
NewBundleStream.Close();
Console.ReadLine();
}}}Syhi-подсветка кода
вторник, 8 января 2008 г.
Клиент для web-сервиса XML на FLEX.
В данной заметке мы создадим простой web-сервис на C# .Net, а клиентом для нашего сервиса послужит FLEX приложение.
Подробное описание создания и принципов функционирования сервисов XML не входит в рамки данной статьи. Предполагается, что вы обладаете начальными знаниями:
- знаете, как создать web-сервис Hello World (такой сервис создается средой Visual Studio 2005 автоматически, стоит только выбрать File -> New -> Web Site -> ASP.NET web Service);
- на вашей машине установлен IIS (Internet Information Server) и вы знаете, как создать виртуальный каталог и разместить в нем web-сервис;
- вы обладаете навыками работы с flex.
Приступим. Наш сервис будет принимать строку с именем пользователя и «здороваться» – т.е. возвращать строку “Здравствуйте” + введенное имя.
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {}
[WebMethod]
public string HelloWorld(string name) {
return "Здравствуйте, " + name;
}
}Syhi-подсветка кода
Сервис содержит единственный метод HelloWorld(), который помечен атрибутом [WebMethod] и значит, может быть вызван удаленным приложением. Именно этот метод и будет вызывать Flex приложение.
Опубликуйте сервис по адресу http://localhost/soap1/service.asmx
Теперь создадим клиента на Flex. Нужно использовать <mx:WebService> тег.
<mx:WebService id="s"
wsdl="http://localhost/soap1/service.asmx?WSDL"
fault="ДЕЙСТВИЕ_ПРИ_ОШИБКЕ">
<mx:operation name="ИМЯ_ВЫЗЫВАЕМОГО_МЕТОДА"
resultFormat="object">
<mx:request>
<!-- Здесь необходимо указать параметры
вызываемого метода -->
</mx:request>
</mx:operation>
</mx:WebService>Syhi-подсветка кода
Лучше один раз увидеть, чем сто раз услышать:
Осталось добавить недостающие элементы: поле ввода, кнопку и лайбл для вывода результата.
<mx:TextInput id="input1" text="name"
x="10" y="10"/>
<!-- кнопка для отправки запроса -->
<mx:Button id="button" click="s.HelloWorld.send()"
x="178" y="10" label="Ok"/>
<!-- лайбл для вывода ответа сервиса -->
<mx:Label id="res" text="{s.HelloWorld.lastResult}"
x="10" y="85" width="210"/>Syhi-подсветка кода
Соберем весь код вместе:
<?xml version="1.0" encoding="utf-8"?>
<!-- пример клиента для web-сервиса XML -->
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:WebService id="s"
wsdl="http://localhost/soap1/service.asmx?WSDL"
fault="{res.text = 'ОШИБКА!'}">
<mx:operation name="HelloWorld" resultFormat="object">
<mx:request>
<name>{input1.text}</name>
</mx:request>
</mx:operation>
</mx:WebService>
<mx:TextInput x="10" y="10" id="input1"
text="name"/>
<mx:Button x="178" y="10" label="Ok" id="button"
click="s.HelloWorld.send()"/>
<mx:Label x="10" y="59" text="Ответ сервиса:"
id="label1" fontWeight="bold"/>
<mx:Label x="10" y="85" text="{s.HelloWorld.lastResult}"
width="210" id="res"/>
</mx:Application>Syhi-подсветка кода