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
Erstellen folgt eine 'Service1.svc' mit dem folgenden Endpunkt:
String IService1.Hello (string sName) { Rückgabe "Hallo" + sName + "!" ; }
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"/>
ich die Eigenschaften so modifiziert, dass der Dienst immer Port verwenden 8888.
Ich habe den Service uns getestet eine C# -Konsolenanwendung.
das Java-Client zu erstellen, habe ich folgendes:
Herunterladen und Installieren von Glassfish 3.0.1 (Application Server), die mit Metro (Web-Server)
- 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
Kopieren Sie den Code aus Schritt 2. oben in eine neue Java-Anwendung in Eclipse.
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.
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