2013-10-28 1 views
0

Задача довольно проста, подключиться к другому веб-сервису с использованием XML.
В текущей странице (классический ASP) мы используем следующий код:Как открыть XML из ссылки в бритве?

zoekpcode=UCASE(Request.Querystring("zoekpcode")) <-- postal-code 
zoeknr=Request.Querystring("zoeknr") <-- house-number 

PC=Trim(Replace(zoekpcode," ","")) 
NR=Trim(Replace(zoeknr," ","")) 

strGetAddress="https://ws1.webservices.nl/rpc/get-simplexml/addressReeksPostcodeSearch/*~*/*~*/" & PC & NR 

set xml = Server.CreateObject("Microsoft.XMLHTTP") 
xml.open "GET", strGetAddress , false 
xml.send "" 
strStatus = xml.Status 
If Len(PC)>5 and Len(NR)>0 Then 
    strRetval = Trim(xml.responseText) 
End If 

set xml = nothing 

'Do something with the result string 

Одним из возможных связей может быть: https://ws1.webservices.nl/rpc/get-simplexml/addressReeksPostcodeSearch/~/~/1097ZD49

В настоящее время я ищу способ сделать это в бритве (C#), но все, что я, кажется, чтобы быть в состоянии найти в Google, как сделать это в JavaScript
Я пробовал (большинство комбинаций) на следующих условиях:

  • бритва
  • XMLHTTP
  • ComObject
  • XML из URL
  • -javascript

Результаты были в основном о JavaScript или razorblades.
На основании другого результата (например, в поиске comobjects в бритве) кажется, что comobject недоступен в Razor.

Я нашел этот вопрос (How to use XML with WebMatrix razor (C#)) на StackOverflow, который, кажется, чтобы ответить на мой вопрос (частично), но это также возможно с переходом на внешнюю систему (упомянутый веб-службы)?

+1

Почему использовать XMLHTTP в первую очередь, а не просто HttpWebRequest? Конечно, это можно использовать во встроенном коде C# в бритве. – Ralf

+0

Причина, по которой используется XMLHTTP, для меня непонятна. Краткий поиск привел к тому, что HttpWebRequest можно использовать в бритве. Во время тестирования я обнаружил, что в результате получается строка. Знаете ли вы, можно ли использовать строку в XmlDocument, используемую в связанном вопросе? –

+0

@ Ralf Спасибо за толкание в правильном направлении. Я отправлю свой собственный код в качестве ответа (но не отметю его). Если вы хотите опубликовать свой ответ в качестве ответа, я отметю его. –

ответ

0

Я рассмотрел использование веб-сервисов на веб-страницах Razor здесь: http://www.mikesdotnetting.com/Article/209/Consuming-Feeds-And-Web-Services-In-Razor-Web-Pages.

Если ваш веб-сервис является SOAP, вам лучше всего использовать Visual Studio (бесплатные версии Express), чтобы добавить ссылку на службу, а затем работать оттуда. В противном случае вы можете использовать Linq To XML для загрузки XML непосредственно в XDocument, как в примере, ATOM в статье:

var xml = XDoxument.Load("https://ws1.webservices.nl/rpc/get-simplexml/blah/blah"); 

Затем используйте System.Xml.Linq API, чтобы запросить этот документ.

+0

Я думаю, что этот ответ отличный, потому что он намного проще и читабельнее, чем мой. Однако этот способ дает ошибку, говорящую о том, что XML недействителен. Я отмечу это как ответ для других людей. –

0

С помощью Ralf я пришел к следующему коду:

public static XmlDocument getaddress(string pcode, string number){ 
    string serverresponse = ""; 
    string getlocation = "https://ws1.webservices.nl/rpc/get-simplexml/addressReeksPostcodeSearch/*~*/*~*/" + Request.QueryString["PCODE"] + Request.QueryString["NR"]; 

    HttpWebRequest req = (HttpWebRequest) WebRequest.Create(getlocation); 
    using (var r = req.GetResponse()) { 
     using (var s = new StreamReader(r.GetResponseStream())) { 
      serverresponse = s.ReadToEnd(); 
     } 
    } 

    XmlDocument loader = new XmlDocument(); 
    loader.LoadXml(serverresponse); 
    return loader; 
} 

public static string getvalue(XmlDocument document, string node){ 
    string returnval = ""; 
    var results = document.SelectNodes(node); 
    foreach(XmlNode aNode in results){ 
     returnval = returnval + "," + aNode.InnerText; 
    } 

    return returnval.Substring(1); 
} 
Смежные вопросы