March
27th,
2005
My First Indigo Sample
I've been reading up and playing with the recently released Indigo bits in order to catch up, so here's my very first Indigo Sample, which a is very simple, self-hosting indigo service with the corresponding client, and uses the data contract facilities. It's worth noting that as written, the samples require no app.config file configuration, which is something I was looking into trying to understand how it all fit together. So, here's the code:
Server.cs
//
// Server.cs
//
// Author:
// Tomas Restrepo (tomasr@mvps.org)
//
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
namespace Winterdom.Samples.Indigo.FirstSample
{
[
DataContract(Name="CustomerInfo",
Namespace="urn:schemas-winterdom-com:indigo")
]
public class CustomerInfo
{
private string _name;
private DateTime _memberSince;
[ DataMember ]
public string Name {
get { return _name; }
set { _name = value; }
}
[ DataMember ]
public DateTime MemberSince {
get { return _memberSince; }
set { _memberSince = value; }
}
} // class CustomerInfo
[ ServiceContract ]
public interface ICustomerService
{
[ OperationContract ]
CustomerInfo GetCustomerInfo(int customerId);
} // interface ICustomerService
public class CustomerService : ICustomerService
{
public CustomerInfo GetCustomerInfo(int customerId)
{
CustomerInfo info = new CustomerInfo();
info.Name = "Tomas Restrepo";
info.MemberSince = DateTime.Now.AddYears(-1);
return info;
}
public static void Main()
{
try {
Uri uri = new Uri("http://localhost:8188/CustomerService");
ServiceHost host =
new ServiceHost(uri);
using ( host )
{
WSProfileBinding binding = new WSProfileBinding();
host.AddEndpoint(typeof(ICustomerService), binding);
host.Open();
Console.WriteLine("Hosting...");
Console.ReadLine();
}
} catch ( Exception e ) {
Console.WriteLine(e);
}
}
} // class CustomerService
} // namespace Winterdom.Samples.Indigo.FirstSample
Client.cs
//
// Client.cs
//
// Author:
// Tomas Restrepo (tomasr@mvps.org)
//
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
namespace Winterdom.Samples.Indigo.FirstSample
{
[
DataContract(Name="CustomerInfo",
Namespace="urn:schemas-winterdom-com:indigo")
]
public class MembershipInfo
{
private string _memberName;
private DateTime _memberSince;
[ DataMember(Name="Name") ]
public string MemberName {
get { return _memberName; }
set { _memberName = value; }
}
[ DataMember ]
public DateTime MemberSince {
get { return _memberSince; }
set { _memberSince = value; }
}
} // class MembershipInfo
[ ServiceContract ]
public interface ICustomerService
{
[ OperationContract ]
MembershipInfo GetCustomerInfo(int customerId);
} // interface ICustomerService
public class CustomerServiceProxy :
ProxyBase,
ICustomerService
{
public CustomerServiceProxy(EndpointAddress epa, Binding binding)
: base(epa, binding)
{
}
public MembershipInfo GetCustomerInfo(int customerId)
{
return base.InnerProxy.GetCustomerInfo(customerId);
}
} // class CustomerServiceProxy
public class ClientApp
{
public static void Main()
{
try {
Uri uri = new Uri("http://localhost:8188/CustomerService");
EndpointAddress epa = new EndpointAddress(uri);
WSProfileBinding binding = new WSProfileBinding();
CustomerServiceProxy proxy =
new CustomerServiceProxy(epa, binding);
MembershipInfo info = proxy.GetCustomerInfo(12);
Console.WriteLine (
"Customer '{0}' is a member since '{1}'",
info.MemberName, info.MemberSince
);
} catch ( Exception e ) {
Console.WriteLine(e);
}
}
} // class ClientApp
} // namespace Winterdom.Samples.Indigo.FirstSample