情况是这样的,
对方公司给了我们一个java的WebService的接口,但是我用asp.ne去加Web引用时就是连不上
他们是用java封装了WebSerive,要通过一个java的程序才能连上去,
那我们现在要如何才能调用到这个webService呢?

解决方案 »

  1.   

    也可以说用java写的jar如何才能转成dll使用呢?
      

  2.   

    Java与.NET 的Web Services相互调用 
     
    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services。 二:项目需要的工具 Windows2000 Server(IIS) Jbuilder9.0( 含有Tomcat , axis) JDK1.4+Java Web Services Develop VS.Net 2003 备注:如果没有JBuilder的话就需要自己下载安装Tomcat4.1 以及 Axis的开发包,并做相应配置。由于网上有很多这样的文章,这里就不一一说明了。 三:用.NET做客户端调用Java写的Web Services 1. 生成一个Java Web Services 使用JBuilder 生成一个Web Services是非常简单的,我完全是按照它的帮助做的,只要一步步做 下去就可以了。具体路径是Developing Web Services -> tutorials : Web Services(Axis) -> Creating a simple Web Services 2. 发布这个Web Services并得到它的WSDL Web Services生成好之后,F9运行这个项目。然后,单击View浏览现有的Web 服务,单击Bean1的WSDL连接,我们可以在浏览器中察看它的WSDL描述。在浏览器地址栏复制WSDL地址,为下一步使用.NET开发客户端调用程序做准备。 3. 用VS.NET生成一个.NET的客户端 新建一个项目(WinForm,ASP.net都可以),我在这里使用的是一个Asp.Net项目。在起始页面上放置一个文本输入框用来显示调用Web Services的结果,放置一个按钮,用来单击调用Web Services。然后,选择添加Web 引用,在WSDL一栏中把刚才得到的WSDL地址复制过来,Web 引用的名称输入JavaService,单击添加引用按钮就可以了。此时,我们可以在VS.net 的Solution Explore中看到这个Web 引用。 在按钮的单击事件中输入下列代码: JavaService.Bean1 bean = new JavaService.Bean1(); TextBox1.Text = bean.getSample.ToString (); 这样,一个.NET客户端就完成了,测试一下,工作正常,OK. 四:用Java做客户端调用.NET写的 Web Services 有了上面的成功,使我以为用Java做客户端调用也是一件十分容易的事情,可实际情况却耗费了我两天时间才得以实现。 1. 用VS.NET新建一个Asp Web Services工程,添加一个web 服务,命名为SumService.asmx。新增一个web method,代码如下: [WebMethod] public int IntAdd(int a,int b) { return a+b ; } 然后运行它,并利用IE进行测试成功。 2. 打开jbuilder9.0,新建一个项目,添加一个java class ,命名为TestNetService,输入下列代码: package MyWebServiceJavaClient; import java.util.Date; import java.text.DateFormat; import java.util.Date; import java.text.DateFormat; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import javax.xml.namespace.QName; import java.lang.Integer; import javax.xml.rpc.ParameterMode; /** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author not attributable * @version 1.0 */ public class TestNetService { public TestNetService() { } public static void main(String[] args) { try { Integer i = new Integer(1); Integer j = new Integer(2); String endpoint="http://localhost/MyServices/WebServiceTest/SumService.asmx"; Service service = new Service(); Call call = (Call)service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint)); call.setOperationName(new QName("http://www.my.com/SU","IntAdd")); call.addParameter("a",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN); call.addParameter("b",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN); call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT); call.setUseSOAPAction(true); call.setSOAPActionURI("http://www.my.com/Rpc"); Integer k = (Integer)call.invoke(new Object[]{i,j}); System.out.println( "result is " + k.toString() + "."); } catch (Exception e) {System.err.println(e.toString());} } } 运行上面的java客户端程序,你会发现系统会抛出一个SoapAction异常。奇怪,怎么会错误呢?想到了我开发的asp web services没有指定SoapAction,于是在SumService.asmx中的 [web method] 的上一行添加下列代码: [SoapRpcMethod(Action="http://www.my.com/Rpc",RequestNamespace="http://www.my.com/SU",ResponseNamespace="http://www.my.com/SU")] 重新编译运行asp web services后,在执行java程序,这时会发现输出了正确的结果3。 这样,用java调用.net生成的web services也算初步完成了,好像也不是很复杂是吧。其实,在实际工作中,我一开始并没有在网上找到一个很好的代码例子,全部是依靠jbuilder 和 axis的帮助完成的, 可总是提示什么找不到相应的SoapAction。而实际上,我在运行了asp web services后是可以在IE浏览器中看到那个SoapAction的。我试验过将默认的SoapAction拷贝到java代码中,但是java客户端依然抛出同样的异常,这要我也很迷惑。 五:总结 经过两天的试验,终于从技术上明确了通过Web Services实现.net 与 java的互通是可能的。当然有几点是需要注意的: 1. 在提供Web Services的时候,尽量使用xml schema中支持的变量类型做参数。如果使用.net 中的dataset这种类型,对于java来说解析起来将是一个灾难,当然,理论上是可以解析的。但是从效率角度来说,在Web Services与客户端交换信息的过程中,始终有一个序列化和反序列化的问题。如果使用dataset这种类型,系统还需要对它进行序列化操作,这将是一个很耗费资源的过程。而使用string类型将简单很多。 2. 如果使用了soap header等扩展功能,例如使用了微软提供的WSE技术,它们之间的相互通信需要作特殊处理。 
      

  3.   

    对了。其中他们通过一个java的object 对这个webservice 进行了加密,他们给了我一个jar的
    文件,只有通过这个才能用到他们的WebService,我们如何才能调用这个jar的文件。
      

  4.   

    還有一個方法就是把這個jar文件用java寫為web service
    然后你再調用java寫的webservice!
    這樣可能性能有點問題!
      

  5.   

    他本身就有一个WebService,但是不是自接能用的。他们给了一个
    下面是他们写的一个实例,就是会生成一个新的WebService, 然后才能返回结果。。
    这个是java的程序。package apschannel.test;import apschannel.generated.*;public class test {
      public test() {
        log("setSessionContext called");
        this.ctx = ctx;
      }  public static void main(String[] args) {
        try {
          String wsdlUrl =
              "http://172.168.250.138:7001/web-services/ApsChannelService?WSDL";
          ApsChannelService_Impl service = new ApsChannelService_Impl(wsdlUrl);
          ApsChannelServicePort port = service.getApsChannelServicePort();      String inXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Business><BusinessType><BusinessID>10002</BusinessID><AgentName>111</AgentName></BusinessType><SendData><AccountNO>075588378123</AccountNO></SendData></Business>";
          String result = port.referApply(inXml);
          System.out.println("result  is: " + result);
        }
        catch (Exception e) {
          e.printStackTrace();
        }
       }}
      

  6.   

    ApsChannelService_Impl
    就是他们加密部分,也就是他们给的一个jar文件内的程序。