Windows程序(C# VS 2008)杂记之Java访问Webservice服务

来源:互联网 发布:java相关网络协议卡死 编辑:程序博客网 时间:2024/05/26 19:15

2014年3月20日星期四 海淀五路居 晴

从上周一开始,一直到昨天,被老大给借到别的组去弄文档,拿着仅会画笔工具的PS,不停地涂啊涂,这是拿着先进的工具生生地做着体力活,整个人都干的有些麻木了。

终于又可以帮别的同事打打下手了,实现Java对.netWebservice服务的访问。

1. 创建Webservice服务

1) 创建一个空的ASP.NET Web应用程序

2) 右键点击项目名称,添加新建项,选择Web模版中的Web服务


3) 点击调试,服务创建完成,我的地址为:

http://localhost:31058/WebService1.asmx


2. 编写Java客户端

    packagecom.jackhally;    importjava.net.URL;    importjavax.xml.namespace.QName;    importorg.apache.axis.client.Call;    importorg.apache.axis.client.Service;         public classWebserviceClient {        publicstatic String getInfo() {        Stringresult = "";                 try{            //定义服务            Serviceservice = new Service();            //调用Hello方法            CallcallHelloWorld = (Call) service.createCall();            callHelloWorld.setOperationName(newQName("http://localhost:31058/WebService1.asmx", "HelloWorld"));            //callHelloWorld.addParameter(newQName("http://localhost:31058/WebService1.asmx","name"),XMLType.XSD_STRING,ParameterMode.IN);            //call.addParameter("name",XMLType.XSD_STRING,ParameterMode.IN);            callHelloWorld.setTargetEndpointAddress(newURL("http://localhost:31058/WebService1.asmx"));            result= (String)callHelloWorld.invoke(new Object[]{});                         System.out.println("Theresult is " + result);        }        catch(Exceptione) {            e.printStackTrace();        }        return    result;        }    }


faultString: System.Web.Services.Protocols.SoapException:服务器未能识别 HTTP SOAPAction 的值:

解决方案:

ASP.NET端,增加引用using System.Web.Services.Protocols;

进行如下修改:

[WebService(Namespace = "http://tempuri.org/")]

[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]//添加这句

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)] 

 

接着调用,报出可能报出如下错误:

faultString: System.Web.Services.Protocols.SoapException:无法识别请求元素 <HelloWorldxmlns='http://localhost:31058/WebService1.asmx'>

 

faultString: org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages

解决方案:

//[WebService(Namespace = "http://tempuri.org/")]将地址改为我服务的地址

[WebService(Namespace = "http://localhost:31058/WebService1.asmx")]

[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)] 

调用结果如下:


3. 发布Webservice服务到IIS,使同事可以远程调用

我的电脑->右键->管理


网站-右键-添加网站-随意输网站名称-物理路径定位到站点所在的文件夹

然后绑定本机ip地址和端口号,确定即可;


浏览器中输入:http://绑定ip地址:端口/WebService1.asmx  就可以访问了

即http:://192.168.1.124:9004/WebService1.asmx


远程客户端访问服务器上的WebService的时候,可以显示上图,但点击调用相关的方法时显示“只能用于来自本地计算机的请求”,需要修改配置。修改Webservice服务下web.config文件,在system.web节点下面添加下面的节点:

<webServices >
<protocols >
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
</protocols>
</webServices>

4.      添加有参数的方法

ASP.NET服务端:

[WebMethod]

public string HelloWorld(string  name)

{

return name;

}

Java客户端:

public static String getInfo(String name) {    Stringresult = "";         try{        //定义服务        Service service = new Service();                 //调用Hello方法        Call callHelloWorld = (Call) service.createCall();        //设置调用的方法        callHelloWorld.setOperationName(newQName("http://localhost:31058/WebService1.asmx", "HelloWorld"));        //设置调用方法的参数        callHelloWorld.addParameter(newQName("http://localhost:31058/WebService1.asmx","name"),XMLType.XSD_STRING,ParameterMode.IN);        //如果这样添加参数,        //call.addParameter("name",XMLType.XSD_STRING,ParameterMode.IN);        //则会报出如下错误:        //faultString: org.xml.sax.SAXParseException: Content is not //allowedin prolog.        callHelloWorld.setTargetEndpointAddress(newURL("http://localhost:31058/WebService1.asmx"));        result = (String)callHelloWorld.invoke(new Object[]{name});                 System.out.println("The result is " + result);    }    catch(Exceptione) {        e.printStackTrace();    }         return    result;}


0 0
原创粉丝点击