我在 JBoss 中部署了一个简单的 JAXWS 网络服务。它在 Java 客户端上运行良好,但我正在尝试使用 Silverlight 3.0 应用程序进行连接。我已将网络服务更改为使用 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- 当我使用代理从 web 服务中获取一些数据时(即使是具有原始类型的方法),我在 Silverlight 客户端上收到以下错误:
“尝试向 URI 'http://localhost:9090/admintool/UserSessionEJB' 发出请求时发生错误。这可能是由于在没有适当的跨域策略或策略的情况下尝试以跨域方式访问服务这不适合 SOAP 服务。您可能需要联系服务的所有者发布跨域策略文件,并确保它允许发送与 SOAP 相关的 HTTP header 。此错误也可能是由于在中使用内部类型引起的不使用 InternalsVisibleToAttribute 属性的 Web 服务代理。有关详细信息,请参阅内部异常。”
在我的 java 代码上设置了一个断点,我可以看到当我运行 silverlight 客户端时它没有被击中,所以这可能是一个跨域问题,但我不确定如何处理它(我已经创建了一个 crossdomain.xml 文件并将其放在托管 silverlight 客户端的 HTML 页面旁边。
感谢您的帮助!
最佳答案
您的 crossdomain.xml 文件必须位于托管网络服务的“网站”的根目录下。例如,如果您的端点地址是 http://www.mywebsite:8080/webservice/myendpoint ,您的 crossdomain.xml 文件必须位于地址 http://www.mywebsite:8080/crossdomain.xml 同一主机,根目录下的同一端口。 您必须引用 JBoss 文档以了解如何将文件放在服务器的根目录下。
关于java - Silverlight 与 JBoss WebService 的互操作问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2057327/