这是其他人写的一个问题,但我无法理解所提出的解决方案。
我在本地计算机上运行了一个非常简单的Java WebService服务器。我正在为我正在制作的游戏开发它。
我使用javax.jws.WebService创建它并使用javax.xml.ws.Endpoint按照此处的教程发布它:
http://www.ibm.com/developerworks/webservices/tutorials/ws-eclipse-javase1/
我按照以下方式在本地计算机上发布它:
Endpoint.publish("http://MyComputerName:8080/subserver", new SubServer());
我已经在我的路由器上转发了端口8080,并且我有一个静态IP地址。在外部我可以毫无问题地查看WSDL。
我的问题是,我想在我编写的JavaScript Canvas游戏中调用我的WebService方法。每当我发出请求时,我都没有得到任何响应,并且服务器上出现以下错误:
Mar 03, 2012 9:39:24 PM com.sun.xml.internal.ws.transport.http.server.WSHttpHandler handleExchange
WARNING: Cannot handle HTTP method: OPTIONS
因此Chrome没有按照我的要求发送POST请求,但正在执行OPTION请求,因为显然我正在执行跨域请求。当我的所有文件都在同一台服务器(我的本地计算机)上时,我不确定我是如何进行跨域请求的。
问题是我发布了MyComputerName的端点...但是传入的请求是MyExternalIPAddress ...?这就是为什么它被视为跨域请求?
我看过不同的选项,包括JSONP,我不明白(我也不认为我的WebService支持它),但我认为我最好的选择是设置一个代理服务器 - 但是如果不理解为什么我在做跨域请求,我不确定我在做什么。
我非常感谢能够帮助我了解这里发生的事情和/或帮助我找到解决方案的人。太令人沮丧了。我今天花了6个小时试图解决这个问题而没有任何运气。