.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>9995default</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接口的问题,个人在使用中觉得还是蛮方便的,如果有更好的改进建议,欢迎交流!

时间: 2024-08-12 18:11:01

.Net下实现配置化调用JAVA开发的WebService的相关文章

用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!

用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和DateTime类型的值(在服务端得到的均为null) 解决办法: VS2005封装WebService引用 用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.doub

用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获

用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值! 用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和DateTime类型的值(在服务端得到的均为null) 解决办法: VS2005封装WebService引用 用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属

Delphi调用java开发的WebService,传入参数出错

http://www.cnblogs.com/zhangzhifeng/p/3397053.html 调用没有参数的服务正常,当调用有参数的服务出现以下错误java.util.concurrent.ExecutionException: java.lang.NullPointerException 另外加了RIO.HTTPWebNode.UseUTF8InHeader := True;InvRegistry.RegisterInvokeOptions(TypeInfo(ESBProService

在IntelliJ IDEA 13中配置OpenCV的Java开发环境

准备工作: 下载IDEA 13(这里以版本13为例,后面简称IDEA): 下载Java JDK(用于配置基本的Java开发环境): 下载OpenCV 2.4.9(这里以版本2.4.9为例,据这篇文章说,OpenCV的2.4版本开始支持Java API接口): 安装IDEA: 安装JDK,并在IDEA中配置JDK: 将下载好的OpenCV 2.4.9解压到某个目录下,例如,解压后的路径为“D:\opencv”,该路径下包含build文件夹和source文件夹. 配置开发环境: 1)在IDEA中新建

配置Arcengine10.1+java开发环境(Eclipse)

以下开发环境配置是假定用户已经安装了Java开发的IDE(Eclipse) 软件准备 (一)ArcEngine 10.1 安装包            提取码:poa0 (二)ArcGIS License Manager          提取密码:a54e   软件安装 1.安装Licence Manager  按照安装指引一直下一步直到安装完成. 启动 Licence Server Administrator ,停止许可服务(如下图) 2.安装ArcEngine 一直点下一步直到完成 3.安

.net 客户端调用java或.net webservice进行soapheader验证

最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader. 借此机会,顺便整理一下调用.net webservice 和 java webservice 的验证方式,记录下来. .net端web服务 1.若web服务是采用.net webservice实现,如下代码: /// </summary> [WebService(Namespace = "http://tempuri.org/&quo

Thrift实现C#调用Java开发步骤详解

转载请注明出处:jiq?钦's technical Blog Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 类似的跨语言RPC框架还有ICE.Hessian.Protocol Buffer.Avro等. 1 下载Thrift 下载地址:http://thrift.apache.org/download thrift-0.9.3.exe         用于编译Thrift中间文件生成对应语言代码的工具 thrift-0.9.3.tar

Windows环境下安装配置Anaconda的Python开发环境

Python官方自带的软件只有基础的库文件,而在编程过程中需要使用各种类型的库,都需要花费大量的时间去查找并不断下载库文件并加载到环境中去才能使用,这也是我自学Python遇到的一个困难点,anaconda提供了一个整合的环境解决了这个问题. 官方下载地址如下:(这里选择的是windows版本安装) https://www.anaconda.com/support/ 但是官网下载特别慢,这里学长Ben推荐了清华大学开源镜像站下载 https://mirrors.tuna.tsinghua.edu

二、springMVC项目依赖配置pom.xml - Java开发企业级权限管理系统

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&