2010-12-15 18 views
0

Ich habe eine einfache Java-Konsolenanwendung in Eclipse geschrieben, die auf einen in C# geschriebenen WCF-Webdienst verweist. Wenn ich den WCF-Dienst lokal auf meinem PC hosten möchte, kann ich keine Verbindung zum Dienst mithilfe des Java-Clients herstellen.Fehler beim Verbinden der Java App mit dem WCF-Webdienst

Die Schritte, die ich getroffen habe, sind die WCF-Dienst zu erstellen, wie

  1. Erstellen folgt eine 'Service1.svc' mit dem folgenden Endpunkt:

    String IService1.Hello (string sName) { Rückgabe "Hallo" + sName + "!" ; }

  2. Die Web-Config für den Dienst ist wie folgt:

    <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. ich die Eigenschaften so modifiziert, dass der Dienst immer Port verwenden 8888.

  4. Ich habe den Service uns getestet eine C# -Konsolenanwendung.

das Java-Client zu erstellen, habe ich folgendes:

  1. Herunterladen und Installieren von Glassfish 3.0.1 (Application Server), die mit Metro (Web-Server)

  2. gebündelt kommen

    Verwenden Sie das Tool 'wsimport' im 'bin'-Verzeichnis meines jdk, um den Service-Referenzcode für die Java-Client-App zu generieren. Die .bat-Datei, die ich zum Erstellen der Service-Referenz ausgeführt habe

  3. Kopieren Sie den Code aus Schritt 2. oben in eine neue Java-Anwendung in Eclipse.

  4. Erstellen Sie eine neue Java-Klasse in meiner Konsolenanwendung, die den Web-Service-Anrufe wie folgt

`

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(); 
    } 
} 
} 

`

Der Fehler Ich erhalte, wenn ich versuche, um meine Anwendung zu starten ist wie folgt:

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) 

Jede Unterstützung mit diesem wird geschätzt. Vielen Dank.

+1

Wird es nur sein, dass man eine/nach der Namespace-Definition hat und die andere nicht? Versuchen Sie, ein/in dem Java-Client QName hinzuzufügen. – Wysawyg

Antwort

1

Änderung:

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

zu:

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

Mitteilung der extra "/" nach org.

Verwandte Themen