J'ai un problème avec un service WCF et un client Java, je vais essayer de donner autant d'informations que possible, merci pour votre temps. Le point final du serveur est BasicHttpBinding, j'ai essayé d'héberger le serveur en tant que service Windows et dans IIS mais rien n'a changé. La chose étrange est que le client fonctionne très bien si j'utilise une classe simple, au moment où je passe la classe à un JApplet, je reçois le problème mentionné. J'utilise Eclipse comme un IDE, j'ai essayé Axis et Metro pour générer le talon avec les mêmes mauvais résultats.Service WCF, client Java JApplet, erreur de transport 405
Voici un exemple de la classe Java où tout fonctionne
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;
}
}
Voici l'exemple du JApplet où je reçois l'erreur:
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;
}
}
Au moment où les charges Applet I obtenir l'erreur, est exactement le même appel, donc je ne comprends pas pourquoi je reçois l'exception en utilisant l'applet. J'ai également essayé de l'appeler depuis un client Silverlight et je recevais une exception de sécurité, c'est là que j'ai découvert clientaccesspolicy.xml et crossdomain.xml, j'ai ajouté clientaccesspolicy.xml au service et le client Silverlight fonctionne très bien, donc je décidé d'essayer crossdomain.xml et rien, l'applet ne fonctionne toujours pas. Je vais mettre la trace de la pile à la fin, merci à tous pour votre temps.
Juan Zamudio
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
maintenant tous les clients (autonomes et applet) ont la même adresse IP, c'est-à-dire ma machine de débogage, c'est pourquoi est si étrange pour moi. –
L'applet utilise peut-être la configuration proxy du navigateur pour que le serveur voie un autre client. Peut-être (le plus probable), vous trouverez une explication détaillée dans les journaux du serveur pourquoi la demande est refusée. Peut-être que les rayons cosmiques changent les bits dans le registre CPU du serveur, de sorte que la requête échoue. Il est impossible pour quelqu'un de deviner quel est votre problème, si vous ne fournissez aucune information détaillée. – jarnbjo
vous n'avez pas demandé plus d'informations, mais merci quand même, ses trucs comme ça sont à l'écart de ce genre de sites. (en passant, une erreur 405 n'a rien à voir avec la sécurité), –