Click here to Skip to main content
15,885,244 members
Articles / Web Development / ASP.NET
Article

Tips to Make ASP.NET Talk to ASP, PHP, RAILS and JAVA (Part 1)

Rate me:
Please Sign up or sign in to vote.
4.56/5 (11 votes)
16 Oct 20074 min read 91K   898   43   8
Tips to integrate ASP.NET app with legacy ASP, PHP, RAILS, JAVA apps

Contents

Introduction

Screenshot - IntegrationTips0.jpg

While designing an application, the most difficult part is to integrate our application with existing applications. If we are lucky, the target application is also built on ASP.NET but most often these applications are created in different languages and make use of a different Framework. This article presents a design to solve the problem.

High Level Design

The high level design consists of an integration layer which makes the communication from ASP.NET to RAILS, PHP, ASP. This integration layer also shares the data from ASP.NET with RAILS, PHP, ASP and Java. This design can also be extended to other applications created in other languages with changes.

Image 2

Detailed Technical Design

The detailed design of the Integration Layer consists of two main sections:

  • ASPNETIntegrationServer
    • It is implemented using ASP.NET page which takes the data from an ASP.NET application and passes it to the target application by calling the respective listener as shown in the diagram
  • Listener
    • ASPListener (This block resides in ASP WebServer Box)
      • Step 1: Reads the data passed by the ASP.NET page
      • Step 2: Processes the request and custom business logic in ASP
      • Step 3: Returns the result back to ASP.NET page
    • PHPListener (This block resides in PHP WebServer Box)
      • Step 1: Reads the data passed by the ASP.NET page
      • Step 2: Processes the request and custom business logic in PHP
      • Step 3: Returns the result back to ASP.NET page
    • RailsListener (This block resides in RAILS WebServer Box)
      • Step 1: Reads the data passed by the ASP.NET page
      • Step 2: Processes the request and custom business logic in Ruby
      • Step 3: Returns the result back to ASP.NET page
    • JavaListener (This block resides in Java Tomcat WebServer Box)
      [Please note Java Listener is not implemented in tiny EAI code]
      • Step 1: Reads the data passed by the ASP.NET page
      • Step 2: Processes the request and custom business logic in Java
      • Step 3: Returns the result back to ASP.NET page

Process Flow Diagram

Image 3

Using the Code

ASPNETIntegrationServer.aspx.cs

Logic to call listener by passing value as HTTPGet and then redirect to the page:

