0

我在使用 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 并没有,Applet 仍然无法正常工作。我会将堆栈跟踪放在最后,谢谢大家的时间。

胡安·扎穆迪奥

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
4

1 回答 1

0

该异常显然是由 HTTP 405 错误引起的,因此是服务器决定不允许客户端调用该方法。如果它是一个小程序或一个独立的 Java 应用程序,应该并不重要。小程序和独立应用程序是否可能从不同的 IP 访问服务器,并且服务器被配置为允许来自独立应用程序使用的 IP 的访问,但拒绝来自小程序使用的 IP 的访问?

于 2009-11-10T01:34:17.947 回答