The Source for Java Technology Collaboration
User: Password:
Register | Login help    

Search

Online Books:
java.net on MarkMail:


GlassFish and Vista - Interoperable out-of-the-box

Posted by arungupta on February 13, 2007 at 7:39 AM PST
GlassFish v2 M4 and Windows Vista were released two weeks ago. I installed GlassFish M4 on my machine and Vista Enterprise on a different machine. In this blog, I explain the steps followed to invoke a Web service deployed on GlassFish by Vista client and vice versa.

First, lets deploy a service on GlassFish and invoke it using a client on Vista.

  1. Using screencast WS#1, I developed a trivial Web service using NetBeans IDE and deployed on GlassFish.
  2. On Vista machine, I generated the client-side artifacts using the command:

    svcutil /config:Client.exe.config http://129.145.133.129:8080/WebApplication11/NewWebServiceService?wsdl
  3. Then I coded the client code to invoke the service endpoint as:

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace ConsoleApplication1
    {
       class Program
       {
           static void Main(string[] args)
           {
               NewWebServiceClient client = new NewWebServiceClient();
               string response = client.sayHello("Duke");
               Console.WriteLine("Response from WSIT endpoint: " + response);
           }
       }
    }
  4. Next step is to compile the client code using the command:

    csc.exe /r:"C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\System.ServiceModel.dll"
            /r:"C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dll"
            Client.cs AddNumbersImplService.cs


    I wonder if there is a way by which csc.exe compiler can be made smarter to recognize WCF assemblies by default. But for now, I need to explicitly specify the assemblies during compilation otherwise the compiler throws bunch of errors like:

    NewWebServiceService.cs(100,63): error CS0234: The type or namespace name 'ServiceModel' does not exist in the namespace 'System' (are you missing an assembly reference?)
  5. After a successful compilation, invoking the client shows the result:

    Response from WSIT endpoint: Hello Duke

Now let's deploy a similar Web service on Vista and invoke it using GlassFish.

  1. There are multiple ways a WCF Web service can be created from scratch but I find the following steps easiest. Create  service endpoint service.svc as:

    <%@ServiceHost language=c# Debug="true" Service="WCFEndpoint.Hello" %>

    using System.ServiceModel;

    namespace WCFEndpoint
    {
       [ServiceContract]
       public interface IHello
       {
           [OperationContract]
           string sayHello(string name);
       }

       public class Hello : IHello
       {
           public string sayHello(string name)
           {
               return "Hello " + name;
           }
       }
    }
  2. In the same directory create Web.config as:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
       <system.serviceModel>
           <behaviors>
               <serviceBehaviors>
                   <behavior name="MetadataBehavior">
                        <serviceMetadata httpGetEnabled="true" />
                   </behavior>
               </serviceBehaviors>
           </behaviors>
           <services>
               <service behaviorConfiguration="MetadataBehavior" name="WCFEndpoint.Hello">
                   <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
                       name="Hello" contract="WCFEndpoint.IHello" />
               </service>
           </services>
       </system.serviceModel>
    </configuration>
  3. I installed IIS after installing Vista so WCF extensions need to be explicitly registered as shown here.
  4. Create a virtual directory, say wsit, in IIS mapping to the directory where service.svc and Web.config are present. You should now see the default WCF/IIS page as shown here. The service endpoint now should be hosted at http://localhost/wsit/service.svc.
  5. Using screencast #WS2, create a JAX-WS client to invoke the Web service.

This is an example of a trivial interoperable Web service between GlassFish M4 and Vista but the key fact is that, as a developer, this is provided as out-of-the-box experience. No extra tweaks or no special configurations required.

I plan to build upon this Web service by adding enterprise Web services features such as Reliable Messaging, Security etc. and show how WSIT enables interoperability with WCF.

Technorati: WSIT Web Services Interoperability GlassFish Vista

Related Topics >> Java Web Services and XML      
Comments
Comments are listed in date ascending order (oldest first)