C#
string strRequest;
strRequest = "Value to Pass";
//code to call asplistener
Response.Redirect
    (http://aspserver/PHPListener.php?aspNetPassedValueByGet= + strRequest);
//code to call phplistener
Response.Redirect
    (http://phpserver/ASPListener.asp?aspNetPassedValueByGet= + strRequest);
//code to call railslistener
Response.Redirect
    ("http://railsserver/RailsListener/integrate?aspPassedValue=
        " + strRequest);

Logic to call listener and read the value in code:

C#
public string TinyEAIPostRequest(string strURL,string strRequest)
{
    HttpWebResponse objHttpWebResponse = null;
    UTF8Encoding encoding;
    string strResponse = "";

    HttpWebRequest objHttpWebRequest;
    objHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
    objHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
    objHttpWebRequest.PreAuthenticate = true;

    objHttpWebRequest.Method = "POST";

    //Prepare the request stream
    if (strRequest != null && strRequest != string.Empty)
    {
        encoding = new UTF8Encoding();
        Stream objStream = objHttpWebRequest.GetRequestStream();
        Byte[] Buffer = encoding.GetBytes(strRequest);
        // Post the request
        objStream.Write(Buffer, 0, Buffer.Length);
        objStream.Close();
    }
    objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();
    encoding = new UTF8Encoding();
    StreamReader objStreamReader =
        new StreamReader(objHttpWebResponse.GetResponseStream(),encoding);
    strResponse = objStreamReader.ReadToEnd();
    objHttpWebResponse.Close();
    objHttpWebRequest= null;
    return strResponse;
}

PHPListener.php

<?php
#Receive ASP.NET passed values
#Data from ASP.NET can be passed as POST or GET Requests

echo 'php received :- ' . $_GET['aspNetPassedValueByGet'  ]
echo 'php received :- ' . $_POST['aspNetPassedValueByPost'  ]
#Your php logic goes here
?>

ASPListener.asp

ASP.NET
<%
'Receive ASP.NET passed values
'Data from ASP.NET can be passed as POST or GET Requests
Response.Write "asp received :- " +
    Request.QueryString("aspNetPassedValueByGet")
Response.Write "asp received :- " + Request.Form('aspNetPassedValueByPOST')
'Your asp logic goes here
%>

RailsListenerController.rb

class RailsListenerController < ApplicationController
  def integrate
    @aspValue = @params["aspPassedValue"]
  end
end

integrate.rhtml

ASP.NET
<html>
<head></head>
<body>
    ASP.NET Passed value <%=@aspValue
    %>
</body>
</html>

Test PHP Add Example Using this Design

This is a simple addition example using a PHP Listener where business logic written in PHP adds the values passed by ASP.NET and then returns the result back to the ASP.NET application. Please find below the internal steps which are performed to do this action:

  1. ASP.NET application takes input
  2. Calls TinyEAIPostRequest function passing URL and input
  3. Calls PHPListener passing values to add
  4. PHPListener receives the request
  5. Here goes our custom business logic - to make it simple, we just add the numbers
  6. PHPListener returns the result
  7. ASP.NET shows the results back to the user

PHPListener.php: Puts this File in PHP Server

HTML
<?php
    $value1 = $_POST['value1'];
    $value2 = $_POST['value2'];
    #Here goes our custom business logic
    #Just add the two numbers and return
    echo $value1 + $value2 ;
?>

TinyEAI: Host the TinyEAI on ASP.NET Server

Change the URL in ASPNETIntegrationServer.aspx.cs file to point to the above PHPListener as shown below:

C#
protected void btnTestCallandReturn_Click(object sender, EventArgs e)
{
    //As we get only one return value so we assign 
    //all the response back to txtResults
    //For complex types we can make the Listener return XML 
    //which can be loaded to XMLDOM and use it.
    txtResult.Text = TinyEAIPostRequest
        ("http://localhost:8081/phpListener.php", txtRequest.Text);
}

Testing our Example

Open the following link in the browser: http://yourASPNETServer/tinyEAI/ASPNETIntegrationServer.aspx
The following screen should be displayed:

Image 4

Testing our Example

In the ServerRequest TextBox, enter Value1=2&Value2=100Now click Test PHP Request button.
In ServerResponse TextBox you should get the added value.
The following screen should be displayed:

Image 5

Your Inputs to Improve the Design

Please give your inputs to improve this design and tips to make it more scalable and easy to implement and do share your thoughts on your integration designs.

I would just like to ask, if you liked the article please vote for it, and leave some comments, as it lets me know if the article was at the right level or not, and whether it contained what people need to know.

Conclusion

A very simplistic approach to integrate ASP.NET with PHP, RAILS, ASP and Java platforms/language.

History

  • v1.0 11/08/07: Initial issue

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 5 Pin
SagarpPanchal.ce16-Jun-13 23:42
SagarpPanchal.ce16-Jun-13 23:42 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey22-Jan-12 19:15
professionalManoj Kumar Choubey22-Jan-12 19:15 
GeneralMy vote of 4 Pin
somukarthi11-Jan-12 18:46
somukarthi11-Jan-12 18:46 
GeneralError : The underlying connection was closed: An unexpected error occurred on a receive. Pin
gs_dhaliwal21-Dec-09 14:42
gs_dhaliwal21-Dec-09 14:42 
GeneralRe: Error : The underlying connection was closed: An unexpected error occurred on a receive. Pin
Vijayaraghavan Iyengar27-Dec-09 19:26
Vijayaraghavan Iyengar27-Dec-09 19:26 
GeneralRe: Error : The underlying connection was closed: An unexpected error occurred on a receive. Pin
Anil From Bhilai, Chhattishgarh19-Nov-10 20:57
Anil From Bhilai, Chhattishgarh19-Nov-10 20:57 
me too have same problem
QuestionThe advantage of an integration layer? Pin
deostroll11-Aug-08 23:37
deostroll11-Aug-08 23:37 
GeneralTinyEAIPostRequest in VB.Net Pin
Pete Souza IV16-Oct-07 11:37
professionalPete Souza IV16-Oct-07 11:37 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.