SPML (язык разметки предоставления услуг) / C#.Net помогите, пожалуйста!
Извините за то, что фактически попросил помощи, но мне было поручено работать над этим и не могу найти адекватных ресурсов, чтобы помочь мне. Вот подробности:
У компании есть программное обеспечение для управления идентификацией, которое предоставляет SPML (SOAP) "ленту" изменений прав пользователей.
(Если я правильно понял) драйвер SPML отправляет запрос POST на URL-адрес моего сервера, который отправляет эти изменения
Все, что находится под этим URL, должно затем обрабатывать опубликованную информацию (XML)
Точка 3 - мой бит. Понятия не имею, что написать. ASMX? Aspx? ASHx? Commodore 64 кассета? По-видимому, драйверу SPML нужен ответ 200 - он все равно получит его, когда обработка не будет выполнена? Есть ли что-то еще, что я не получаю?
Буду очень признателен за любую помощь, указатели, советы или советы, чтобы бросить и получить новое хобби.
Благодарю.
РЕДАКТИРОВАТЬ..............
Получил простой драйвер мыла (для целей тестирования), который отправляет xml на страницу aspx, которая, в свою очередь, потребляет POST и сохраняет xml. Спасибо Дж. Бенджамину (ниже) и http://www.eggheadcafe.com/articles/20011103.asp за начало работы.
SOAP DRIVER (работает при загрузке страницы)
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(MySite.FileRoot + "testing\\testxml.xml");
HttpWebRequest req =
(HttpWebRequest)WebRequest.Create("http://localhost/mysite/testing/reader.aspx");
req.ContentType = "text/xml; charset=\"utf-8\"";
req.Method = "POST";
req.Headers.Add("SOAPAction", "\"\"");
Stream stm = req.GetRequestStream();
doc.Save(stm);
stm.Close();
WebResponse resp = req.GetResponse();
stm = resp.GetResponseStream();
StreamReader r = new StreamReader(stm);
Response.Write(r.ReadToEnd());
}
SOAP READER (читает XML, опубликованный при вызове)
protected void Page_Load(object sender, EventArgs e)
{
String Folderpath = "c:\\TestSOAP\\";
if (!Directory.Exists(Folderpath))
{
Directory.CreateDirectory(Folderpath);
}
Response.ContentType = "text/xml";
StreamReader reader = new StreamReader(Request.InputStream);
String xmlData = reader.ReadToEnd();
String FilePath = Folderpath + DateTime.Now.ToFileTimeUtc() + ".xml";
File.WriteAllText(FilePath, xmlData);
}
Следующим шагом будет попытка использовать сервис SPML (который является Java-управляемым типом Novell) - если у меня возникнут проблемы, я отправлю сюда!!
Спасибо всем..:)
1 ответ
Может быть, я неправильно понимаю, но это похоже на то, как я обращаюсь с URL в моем веб-сервисе. Мы работаем с логикой, основанной на URL, делаем логику, оборачиваем ее в XML и отвечаем объектом XML. Вот простой пример (под простым я имею в виду один из немногих, который не требует аутентификации)
Код ниже просто возвращает объект XML, содержащий AppSetting. Ответ XML также приведен ниже (с удалением некоторых идентифицирующих значений).
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "External/Application/{ApplicationGUID}/APIHost/")]
public Response GetAPIHostName(Request request, string ApplicationGUID)
{
Response response = new Response();
try
{
APIHost apiHost = new APIHost
{
APIHostname = System.Configuration.ConfigurationManager.AppSettings["PlayerAPIHostname"]
};
response.ResponseBody.APIHost = apiHost;
response.ResponseHeader.UMResponseCode = (int) UMResponseCodes.OK;
}
catch (GUIDNotFoundException guidEx)
{
response.ResponseHeader.UMResponseCode = (int)UMResponseCodes.NotFound;
response.ResponseHeader.UMResponseCodeDetail = guidEx.Message;
}
catch (Exception ex)
{
UMMessageManager.SetExceptionDetails(request, response, ex);
if (request != null)
Logger.Log(HttpContext.Current, request.ToString(), ex);
else
Logger.Log(HttpContext.Current, "No Request!", ex);
}
response.ResponseHeader.HTTPResponseCode = HttpContext.Current.Response.StatusCode;
return response;
}
/ "xmlns: xsd =" http://www.w3.org/2001/XMLSchema "xmlns: xsi =" http://www.w3.org/2001/XMLSchema-instance "> 200 200 localhost