SPML (язык разметки предоставления услуг) / C # .Net помогите, пожалуйста! - PullRequest
2 голосов
/ 03 ноября 2010

Извините за то, что фактически просил помощи, но мне было поручено поработать над этим и не могу найти адекватных ресурсов, чтобы помочь мне. Вот подробности:

  1. Компания располагает программным обеспечением для управления идентификацией, которое предоставляет SPML (SOAP) «ленту» изменений прав пользователей

  2. (если я правильно понял) драйвер SPML отправляет запрос POST на URL-адрес моего сервера, который отправляет эти изменения

  3. Все, что находится под этим URL, должно затем обрабатывать опубликованную информацию (XML)

Точка 3 - мой бит. Понятия не имею, что написать. ASMX? Aspx? ASHx? Commodore 64 кассета? По-видимому, драйверу SPML нужен ответ 200 - он все равно получит его, когда обработка не будет выполнена? Что-нибудь еще, что я не получаю?

Буду очень признателен за любую помощь, указания, указания или советы, чтобы я бросил и получил новое хобби.

Спасибо.

EDIT ..............

Получил простой драйвер мыла (для целей тестирования), который отправляет 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 Ответ

1 голос
/ 03 ноября 2010

Может быть, я неправильно понимаю, но это похоже на то, как я обрабатываю 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

...