Cappuccino Javascript Framework – Part 2

Consuming .NET JSON WebService – Part 2

The Cappuccino Code

On this post I’ll show you HOW-TO develop and consuming JSON Web Services using the Cappuccino Javascript Framework and .Net 2.0 Framework.

On this step let’s build the Cappuccino RIA Application that will consume the .Net Web Service.

Notes: About the “.d”.

Ok, let’s start writing the Cappuccino code:

//
//  AppController.h
//  «PROJECTNAME»
//
//  Created by «FULLUSERNAME» on «DATE».
//  Copyright «ORGANIZATIONNAME» «YEAR». All rights reserved.
//

@import <Foundation/CPObject.j>
@import <AppKit/CPCib.j>

@import <Foundation/CPURLRequest.j>
@import <Foundation/CPJSONPConnection.j>

@import <AppKit/CPToolbar.j>
@import <AppKit/CPToolbarItem.j>
@import <AppKit/CPCollectionView.j>

@implementation AppController : CPObject
{
	// Main Window
    CPWindow			theWindow;

	/**
	 * URLConnection - Used to consume WebServices 
	 */
    CPURLConnection		urlConnection;
}

- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
    var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask],
        contentView = [theWindow contentView];

    var label = [[CPTextField alloc] initWithFrame:CGRectMakeZero()];

    [label setStringValue:@"Hello World!"];
    [label setFont:[CPFont boldSystemFontOfSize:24.0]];

    [label sizeToFit];

    [label setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin];
    [label setFrameOrigin:CGPointMake((CGRectGetWidth([contentView bounds]) - CGRectGetWidth([label frame])) / 2.0, (CGRectGetHeight([contentView bounds]) - CGRectGetHeight([label frame])) / 2.0)];

    [contentView addSubview:label];

    [theWindow orderFront:self];

    /// Uncomment the following line to turn on the standard menu bar.
    //[CPMenu setMenuBarVisible:YES];
    
	/**
	 * Using the CPURLConnection to consume JSON .NET WebServices
	 */
    var request = [CPURLRequest requestWithURL:"http://localhost:8081/Services/XmlJson.asmx/ListJSON"];
	[request setHTTPMethod: "POST"]; 
    [request setValue:"application/json; charset=utf-8" forHTTPHeaderField:"Content-Type"]; 
	urlConnection = [CPURLConnection connectionWithRequest:request delegate:self];

}

/**
 * CPURLConnection Delegate Methods
 */

/**
 * this method is the responsavel to treat the received data, is on this method that you have to manipulate your data.
 */
- (void)connection:(CPURLConnection)aConnection didReceiveData:(CPString)data
{
	/// Convert the recived JSON data to Cappuccino Object
	var _data = CPJSObjectCreateWithJSON(data);

	/// the ".d" in .Net 2.0 or 3.5 JSON WebServices is implemented because of security measures.
	_data = eval(_data.d);
	
	alert("data = " + _data);
	alert("_data[0].firstName = " + _data[0].firstName);

}

/**
 * If you have any type of error during the connection process, this is the method responsible to notify you about the error.
 */
- (void)connection:(CPURLConnection)aConnection didFailWithError:(CPError)error
{
	alert(error);
    [self connectionDidFinishLoading:aConnection];
}

/**
 * this is the method responsavel to tell you that the process of receiving data was ended, 
 * and here you can release all unnecessary variables.
 */
- (void)connectionDidFinishLoading:(CPURLConnection)aConnection
{
    if (aConnection == urlConnection)
        urlConnection = nil;
}

@end

Download the source code, with Cappuccino Framework.

Consuming .Net Web Services with Cappuccino.

Cappuccino Javascript Framework – Part 1

Consuming .NET JSON WebService – Part 1

The .NET WebService

On this post I’ll show you HOW-TO develop and consuming JSON Web Services using the Cappuccino Javascript Framework and .Net 2.0 / 3.5 Framework.

In first step, let’s build the JSON .Net WebService, using Microsoft or Mono Framework. To simplify this post I’ll not use the code behind.

Notes:
As we know, to use JSON on .NET WebServices we need to use the following assembly “Microsoft.Web.Extensions.dll”, and in the code we need to define the following namespaces: System.Web.Script.Services, System.Web.Script.Serialization.

Ok, let’s start writing the .Net JSON WebService (XmlJson.asmx) code:

<%@ WebService Language="C#" Class="Services.XmlJson" %>
using System;
using System.Globalization;
using System.Collections;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

// Script namespace from Microsoft.Web.Extensions.dll assembly
using System.Web.Script.Services;
using System.Web.Script.Serialization;

namespace Services
{

    /// <summary>
    /// Summary description for WebService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    // To allow this Web Service to be called from script, using ASP.NET AJAX. 
    [System.Web.Script.Services.ScriptService]
    public class XmlJson : System.Web.Services.WebService
    {

        private Contact _Contact;

        public XmlJson() { }

        [WebMethod]
        public string About()
        {
            return "Version 1.0";
        }

        [WebMethod]
        // ResponseFormat is JSON
        [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
        public string ListJSON()
        {
            ArrayList list = new ArrayList();
            _Contact = new Contact("First Name 1", "Last Name 1");
            list.Add(_Contact);

            _Contact = new Contact("First Name 2", "Last Name 2");
            list.Add(_Contact);

            Contact[] resultList = (Contact[]) list.ToArray(typeof(Contact));

            // JSON Response
            JavaScriptSerializer jss = new JavaScriptSerializer();
            string serializedObj = jss.Serialize(resultList);

            return serializedObj;
        }
    }

    ///
    /// our serializable contact class
    ///
    [System.Xml.Serialization.SoapType(Namespace="urn:XmlJsonContacts")]
    public class Contact
    {
        private string _firstName;
        private string _lastName;

        public Contact() {}

        public Contact(string firstName, string lastName){
            this._firstName = firstName;
            this._lastName = lastName;
        }

        public string firstName
        {
            get { return this._firstName;}
            set { this._firstName = value;}
        }

        public string lastName
        {
            get { return this._lastName;}
            set { this._lastName = value;}
        }
    }
}

Download the .Net source code.

Running ASPX Web Services on Mac OS X using Mono.

Create a Mono Develop Solution for the source code.

Welcome …

Hello and welcome to my site! I’m Paulo Silva a Business Intelligence Consultant and Mobile Developer based in Portugal, Santa Maria da Feira. This site is an exploration of my quirky thoughts and some adventures through life. I hope you enjoy it, please feel free to send your a comments.

In the past 19 years I have work as a Business Intelligence Consultant, since 2008 I’m a mobile developer as well.

 

BIStartup-Lite


What BIStartup-Lite can do for you ?

Based on a default model (Decision Support System) it can:

  • Creates the initial Data Warehouse;
  • Creates the initial OLAP Cube;
  • Creates all necessary ETL (Extract, transform and load) processes.

What you have after running the BIStartup-Lite:

  • OLAP Decision Support System (DSS), ready to explore using Microsoft Excel and Pivot Table;
  • Data Warehouse, with all the necessary data that can be explored in easy way, by using reporting tools such as Microsoft Reporting Services.

Read more …

ParentalShield


ParentalShield is multithreading and multiuser parental control system, which allows you to define what can be run and when, the Web Sites that may or not be visited and the words that should be blocked in searches and url’s. As well, for how long the user can use the computer.

All the information is saved locally and encrypted (with a generated local key, that is unique by installation), for better protection of the sensitive data.

No personal data is transmitted over the internet.

Read more…


Code Metrics Results

Read more…