Page 1 of 1

Problem med REST-anrop från webben

Posted: Wed 29 Dec 2010, 09:34
by redina
Hej!

Jag försöker få till ett REST-anrop från en server som är på webben. Det fungerar med Android-klienten och det fungerar "lokalt" när jag använder den publika adressen.

Här är koden just nu prova lite olika.

Code: Select all

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

        request.Method = WebRequestMethods.Http.Get;

        WebProxy myProxy = new WebProxy();
        string proxyAddress = string.Format("{0}:{1}", calInfo.SwitchKingServer, calInfo.SwitchKingPort);
        Uri newUri = new Uri(proxyAddress);
        myProxy.Address = newUri;
        NetworkCredential myCred = new NetworkCredential("user", "pwd");
        myProxy.Credentials = myCred;
        request.Credentials = myProxy.Credentials;
        request.Proxy = myProxy;

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        StreamReader reader = new StreamReader(response.GetResponseStream());
        string tmp = reader.ReadToEnd();
        response.Close();
Några tips på hur jag kan göra?

Re: Problem med REST-anrop från webben

Posted: Wed 29 Dec 2010, 09:48
by Martin
Vad är det som _inte_ fungerar? :)
Är det en server på distans som ska göra ett REST-anrop hem till din server som inte når fram?

Re: Problem med REST-anrop från webben

Posted: Wed 29 Dec 2010, 10:02
by redina
Ja, precis. Får "unable to connect to remote server --> a socket operation was attempted to an unreachable host ip:8800"

Re: Problem med REST-anrop från webben

Posted: Wed 29 Dec 2010, 10:20
by Martin
Det ser rätt ut... Annat exempel som bör uppnå samma sak (går mot Switch Kings demomiljö) är:

Code: Select all

string uri = "http://www.switchking.se:8800/devices";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

request.Method = WebRequestMethods.Http.Get;
request.Credentials = new NetworkCredential("user", "pass");

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string tmp = reader.ReadToEnd();
response.Close();
Har du full kontroll över servern som anropet körs ifrån? Det kan inte vara så att man spärrar utgående trafik på port 8800?
Om du har full remote access till servern via exempelvis Remote Desktop, kan du skriva in http://www.switchking.se:8800/devices i en webbläsare och komma fram?

Re: Problem med REST-anrop från webben

Posted: Wed 29 Dec 2010, 10:30
by redina
Ja det verkar vara de utgående portarna, tänkte inte på det. Det är Binero och de har bara dessa portar: https://support.binero.se/index.php?_m= ... icleid=115

Man kan kanske använda cvs porten de använder 5999 istället.

Re: Problem med REST-anrop från webben

Posted: Wed 29 Dec 2010, 10:41
by redina
Tackar! Nu fungerar det med port 5999 istället.

Re: Problem med REST-anrop från webben

Posted: Wed 29 Dec 2010, 10:45
by Martin
Bifogar koden till det plugin som slår ihop data från två servrar och som kan användas när man kör Android-klienten.

Du kan använda denna som bas om du vill deserialisera objekten som returneras från REST-tjänsten.
Tänker exempelvis på:

Code: Select all

var ds = FromByteArrayToRESTDataSource(collectedByServer);
var data = Get(CreateUrl("datasource/" + id));

DataContractSerializer serializer = new DataContractSerializer(typeof(List<RESTDataSource>));
List<RESTDataSource> result = (List<RESTDataSource>)serializer.ReadObject(new MemoryStream(data));
...som plockar alla datakällor från REST-tjänsten och returnerar en lista med objekt som man kan jobba lite enklare med...