我在JBoss中部署了一个简单的JAXWS Web服务。它与java客户端运行良好,但我正在尝试使用Silverlight 3.0应用程序进行连接。我已经将web服务改为使用Soap 1.1:
@BindingType(value = "http://schemas.xmlsoap.org/wsdl/soap/http")
public class UserSessionBean implements UserSessionRemote {
...
}
我在Silverlight客户端上使用BasicHttpBinding。
有两个问题:
1-当我从VisualStudio(2008和2010)连接以创建Web服务代理时,抛出以下异常,但代理生成成功。当我尝试更新现有的Web服务引用时,也会发生这种情况(但它也可以更新)。
com.sun.xml.ws.server.UnsupportedMediaException: Unsupported Content-Type: application/soap+xml; charset=utf-8 Supported ones are: [text/xml] at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:291) at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:128) at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:287) at com.sun.xml.ws.transport.http.HttpAdapter.decodePacket(HttpAdapter.java:276) at com.sun.xml.ws.transport.http.HttpAdapter.access$500(HttpAdapter.java:93) at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:432) at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244) at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135) at org.jboss.wsf.stack.metro.RequestHandlerImpl.doPost(RequestHandlerImpl.java:225) at org.jboss.wsf.stack.metro.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:82) at org.jboss.wsf.common.servlet.AbstractEndpointServlet.service(AbstractEndpointServlet.java:85) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:619)
2-当我使用代理从webservice获取一些数据时(甚至是带有基本类型的方法),我在Silverlight客户端上收到以下错误:
“尝试向URI”http://localhost:9090/admintool/UserSessionEJB“发出请求时出错。这可能是由于尝试以跨域方式访问服务而没有适当的跨域策略,或者一个不适合SOAP服务的策略。您可能需要联系该服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP头。此错误也可能是由于使用内部错误引起的Web服务代理中的类型,不使用InternalsVisibleToAttribute属性。有关更多详细信息,请参阅内部异常。“
在我的java代码上设置一个断点,我可以看到它在运行silverlight客户端时没有被击中,所以它可能是一个跨域问题,但我不知道如何处理它(我已经创建了一个crossdomain.xml文件并将其放在托管Silverlight客户端的HTML页面旁边。
我感谢任何帮助!
答案 0 :(得分:1)
您的crossdomain.xml文件必须是托管Web服务的“网站”的根目录。例如,如果您的端点地址为http://www.mywebsite:8080/webservice/myendpoint,则必须在地址http://www.mywebsite:8080/crossdomain.xml处提供您的crossdomain.xml文件 同一主机,根目录下的相同端口。 您必须参考JBoss文档,了解如何将文件放在服务器的根目录下。