Ошибка подключения Java-приложения к веб-службе WCF - PullRequest
0 голосов
/ 15 декабря 2010

Я написал простое консольное приложение Java в Eclipse, которое ссылается на веб-службу WCF, написанную на C #.Хостинг службы WCF локально на моем ПК, я не могу подключиться к сервису с помощью клиента Java.

Шаги, которые я предпринял для создания Службы WCF, следующие:

  1. Создайте 'Service1.svc' со следующей конечной точкой:

    string IService1.Hello (string sName) {return "Hello" + sName + "!";}

  2. Веб-конфигурация для службы выглядит следующим образом:

      <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. Я изменил свойства, чтобы служба всегда использовала порт 8888.

  4. Я протестировала службу с помощью консольного приложения C #.

Чтобы создать клиент Java, я сделал следующее:

  1. Загрузите и установите Glassfish 3.0.1 (сервер приложений), который поставляется в комплекте с Metro (веб-сервер)

  2. Используйте инструмент 'wsimport' в 'bin'directory моего jdk, чтобы сгенерировать код ссылки на службу для клиентского приложения java.Файл .bat, который я запустил для создания ссылки на службу

  3. Скопируйте код из шага 2. выше в новое Java-приложение в Eclipse.

  4. Создайте новый класс Java в моем консольном приложении, которое вызывает веб-службу следующим образом

`

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

`

Ошибка Iполучаю, когда я пытаюсь запустить мое приложение следующим образом:

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)
 

Любая помощь с этим приветствуется.Спасибо.

1 Ответ

1 голос
/ 15 декабря 2010

изменить:

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

на:

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

заметить дополнительные "/" после орг.

...