2009-11-10 51 views
0

我遇到了WCF服务和Java客户端的问题,我会尽可能地提供尽可能多的信息,谢谢您的时间。WCF服务,Java JApplet客户端,传输错误405

该服务器的端点是BasicHttpBinding,我试图承载服务器作为Windows服务和在IIS中,但没有任何更改。 奇怪的是,如果我使用一个简单的类,那么当我将类切换到JApplet时,客户端会很好地工作,我会遇到上述问题。

我正在使用Eclipse作为IDE,我尝试使用Axis和Metro来生成具有相同错误结果的存根。

这里是一切工作

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

的Java类的一个实例下面是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; 
    } 
} 

在当下的applet装入我得到错误,是完全相同的调用,所以我不明白为什么我使用Applet得到异常。我也尝试从Silverlight客户端调用此函数,我得到一个安全异常,这是我发现有关clientaccesspolicy.xml和crossdomain.xml的地方,我将clientaccesspolicy.xml添加到服务中,并且Silverlight Client的工作很好,所以我决定尝试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 

回答

0

该异常是明显由HTTP 405错误造成的,所以它是服务器,它决定该不允许客户端调用的方法。如果它是一个applet或一个独立的Java应用程序应该没有关系。小应用程序和独立应用程序是否可能从不同的IP访问服务器,并且服务器配置为允许从独立应用程序使用的IP进行访问,但是拒绝从小应用程序使用的IP进行访问?

+0

现在所有客户端(独立和小程序)具有相同的IP,这意味着我的调试机器,这就是为什么我这么奇怪。 – 2009-11-10 01:58:19

+0

也许applet使用浏览器的代理配置,以便服务器看到不同的客户端。也许(很可能)你会在服务器日志中找到拒绝请求的详细解释。宇宙射线可能会改变服务器CPU寄存器中的位,从而导致请求失败。如果你没有提供任何详细的信息,那么别人就不可能讨论你的问题。 – jarnbjo 2009-11-10 11:59:27

+0

你没有要求更多的信息,但无论如何,它的东西这样的东西,远离这种类型的网站。 (顺便说一句,405错误与安全无关), – 2009-11-10 17:08:09

相关问题