Служба WCF, клиент Java JApplet, ошибка транспорта 405 - PullRequest
0 голосов
/ 10 ноября 2009

У меня проблема с сервисом WCF и клиентом Java, я постараюсь предоставить как можно больше информации, спасибо за ваше время.

Конечной точкой сервера является BasicHttpBinding, я попытался разместить сервер в качестве службы Windows и в IIS, но ничего не изменилось. Странно то, что клиент отлично работает, если я использую простой класс, в тот момент, когда я переключаю класс на JApplet, я получаю упомянутую проблему.

Я использую Eclipse в качестве IDE, я пробовал Axis и Metro для создания заглушки с такими же плохими результатами.

Вот пример класса Java, где все работает

public class TestSoaMetro {
    public String TestMethod(){
        String result = null;

        IDigitalSignatureService aa = new DigitalSignatureService().getBasicHttpBindingEndpoint();
        try {
            result = aa.getData("1", "id002962");
        } catch (IDigitalSignatureServiceGetDataArgumentExceptionFaultFaultMessage e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IDigitalSignatureServiceGetDataInvalidOperationExceptionFaultFaultMessage e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return result;
    }
}

Вот пример JApplet, где я получаю сообщение об ошибке:

public class TestSoaMetroApplet extends JApplet {
    public void init() {
        Container content = getContentPane();
        content.setBackground(Color.white);
        content.setLayout(new FlowLayout());
        String result= this.TestMethod();
        JLabel label = new JLabel(result);
        content.add(label);
    }

    public String TestMethod(){
        String result = null;
        IDigitalSignatureService aa = null;
        try {
            aa = new DigitalSignatureService().getBasicHttpBindingEndpoint();
            result= aa.getData("1", "id002962");
        } catch (IDigitalSignatureServiceGetDataArgumentExceptionFaultFaultMessage e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IDigitalSignatureServiceGetDataInvalidOperationExceptionFaultFaultMessage e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return result;
    }
}

В момент загрузки Апплета я получаю ошибку, это точно такой же вызов, поэтому я не понимаю, почему я получаю исключение при использовании Апплета. Я также пытался вызвать это из клиента Silverlight, и я получал исключение безопасности, именно здесь я узнал о clientaccesspolicy.xml и crossdomain.xml, я добавил clientaccesspolicy.xml в сервис, и клиент Silverlight прекрасно работает, решил попробовать crossdomain.xml и ничего, апплет все равно не работает. Я поставлю трассировку стека в конце, спасибо всем за ваше время.

Хуан Самудио

javax.xml.ws.WebServiceException: org.apache.axis2.AxisFault: Transport error: 405 Error: Method not allowed
at org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:175)
at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70)
at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:128)
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:559)
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:118)
at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:82)
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:317)
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:159)
at $Proxy12.getData(Unknown Source)
at TestSoaMetroApplet.TestMethod(TestSoaMetroApplet.java:28)
at TestSoaMetroApplet.init(TestSoaMetroApplet.java:19)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.axis2.AxisFault: Transport error: 405 Error: Method not allowed
at org.apache.axis2.transport.http.HTTPSender.handleResponse(HTTPSender.java:295)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:190)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:389)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:222)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:554)
... 9 more

1 Ответ

0 голосов
/ 10 ноября 2009

Исключение, очевидно, вызвано ошибкой HTTP 405, поэтому именно сервер решает, что клиенту не разрешено вызывать метод. Если это апплет или отдельное Java-приложение, это не имеет большого значения. Возможно, апплет и автономное приложение обращаются к серверу с разных IP-адресов, и сервер настроен на разрешение доступа с IP-адреса, используемого автономным приложением, но запрещает доступ с IP-адреса, используемого апплетом?

...