2011年9月2日星期五

OSB_015:如何解决机器名发生变化时无法访问原有的WebService的问题?

实际使用中,出于某种原因,可能需要修改机器名称,这时,OSB上部署的WebService就无法正常访问了。
目前,在OSB Console中,可以修改访问路径中的path部分,但不允许修改访问路径中的host部分。

因此,只好找寻其它解决办法。
导出Proxy Service的jar文件,

会发现里面的WSDL文件内容中,location指向的是旧的hostname。
<WL5G3N0:service name="getStatusByCC">
<WL5G3N0:port binding="WL5G3N2:execute_pttBinding" name="execute_pt">
<WL5G3N3:address location="http://PMMA-CN.cn.oracle.com:7001/Credit_Services/ProxyServices/ValidateCredit"/>
</WL5G3N0:port>
</WL5G3N0:service>

那么,如何解决这个问题呢?

方案1. 把hostname部分用IP地址替换。
IP地址一般来说,不会轻易改变,如果能够把这里修改成IP地址就好了。
虽然OSB不允许修改hostname,但OSB是运行在WebLogic Server上,只要在WLS Console中,找到OSB所在的Server,把Listen Address设置成IP地址就可以了。


重新启动Server,重新导出Proxy Service的jar文件,发现location指向已经改为IP地址。
<WL5G3N0:service name="getStatusByCC">
<WL5G3N0:port binding="WL5G3N2:execute_pttBinding" name="execute_pt">
<WL5G3N3:address location="http://192.168.1.100:7001/Credit_Services/ProxyServices/ValidateCredit"/>
</WL5G3N0:port>
</WL5G3N0:service>

方案2. 我们很自然的想到把Listen Address设置成新hostname。

重新启动Server,重新导出Proxy Service的jar文件,发现location指向已经改为新的hostname。
<WL5G3N0:service name="getStatusByCC">
<WL5G3N0:port binding="WL5G3N2:execute_pttBinding" name="execute_pt">
<WL5G3N3:address location="http://guo-cn:7001/Credit_Services/ProxyServices/ValidateCredit"/>
</WL5G3N0:port>
</WL5G3N0:service>

说明:为了识别新的hostname,我在hosts文件中增加了一行:127.0.0.1 guo-cn。

方案3. Redirect请求到新的hostname。
在实际情况中,为了高可用性,多个OSB Server组成一个集群,并且请求是由负载均衡器分发过来的。
如果服务所在的hostname发生了变化,我们可以通过设置Redirect来转发所有的请求到负载均衡器,因为负载均衡器“知道”服务的真正地址。
选择Cluster->Configuation->HTTP:

如果不是集群,单独的Server也有这个参数,选择Server->Protocols->HTTP:


参考文献:
1. http://forums.oracle.com/forums/thread.jspa?threadID=963978

没有评论: