[Rets-dev] Connect to RETS with ASP.NET 2.0

Libor Viktorin lviktorin at marketlinx.com
Fri Aug 24 08:54:31 CDT 2007


Ralph,

 

Yes, the .NET 2.0 does the authentication for you. Once you specify your
credentials, the HttpWebRequest handles the full handshake.

In subsequent steps, make sure you handle cookies correctly. Read about
the HttpWebRequest.CookieContainer.

 

Good luck,

 

Libor

 

________________________________

From: rets-dev-bounces at rets.org [mailto:rets-dev-bounces at rets.org] On
Behalf Of Ralph Paonessa
Sent: Thursday, August 23, 2007 6:04 PM
To: rets-dev at rets.org
Subject: [Rets-dev] Connect to RETS with ASP.NET 2.0

 

I am attempting to create a website to connect to Rapattoni RETS using
ASP.NET 2.0. I was previously able to do this using ASP, where I used
Msxml2.ServerXMLHTTP and the process was:

 

1. Connect to server, receive "401 Unauthorized" along with
WWW-Authenticate header.

2. Extract info from this header (nonce, opaque, etc.) to create an
Authorization header.

3. Connect again with Authorization header added, receive "200 OK" and
RETS-Session-ID.

4. Make subsequent queries by passing the RETS-Session-ID to RETS.

 

(I'm by no means expert at this, so it took a lot of stumbling around to
make this work, but it did.)

 

Under ASP.NET 2.0, the appropriate Class seemed to be HttpWebRequest, so
I've been trying to adapt my ASP code. I've gotten to the point where
RETS sends me the cookie, but I'm not sure I've actually logged in
correctly.

 

My confusion stems partly from the fact that I'd assumed I would have to
recreate the same code for Digest Authentication I wrote for ASP, where
I received a WWW-Authenticate header, extracted nonce and opaque, did
some MD5 hashing, sent it all back, and finally received the
RETS-Session-ID.

 

Instead, I've "discovered" an authentication scheme is ASP.NET 2.0 where
I specify "Digest" authentication along with my RETS Username and
Password, and ASP.NET seems to do the rest. Here's what I get back from
RETS after my first attempt to login:

 

RESPONSE HEADERS:

 

RETS-Version: RETS/1.5

Transfer-Encoding: chunked

Cache-Control: private

Content-Type: text/xml; charset=utf-8

Date: Thu, 23 Aug 2007 20:59:02 GMT

Set-Cookie: RETS-Session-ID=xxxxxxxxxxxxxxxx805bdf225cfea145; path=/

Server: Microsoft-IIS/6.0

X-AspNet-Version: 1.1.4322

X-Powered-By: ASP.NET (06)

 

RESPONSE TEXT:

 

<RETS ReplyCode="0" ReplyText="Operation successful." >

<RETS-RESPONSE>

MemberName=First  Last

User=123456,NULL,NULL,44

Broker=99

MetadataVersion=01.50.11651

MinMetadataVersion=01.50.11651

TimeoutSeconds=1800

GetObject=/ridgecrest/RAAR/getobject.aspx

Login=/ridgecrest/RAAR/login.aspx

Logout=/ridgecrest/RAAR/logout.aspx

Search=/ridgecrest/RAAR/search.aspx

GetMetadata=/ridgecrest/RAAR/getmetadata.aspx

</RETS-RESPONSE>

</RETS>

 

But now I'm totally confused! DID I ACTUALLY LOG IN TO RETS, with
ASP.NET magically handling all that finicky Digest Authentication and
MD5'ing for me?? That would be slick.

 

Does the fact that I've received a RETS-Session-ID mean that I've
actually logged in? I haven't yet succeeded in getting any further with
this RETS-Session-ID (but that may be because of bugs in my subsequent
steps). I'm surprised by the fact that I got this far without ever
seeing the WWW-Authenticate header, but maybe it's "easier" in ASP.NET
2.0 ...

 

Here's some of the code I used (ASP.NET 2.0 Visual Basic)

 

------------------------------------------------------------------------
-------

 

Imports Rets_Constants

Imports Rets_Functions

Imports System.Net

Imports System.IO

 

Dim strUri = "http://" & Rets_Server & ":" & Rets_Port & Rets_LoginURI

Dim myUri As New Uri(strUri)

UriLabel.Text = myUri.ToString()

 

' ---Connect to RETS using HttpWebRequest from System.Net Class

 

Dim myRequest As HttpWebRequest = WebRequest.Create(myUri)

 

' ---Add request headers

 

With myRequest

    .Accept = "*/*"

    .UserAgent = Rets_UserAgent

    .Headers.Add("RETS-Version", Rets_Version)

    .ProtocolVersion = HttpVersion.Version11

End With

 

' Use ASP.NET Network Credentials to specify "Digest" authentication and
send Username and Password (not sure how this works!)

 

myCache.Add(New Uri(strUri), "Digest", New
NetworkCredential(Rets_Username, Rets_Password))

myRequest.Credentials = myCache

 

Dim myResponse As HttpWebResponse = myRequest.GetResponse()

 

' ---The RESPONSE TEXT shown above comes from results...

 

Dim sr As New StreamReader(myResponse.GetResponseStream())

Dim results As String = sr.ReadToEnd()

    

' ---The RESPONSE HEADERS shown above come from ResponseHeaderLabel.Text
...

 

Dim i As Integer = 0

    ResponseHeaderLabel.Text = ""

    While i < myResponse.Headers.Count

        ResponseHeaderLabel.Text &= myResponse.Headers.Keys(i) & ": " &
myResponse.Headers(i) & "<br />"

        i = i + 1

    End While

 

' ---Save the RETS-Session-ID as a session variable...

 

Session("RetsSessionID") =
StringExtract(myResponse.GetResponseHeader("Set-Cookie"),
"RETS-Session-ID=", 32)

 

------------------------------------------------------------------------
-------

 

I will be extremely grateful to anyone with insights into this!

 

Ralph Paonessa

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.rets.org/pipermail/rets-dev/attachments/20070824/d8b2365c/attachment.html


More information about the Rets-dev mailing list