2010-12-15 4 views
0

J'ai écrit une application de console Java simple dans Eclipse qui fait référence à un service Web WCF écrit en C#. Hébergeant le service WCF localement sur mon PC, je suis incapable de me connecter au service en utilisant le client java.Erreur lors de la connexion de l'application Java au service Web WCF

Les étapes que j'ai pris pour créer le service WCF sont comme suit

  1. Créer une 'Service1.svc' avec le point final suivant:

    chaîne IService1.Hello (string sName) { return "Bonjour" + sName + "!" ; }

  2. La configuration web pour le service se présente comme suit:

    <system.web> 
        <compilation debug="true" targetFramework="4.0" /> 
        </system.web> 
        <system.serviceModel> 
        <bindings> 
         <basicHttpBinding> 
         <binding name="BasicHttpBinding" /> 
         </basicHttpBinding> 
        </bindings> 
        <client> 
         <endpoint binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding" 
         contract="WcfService1.IService1" name="BasicHttpEndpoint" /> 
        </client> 
        <behaviors> 
         <serviceBehaviors> 
         <behavior> 
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
          <serviceMetadata httpGetEnabled="true"/> 
          <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
          <serviceDebug includeExceptionDetailInFaults="false"/> 
         </behavior> 
         </serviceBehaviors> 
        </behaviors> 
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
        </system.serviceModel> 
    <system.webServer> 
        <modules runAllManagedModulesForAllRequests="true"/> 
    


  3. J'ai modifié les propriétés de sorte que le service utilisera toujours le port 8888.

  4. J'ai testé le service nous dans une application de console C#.

Pour créer le client Java, je l'ai fait ce qui suit:

  1. Téléchargez et installez Glassfish 3.0.1 (serveur d'applications) qui sont livrés avec Metro (Web Server)

  2. Utilisez l'outil 'wsimport' dans le répertoire 'bin' de mon jdk pour générer le code de référence du service pour l'application cliente java. Le fichier .bat que j'ai exécuté pour créer la référence de service

  3. Copiez le code de l'étape 2 ci-dessus dans une nouvelle application Java dans Eclipse.

  4. Créer une nouvelle classe Java dans mon application console qui appelle le service Web comme suit

`

import java.net.MalformedURLException; 

import java.net.URL; 

import javax.xml.namespace.QName; 

import javax.xml.ws.BindingProvider; 

import org.tempuri.Service1; 

import org.tempuri.IService1; 


public class Main { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    try { 
     Service1 service = new Service1(new URL("http://localhost:8888/Service1.svc?wsdl"), new QName("http://tempuri.org", "Service1")); 
     IService1 port = service.getBasicHttpBindingIService1(); 
     ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8888/Service1.svc"); 
     String sFileName = port.hello("Cal"); 

     System.out.println(sFileName);  


    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

     e.printStackTrace(); 
    } 
} 
} 

`

L'erreur que je reçois lorsque je tente pour exécuter ma demande est la suivante:

Exception in thread "main" javax.xml.ws.WebServiceException: {http://tempuri.org}Service1 is not a valid service. Valid services are: {http://tempuri.org/}Service1 
    at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:237) 
    at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:182) 
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:106) 
    at javax.xml.ws.Service.(Unknown Source) 
    at org.tempuri.Service1.(Service1.java:42) 
    at Main.main(Main.java:17) 

Toute aide avec ceci est appréciée. Merci.

+1

Est-ce que ce sera juste que l'un a/après la définition de l'espace de noms et l'autre non? Essayez d'ajouter un/dans le nom de client Java. – Wysawyg

Répondre

1

changement:

new QName("http://tempuri.org", "Service1") 

à:

new QName("http://tempuri.org/", "Service1") 

avis extra "/" après org.

Questions connexes