2009-11-10 57 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