.Net下实现配置化调用JAVA开发的WebService

来源:转载

各个系统之间进行数据交互是重要的部分,WebService是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,使用较为方便,闲话少说,正式进入到关于在.Net中调用java开发的接口。

目前JAVA开发WebService的方式很很多种:Axis2、CXF、xfire等等,但是在.Net中调用这些接口无法实现配置IP的形式进行替换调用服务,那这个问题该如何解决?

笔者测试发现相同框架开发的接口是可以进行配置URL来改变调用接口,前提是需要对JAVA基于不同框架的接口进行引用,在Visual Stuido中引用服务的方式在这里不多说,如下图引用方式进行引用:

引用完成后通过动态改变 URL来改变调用接口

1 WebService_SX.Service objService_sx = new WebService_SX.Service();

2 objService_sx.Url = url;

3 str = objService_sx.Process(XmlStr);

同理,当需要调用其他java接口时通过引用一个服务之后通过配置进行调用。

如何实现配置化调用接口呢?

我的方式在web.config里面配置要调用的标识和该标识对应的url,通过标识去识别不同的URL,代码如下:

web.config

<!--标识串-->

<add key="orgCodeList_axis2" value="1,2" />

<add key="orgCodeList_cxf" value="3,4" />

<add key="orgCodeList_xfire" value="" />

<add key="orgCodeList_java" value="" />

<!--标识对应的服务地址-->

<add key="orgCodeListAndUrl_axis2" value="1,http://220.191.238.67:9091/axis2/services/;2,http://220.191.238.67:9092/axis2/services/" />

<add key="orgCodeListAndUrl_cxf" value="3,http://220.191.238.67:82/zy;4,http://220.191.238.67:84/zy" />

<add key="orgCodeListAndUrl_xfire" value=""/>

<add key="orgCodeListAndUrl_java" value=""/>

 

asmx服务中首先根据传入xml中的标识在标识串中查找该标识属于什么开发,如标识1属于axis2开发,再到相应的标识对应服务地址中查找标识1所对应的服务,将之前引用axis2的服务的url替换为该服务地址,即可进行正确调研不抱错。

[WebMethod]

public string Process(string XmlStr)

{

string orgCodeList_axis2 = ConfigurationManager.AppSettings["orgCodeList_axis2"].Trim();

string orgCodeList_cxf = ConfigurationManager.AppSettings["orgCodeList_cxf"].Trim();

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.LoadXml(XmlStr);

string str = ""; string orgCode = ""; string type = ""; string url = "";

orgCode = this.GetParam(xmlDoc, "body/resquest/", "ORG_CODE", null); if (orgCodeList_axis2.IndexOf(orgCode) > -1)

{

type = "axis2";

}

else if (orgCodeList_cxf.IndexOf(orgCode) > -1)

{

type = "cxf";

}

switch (type)

{

case "axis2":

string orgCodeListAndUrl_axis2 = ConfigurationManager.AppSettings["orgCodeListAndUrl_axis2"].Trim();

url = GetUrl(orgCode, orgCodeListAndUrl_axis2);

WebService_SX.Service objService_sx = new WebService_SX.Service();

if (!string.IsNullOrEmpty(url)) {

objService_sx.Url = url;

}

str = objService_sx.Process(XmlStr);

break;

case "cxf":

string orgCodeListAndUrl_cxf = ConfigurationManager.AppSettings["orgCodeListAndUrl_cxf"].Trim();

url = GetUrl(orgCode, orgCodeListAndUrl_cxf);

WebService_QZ.Service objService_qz = new WebService_QZ.Service();

if (!string.IsNullOrEmpty(url))

{

objService_qz.Url = url;

}

str = objService_qz.Process(XmlStr);

break;

default:

str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><body><response><ret_code>9995</ret_code><ret_info>成功</ret_info></response></body>";

break;

}

return str;

}

private string GetUrl(string orgCode,string List) {

string WSurl = "" ;

string[] array = List.Split(';');

for (int i = 0; i < array.Length; i++)

{

string[] detail = array[i].Split(',');

if (detail[0].ToString() == orgCode)

{

WSurl = detail[1].ToString();

break;

}

}

return WSurl;

}

虽然代码很简单,但是确实这种可以通过配置解决调用java接口的问题,个人在使用中觉得还是蛮方便的,如果有更好的改进建议,欢迎交流!

分享给朋友:
您可能感兴趣的文章:
随机阅读: