精华内容
下载资源
问答
  • 这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...
  • public static String pubRemoteFuc() {String endpoint = ...String result = "error";Service service = new Service();Call call;//参数对象SearchInfoVo d=new SearchInfoV...

    public static String pubRemoteFuc() {

    String endpoint = "http://cnblogs.com/qgc/xxxx/Service?wsdl";

    String result = "error";

    Service service = new Service();

    Call call;

    //参数对象

    SearchInfoVo d=new SearchInfoVo();

    d.setName("李建");

    d.setCardNum("44xxxxx");

    Object[] object = new Object[1];

    object[0] = d;//Object是用来存储方法的参数

    try {

    call = (Call) service.createCall();

    call.setTargetEndpointAddress(endpoint);// 远程调用路径

    QName qn = new QName("http://nciic.com.cn", "check" ); //接口的命名空间,请根据您的实际接口填写,和方法名称:

    call.setOperationName(qn);

    //设置参数的类型(这里是实体对象“SearchInfoVo”)http://cnblogs.com/qgc

    call.registerTypeMapping(SearchInfoVo.class,qn,

    new BeanSerializerFactory(SearchInfoVo.class, qn),

    new BeanDeserializerFactory(SearchInfoVo.class, qn));

    call.addParameter("arg0", qn, ParameterMode.IN );  //"arg0"不用改哟,我这里只有一个参数,并且参数是一个实体对象  http://cnblogs.com/qgc

    //            // 设置参数名:http://cnblogs.com/qgc

    //            call.addParameter("name", // 参数名

    //                    XMLType.XSD_STRING,// 参数类型:String

    //                    ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘

    /*            // 设置参数名:http://cnblogs.com/qgc

    call.addParameter("cardNum", // 参数名

    XMLType.XSD_STRING,// 参数类型:String

    ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘

    // 设置参数名:http://cnblogs.com/qgc

    call.addParameter("citizenId", // 参数名

    XMLType.XSD_STRING,// 参数类型:String

    ParameterMode.IN);// 参数模式:‘IN‘ or ‘OUT‘

    */            // 设置返回值类型:

    //call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String

    call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String

    result = (String) call.invoke(object);// 远程调用

    System.out.println(result);

    } catch (ServiceException e) {

    e.printStackTrace();

    } catch (RemoteException e) {

    e.printStackTrace();

    }

    return result;

    }

    public static void main(String[] args) throws Exception {

    pubRemoteFuc();//调用

    原文:http://www.cnblogs.com/qgc88/p/7008136.html

    展开全文
  • Web Service提供者 参数写在对象中(参数对象
  • axis-WebService传递复杂对象类型参数

    千次阅读 2015-11-19 11:19:39
    [size=medium]WebService以前使用都是传递简单的字符串之类的参数,后面有项目需传递复杂对象类型参数,于是研究学习了下。[/size] [size=medium]使用jar包:axis-1.4.jar[/size] 接口类型代码片段: [code=&...
    [size=medium]WebService以前使用都是传递简单的字符串之类的参数,后面有项目需传递复杂对象类型参数,于是研究学习了下。[/size]
    

    [size=medium]使用jar包:axis-1.4.jar[/size]

    接口类型代码片段:

    //暂挂一个有效账号的服务
    public AccountResponse suspendAccount(AccountRequest accountInfo);
    //检查一个有效账号的密码是否正确的服务
    public AccountResponse validatePassword(AccountRequest accountInfo);
    测试与Web Service的通讯是否正常的服务
    public AccountResponse testConnection(AccountRequest accountInfo);
    //修改一个有效账号可修改属性的服务
    public AccountResponse modifyAccount(AccountRequest accountInfo);
    //恢复一个已暂挂账号的服务
    public AccountResponse restoreAccount(AccountRequest accountInfo);
    //查询并返回全部或符合查询条件的账号集合的服务
    public SearchAccountsResponse searchAccounts(AccountRequest accountInfo);
    //创建一个新账号的服务
    public AccountResponse addAccount(AccountRequest accountInfo);
    //删除一个账号的服务
    public AccountResponse deleteAccount(AccountRequest accountInfo);
    //修改一个有效账号密码的服务
    public AccountResponse changePassword(AccountRequest accountInfo);


    AccountRequest对象片段:

    public class AccountRequest implements Serializable{
    /**
    * 请求唯一标识 字符串,每次请求唯一
    */
    private String requestID;

    /**
    * 账号信息对象 用户数据对象
    */
    private AccountInfo accountInfo;
    }


    AccountResponse对象片段:

    public class AccountResponse implements Serializable{
    /**
    * 请求唯一标识 字符串,每次响应唯一,与请求时的ID保持一致
    */
    private String requestID;

    /**
    * 处理结果标识 true:处理成功 false:处理失败
    */
    private Boolean returnFlag;

    /**
    * 返回结果编号 由应用自行定义;
    当returnFlag为true时,returnCode为0;
    当returnFlag为false时,returnCode为错误编码
    */
    private String returnCode;

    /**
    * 返回结果信息 由应用自行定义,可放入提示、警告或错误信息描述
    */
    private String returnMessage;
    }


    SearchAccountsResponse对象片段:

    public class SearchAccountsResponse {

    private AccountInfo[] accountInfoList;

    private Integer accountInfoSize;

    private String requestID;

    private String returnCode;

    private Boolean returnFlag;

    private String returnMessage;
    }


    AccountInfo对象片段:

    public class AccountInfo implements Serializable{
    /**
    * 用户应用账号 应用账号ID
    */
    private String accountID;

    /**
    * 人员中文姓名
    */
    private String cn;

    /**
    * 应用登录密码
    */
    private String userPassword;
    /**
    * 兼职部门ID
    */
    private String[] workOrg;

    /**
    * 兼职部门名称
    */
    private String[] workOrgName;
    }


    [size=medium]使用 deploy.wsdd 生成service-config.wsdd:([color=red]deploy.wsdd 放于WEB-INF下[/color])
    我自己弄个批处理(复制到一个txt文件,保存为.bat文件即可运行):[/size]

    D:

    cd D:\workspaceEclipse\AxisTest\WebContent\WEB-INF

    java org.apache.axis.client.AdminClient -lhttp://127.0.0.1:8080/AxisTest/services/AdminService deploy.wsdd

    @echo 已经成功生成,代码在D:\workspaceEclipse\AxisTest\WebContent\WEB-INF目录下

    @echo -----------------------------------------

    @pause


    deploy.wsdd:

    <?xml version="1.0" encoding="UTF-8"?>
    <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="exoaUmService" provider="java:RPC" style="wrapped" use="literal">
    <parameter name="wsdlTargetNamespace" value="http://cn.com"/>
    <parameter name="wsdlServiceElement" value="exUmService"/>
    <parameter name="schemaQualified" value="http://cn.com"/>
    <parameter name="wsdlServicePort" value="exUmServiceHttpPort"/>
    <parameter name="className" value="com.axis.test.ExUmService"/>
    <parameter name="wsdlPortType" value="exUmServicePortType"/>
    <parameter name="typeMappingVersion" value="1.2"/>
    <operation name="suspendAccount" qname="operNS:suspendAccount" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="validatePassword" qname="operNS:validatePassword" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="testConnection" qname="operNS:testConnection" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="modifyAccount" qname="operNS:modifyAccount" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="restoreAccount" qname="operNS:restoreAccount" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="searchAccounts" qname="operNS:searchAccounts" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:SearchAccountsResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="addAccount" qname="operNS:addAccount" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="deleteAccount" qname="operNS:deleteAccount" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <operation name="changePassword" qname="operNS:changePassword" xmlns:operNS="http://cn.com" returnQName="retNS:out" xmlns:retNS="http://cn.com" returnType="rtns:AccountResponse" xmlns:rtns="http://cn.com" soapAction="" >
    <parameter qname="pns:accountInfo" xmlns:pns="http://cn.com" type="tns:AccountRequest" xmlns:tns="http://cn.com"/>
    </operation>
    <parameter name="allowedMethods" value="*"/>

    <typeMapping
    xmlns:ns="http://cn.com"
    qname="ns:SearchAccountsResponse"
    type="java:com.axis.test.SearchAccountsResponse"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""
    />
    <typeMapping
    xmlns:ns="http://cn.com"
    qname="ns:AccountInfo"
    type="java:com.axis.test.AccountInfo"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""
    />
    <arrayMapping
    xmlns:ns="http://cn.com"
    qname="ns:ArrayOfAccountInfo"
    type="java:com.axis.test.AccountInfo[]"
    innerType="cmp-ns:AccountInfo" xmlns:cmp-ns="http://cn.com"
    encodingStyle=""
    />
    <typeMapping
    xmlns:ns="http://cn.com"
    qname="ns:AccountResponse"
    type="java:com.axis.test.AccountResponse"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""
    />
    <typeMapping
    xmlns:ns="http://cn.com"
    qname="ns:AccountRequest"
    type="java:com.axis.test.AccountRequest"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""
    />
    <arrayMapping
    xmlns:ns="http://cn.com"
    qname="ns:ArrayOfString"
    type="java:java.lang.String[]"
    innerType="cmp-ns:string" xmlns:cmp-ns="http://www.w3.org/2001/XMLSchema"
    encodingStyle=""
    />
    </service>
    </deployment>


    [size=medium][color=red]要注意那2个arrayMapping的设置。[/color][/size]

    [size=medium]服务发布成功后,访问你的服务,把显示的网页保存为.wsdl文件。
    根据这个文件,就可以生成相应的代码。
    这个功能我也弄了个批处理:[/size]


    set Axis_Lib=F:\axis\axis-1_4\lib

    set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%

    set Output_Path=F:\axis\service

    set Package=com.test.webservice

    %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o %Output_Path% -p %Package% -s F:\axis\exUmService.wsdl

    @echo 客户端代码已经成功生成,代码在F:\axis\service目录下

    @echo -----------------------------------------

    @pause


    [size=medium]执行上面的批处理,会在设置的Output_Path文件夹下面生成相关的代码,以及deploy.wsdd,undeploy.wsdd文件,根据这些文件,就可以调用前面发布的服务了。
    [/size]

    [size=medium]调用测试:

    1、客户端调用。
    这个就不搞了,有了客户端代码就很简单了。

    2、Call方式调用,这个要说下。[/size]

    public void test(String methodName,AccountRequest accountInfo){

    Service service = new Service();
    Call call = (Call) service.createCall();
    call.setTargetEndpointAddress(new java.net.URL(targetEendPoint));

    QName qn = new QName("http://cn.com", "AccountInfo" );

    call.registerTypeMapping(AccountInfo.class,qn,
    new BeanSerializerFactory(AccountInfo.class, qn),
    new BeanDeserializerFactory(AccountInfo.class, qn));

    QName qn2 = new QName("http://cn.com", "AccountResponse" );

    call.registerTypeMapping(AccountResponse.class,qn2,
    new BeanSerializerFactory(AccountResponse.class, qn2),
    new BeanDeserializerFactory(AccountResponse.class, qn2));

    QName qn3 = new QName("http://cn.com", "AccountRequest" );

    call.registerTypeMapping(AccountRequest.class,qn3,
    new BeanSerializerFactory(AccountRequest.class, qn3),
    new BeanDeserializerFactory(AccountRequest.class, qn3));

    QName qn4 = new QName("http://cn.com", "SearchAccountsResponse" );

    call.registerTypeMapping(SearchAccountsResponse.class,qn4,
    new BeanSerializerFactory(SearchAccountsResponse.class, qn4),
    new BeanDeserializerFactory(SearchAccountsResponse.class, qn4));

    QName qn5 = new QName("http://cn.com", "ArrayOfAccountInfo" );

    call.registerTypeMapping(AccountInfo[].class,qn5,
    new ArraySerializerFactory(qn, null),
    new ArrayDeserializerFactory());//留意此处

    call.setOperationName(new QName("http://cn.com",methodName));

    call.addParameter( "arg1", qn3, ParameterMode.IN );

    if("searchAccounts".equals(methodName)){

    call.setReturnClass(SearchAccountsResponse.class);

    SearchAccountsResponse result = (SearchAccountsResponse) call.invoke( new Object[] {accountInfo} );

    AccountInfo[] att=result.getAccountInfoList();

    }else{
    call.setReturnClass(AccountResponse.class);

    AccountResponse result = (AccountResponse) call.invoke( new Object[] {accountInfo} );

    }
    }


    [size=medium]上述都是代码片段,仅供参考。[/size]
    展开全文
  • webservice的时候使用SoapUI测试接口的时候需求人员想要把参数格式给展示出来,类似于 这种格式的,上网搜也没找到类似的案例所以弄出来之后给大家分享一下。 刚开始方法后面接收参数是用的String进行接收 @...

    做webservice的时候使用SoapUI测试接口的时候需求人员想要把参数格式给展示出来,类似于
    在这里插入图片描述
    这种格式的,上网搜也没找到类似的案例所以弄出来之后给大家分享一下。

    刚开始方法后面接收参数是用的String进行接收

     @WebMethod
     public String Test(@WebParam(name = "request")String param) ;
    
    

    使用SoapUI测试的时候,只有一个@WebParam里面的参数名称,没有那种级联关系,调用你接口的人也不知道给你怎么传参数,传什么格式。
    在这里插入图片描述
    但是@WebParam中有一个targetNamespace属性,这个属性你可指定接收参数的对象,指定好之后再用SoapUI测试的时候就会显示出级联关系,调用你接口的人员很容易知道要传什么参数什么格式

    //targetNamespace 中的路径是包名反写。
    public Response selectOrderType(@WebParam(name = "request" ,targetNamespace ="http://request.test.com/RequestMsg")RequestMsg param) ;
    

    定义好之后就可以返回这种格式。
    在这里插入图片描述
    接收参数的类:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name="OrderRequestMsgHeader", propOrder={"msgHeader","tt","tt1","tt2"
    		})
    @XmlRootElement
    public class RequestMsg {
    	
    	@XmlElement(name="msgHeader", required=true)
    	private MsgHeader msgHeader;
    	
    	@XmlElement(name="Tt", required=true)
    	private MsgHeader tt;
    	
    	@XmlElement(name="Tt1", required=true)
    	private MsgHeader tt1;
    	
    	@XmlElement(name="Tt2", required=true)
    	private MsgHeader tt2;
    	// get/set
    }
    

    MsgHeader头信息类

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name="msgHeader", propOrder={"test", "testMsg","PAGESIZE","CURRENT_PAGE","TOTAL_RECORD"})
    @XmlRootElement
    public class MsgHeader {
    
    	@XmlElement(name="test",required = true)
    	private String test;
    	@XmlElement(name="testMsg",required = true)
    	private String testMsg;
    	@XmlElement(name="PAGESIZE",required = true)
    	private String PAGESIZE;
    	@XmlElement(name="CURRENT_PAGE",required = true)
    	private String CURRENT_PAGE;
    	@XmlElement(name="TOTAL_RECORD",required = true)
    	private String TOTAL_RECORD;
    	//get/set
    	}
    

    类上面用的标签大家都可以去了解下,这里就不过多做解释了。

    展开全文
  • C#动态调用WebService注意要点   1.动态调用的url后面注意一定要加上?WSDL  例如:string _url = "http://服务器IP:端口/CITI_TRANS_WH/wsTransData_InWH.asmx?WSDL";   -------------------------...

    C#动态调用WebService注意要点

     

    1.动态调用的url后面注意一定要加上?WSDL

      例如:string _url = "http://服务器IP:端口/CITI_TRANS_WH/wsTransData_InWH.asmx?WSDL";

      

    --------------------------------------------------------------------------------------------------- 

    2.WebService中传递List泛型对象

     [WebMethod]

     public List<TestModel> TestTransDataByClass(int _max)

     

     注意TestModel必须是可以序列化的类

     

     //必须可序列化

     [Serializable]

     public class TestModel

     {

         public int No

         {

             get;

             set;

         }

         public string Des

         {

             get;

             set;

         }

     }

    ---------------------------------------------------------------------------------------------------

    3.WebService中不能直接传递输出dictionary<string,object>这样的泛型对象,必须自定义一个类来输出,这个类同样也是可以序列化的

        [Serializable]

        public class MyDictionary

        {

            public List<TestModel> Table1

            {

                get;

                set;

            }

            public List<TestModel2> Table2

            {

                get;

                set;

            }

        }

    ---------------------------------------------------------------------------------------------------   

    4.动态调用WebService的类封装

        public static class InvokeWebServiceDynamic

        {

            /// <summary>

            /// 动态调用WebService

            /// </summary>

            /// <param name="_url">web服务url地址</param>

            /// <param name="_methodName">web服务中的方法</param>

            /// <param name="_params">传递给方法的参数</param>

            /// <returns></returns>

            public static object InvokeWebMethod(string _url ,string _methodName,

                                    params object[] _params)

            {

                WebClient client = new WebClient();

                //String url = "http://localhost:3182/Service1.asmx?WSDL";//这个地址可以写在Config文件里面

                Stream stream = client.OpenRead(_url);

                ServiceDescription description = ServiceDescription.Read(stream);

                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。

                importer.ProtocolName = "Soap"; //指定访问协议。

                importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。

                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties |

                    CodeGenerationOptions.GenerateNewAsync;

                importer.AddServiceDescription(description, null, null); //添加WSDL文档。

                CodeNamespace nmspace = new CodeNamespace(); //命名空间

                nmspace.Name = "TestWebService";      //这个命名空间可以自己取

                CodeCompileUnit unit = new CodeCompileUnit();

                unit.Namespaces.Add(nmspace);

                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);

                CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

                CompilerParameters parameter = new CompilerParameters();

                parameter.GenerateExecutable = false;

                parameter.OutputAssembly = "MyTest.dll";//输出程序集的名称

                parameter.ReferencedAssemblies.Add("System.dll");

                parameter.ReferencedAssemblies.Add("System.XML.dll");

                parameter.ReferencedAssemblies.Add("System.Web.Services.dll");

                parameter.ReferencedAssemblies.Add("System.Data.dll");

                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);

                if (result.Errors.HasErrors)             

                {                 

                    // 显示编译错误信息             

                }

                Assembly asm = Assembly.LoadFrom("MyTest.dll");//加载前面生成的程序集

                Type t = asm.GetType("TestWebService.wsTransData_InWH"); //前面的命名空间.类名,类必须是webservice中定义的

                object o = Activator.CreateInstance(t);

                MethodInfo method = t.GetMethod(_methodName);//GetPersons是服务端的方法名称,你想调用服务端的什么方法都可以在这里改,最好封装一下

                object item = method.Invoke(o, _params); //注:method.Invoke(o, null)返回的是一个Object,如果你服务端返回的是DataSet,这里也是用(DataSet)method.Invoke(o, null)转一下就行了

                //foreach (string str in item)

                //    Console.WriteLine(str);               //上面是根据WebService地址,模似生成一个代理类,如果你想看看生成的代码文件是什么样子,可以用以下代码保存下来,默认是保存在bin目录 下面

                //TextWriter writer = File.CreateText("MyTest.cs");

                //provider.GenerateCodeFromCompileUnit(unit, writer, null);

                //writer.Flush();

                //writer.Close();

                return item;

            }

        } 

    ---------------------------------------------------------------------------------------------------   

    5.通过反射提取web方法返回的自定义类数据

      说明:

      <1>.WebService方法TestTransDataByDic返回自定义的MyDictionary对象

      <2>.它包含两个属性table1,table2

      <3>.类定义代码如下

       [Serializable]

       public class MyDictionary

       {

         public List<TestModel> Table1

         {

             get;

             set;

         }

       

         public List<TestModel2> Table2

         {

             get;

             set;

         }

       }

     

     <4>.客户端调用代码

            private void InvokeDic_Click(object sender, EventArgs e)

            {

                //要注意加?WSDL

                //string _url = "http://localhost:58764/wsTransData_InWH.asmx?WSDL";

                int _count = int.Parse(txtCount.Text);

                object o = InvokeWebServiceDynamic.InvokeWebMethod(_url, "TestTransDataByDic",

                                new object[] { _count });

                PropertyInfo _propertyTable1 = o.GetType().GetProperty("Table1");

                PropertyInfo _propertyTable2 = o.GetType().GetProperty("Table2");

                //读取Table1属性中的数据

                object[] _table1Items = (object[])_propertyTable1.GetValue(o, null);

                if(_table1Items.Length>0)

                {

                    lstData1.Visible = false;

                    lstData1.Items.Clear();

            //反射出对象TestModel的属性

                    PropertyInfo _propertyNo = _table1Items[0].GetType().GetProperty("No");

                    PropertyInfo _propertyDes = _table1Items[0].GetType().GetProperty("Des");

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

                    {

                      //根据属性取值

                        string _no = _propertyNo.GetValue(_table1Items[i], null).ToString();

                        string _des = _propertyDes.GetValue(_table1Items[i], null).ToString();

                        string _format = string.Format("第{0}条:{1}", _no, _des);

                        lstData1.Items.Add(_format);                    

                    }

                    lstData1.Visible = true;

                }

               

                //读取Table2属性中的数据

                object[] _table2Items = (object[])_propertyTable2.GetValue(o, null);

                if (_table2Items.Length > 0)

                {

                    lstData2.Visible = false;

                    lstData2.Items.Clear();

            //反射出对象TestModel2的属性

                    PropertyInfo _propertyMyFNo = _table2Items[0].GetType().GetProperty("MyFNo");

                    PropertyInfo _propertyMyFDes = _table2Items[0].GetType().GetProperty("MyFDes");

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

                    {

                      //根据属性取值

                        string _no = _propertyMyFNo.GetValue(_table2Items[i], null).ToString();

                        string _des = _propertyMyFDes.GetValue(_table2Items[i], null).ToString();

                        string _format = string.Format("第{0}条:{1}", _no, _des);

                        lstData2.Items.Add(_format);

                    }

                    lstData2.Visible = true;

                }

                MessageBox.Show("OK");

            }

    ---------------------------------------------------------------------------------------------------   

    6.客户端传递序列化对象给webserice方法

            /// <summary>

            /// 

            /// </summary>

            /// <param name="_dicGet">是一个客户端传过来的序列化的对象</param>

            /// <returns></returns>

            [WebMethod]

            public string TestInsertData(byte[] _dicGet)

            {

                //反序列化对象

                object _dicGetOK = SqlHelper.DeserializeObject(_dicGet);

                return "ok";

            }

    注意:

    <1>.创建一个.NET类库,把要传输的对象做成一个结构或类放在类库(假设为ClassLib.dll)中。如:

    <2>.然后在客户端程序和webservice项目中都引用ClassLib.dll

    <3>.上面两步的目的是让客户端序列化的对象,在webservice服务端能正常反序列化,不会出现反序列化时找不到命名空间的问题

    ---------------------------------------------------------------------------------------------------   

    7.修改webserivce最大传输的长度

    <?xml version="1.0" encoding="utf-8"?>

    <!--

      有关如何配置 ASP.NET 应用程序的详细消息,请访问

      http://go.microsoft.com/fwlink/?LinkId=169433

      -->

    <configuration>

      <connectionStrings>

        <add name="ConStr" connectionString="$(ReplacableToken_ConStr-Web.config Connection String_0)"/>

      </connectionStrings>

        <system.web>

            <compilation debug="true" targetFramework="4.0" />

            <httpRuntime maxRequestLength="2147483647" />

        </system.web>

    </configuration>

     8.修改webservice的超时时间

    <?xml version="1.0" encoding="utf-8"?>

     

     

    <!--

      有关如何配置 ASP.NET 应用程序的详细消息,请访问

      executionTimeout="120"  超时时间120秒

      maxRequestLength="2147483647" 最大请求长度

      http://go.microsoft.com/fwlink/?LinkId=169433

      -->

     

     

    <configuration>

      <connectionStrings>

        <add name="ConStr" connectionString="Data Source=192.128.58.248;Initial catalog=Citibank_test;Uid=sa;pwd=kicpassword"/>

      </connectionStrings>

        <system.web>

            <compilation debug="true" targetFramework="4.0" />

            <httpRuntime maxRequestLength="2147483647" executionTimeout="240" />

        </system.web>

     

     

    </configuration>

     9.序列化,反序列化方法

            public static byte[] SerializeObject(object pObj)

            {

                if (pObj == null)

                    return null;

                System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();

                BinaryFormatter formatter = new BinaryFormatter();

                formatter.Serialize(memoryStream, pObj);

                memoryStream.Position = 0;

                byte[] read = new byte[memoryStream.Length];

                memoryStream.Read(read, 0, read.Length);

                memoryStream.Close();

                return read;

            }

     

     

            public static object DeserializeObject(byte[] pBytes)

            {

                object newOjb = null;

                if (pBytes == null)

                {

                    return newOjb;

                }

     

     

                System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(pBytes);

                memoryStream.Position = 0;

                BinaryFormatter formatter = new BinaryFormatter();

                newOjb = formatter.Deserialize(memoryStream);

                memoryStream.Close();

     

     

                return newOjb;

            }

    展开全文
  • 最近要搞一些关于WebService的东西了,说心里话,没怎么搞过web服务,不是很明了,只是大概知道点而已。借着这个机会,学习下有关WebService的知识。关于web服务的有关基础知识,看了基本书,但是不敢在这里乱说,...
  • 如果有的话,在客户端没有什么特别的,就是接收到的变成相应的对象数组罢了 还有webservice涉及东西比较多,不像一个GUI纯Java代码给你就贴上来,就是给你 说怎么List的思路,你如果提不出再针对和具体的问题,...
  • webService学习(二)—— 调用自定义对象参数 本文主要内容: 1、如何通过idea进行webService Client的简单实现(不再使用wsimport的方式,其实是ide帮我们做了) 2、在webservice中调用自定义参数(自定义类)...
  • 上一章整合了WebService,但是仅仅展示了调用服务端(模拟的别人的接口)无参的接口,本章更新一下,传参的接口,使用WebParam即可。 就不展示目录结构了,跟上一章一样,仅增加一个带参数的接口。若有不懂的,...
  • axis2怎样生成这种格式的WSDL![图片说明](https://img-ask.csdn.net/upload/201609/09/1473415406_463899.png)
  • CXF动态调用webservice ...参数涵盖多个普通形参、JavaBean、以及List集合的形式调用 会介绍调用的几个小技巧,结合fastjson和缓存知识完全掌控整个调用流程。 1.知识点汇总 常用的CXF调用WebSer...
  • 切到Arguments页签,配置参数   点击Run,生成服务代码   将代码移到src目录下     4.将deploy.wsdd中的服务定义复制到自己新建的WEB-INF/service-confid.wsdd中     5.填充具体业务逻辑     6...
  • 下面小编就为大家带来一篇JQuery Ajax WebService传递参数的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Webservice接口通过WDSL传递对象解析

    千次阅读 2018-02-11 10:10:56
    前不久接到一个需要是做接口的调用解析,对接方那边是需要的传递一个对象对象含有参数,然后返回结果对象我们来解析,因为之前没有做过,他们给我一个文档,我就编代码去调用解析,但是结果就是个坑,网上说的那些...
  • 1、用SoapUI测试webservice接口,传入参数是xml格式时。xml格式需要将xml的外围增加xml]]>2、但是用python去做webservice测试,调用函数去传参时,直接将xml作为字符串的格式传入即可。其中,webservice请求的...
  • 现在进一步尝试了使用带参数的方法,分别测了用String为参数和用自定义的对象参数。其中,使用String为参数时和不带参数的写法没有什么区别,调用时也就是很普通的调用。但是调用自定义对象参数的方法时,实际...
  • 若客户端,调用webservice时,参数是一个object, 直接传递参数,会报错。 需要转换。 如果是动态生成客户端,则要如下转换object 参数 Object object = Thread.currentThread().getContextClassLoader()....
  • 这边需要用C#call一个webservice的接口,推过去的参数以JSON的格式传递过去。 说实话,接口写了很多,全部是封装好的,直接调用,把对象传进去就好了,所有要写个从无到有的,有点蒙蔽,智能百度自己查了。 1.接口...
  • 关于WebService的话题,作为一个Java屌丝,我想也不用多说了!基本sh
  • 客户端代码(其中queryEquipmentRequest,QueryEquipmentResponse是我自定义的对象): call.addParameter(new QName(nameSpace, "queryEquipmentRequest"), new QName(nameSpace, "queryEquipmentRequest"), Parameter...
  • springboot + webservice +传输自定义类

    千次阅读 2020-06-15 11:06:45
    一.初次搭建报错 采用这篇文章的方法,报如下错误 Error creating bean with ...spring-boot-starter-jaxws 3.2.5 二.webservice网页文档需要显示具体参数: 加入webservice 接口名称:**wsdl=WebserviceTest.wsdl** ...
  • Spring boot中使用WebService 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency>...
  • 1、自定义对象实体参数,然后再通过自定义适配器进行转换,该适配器需要继承XmlAdapter类,实现里面2个方法,如下:   public class RowImplAdapter extends XmlAdapter&lt;AdapterData, RowImpl&gt;{ ...
  • C#中webservice接受数组参数

    千次阅读 2017-08-31 20:52:44
    背景:需要在前端向服务器请求时,向服务器上的webservice接口数组,C#需要对数组进行一下格式化处理来接受。 JArray jo = (JArray)JsonConvert.DeserializeObject(pointarry); pointarry为传递过来的数组...
  • 测试webservice接口的方法有不少种(好比经过SoapUI就不错),可是习惯用Python作测试的朋友,可能下面相对而言会更受欢迎。python一、准备环境web安装方式一,离线安装appwebservice接口测试,须要用到suds库,网上...
  • 一、获取接口信息: ...webService接口通常传递xml参数因此需要组装数据:  ①若传递单个参数则: &lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cen...
  • 常用参数为:•-d - 将生成.class文件。默认参数。•-s - 将生成.java文件。•-p -将生成的类,放于指定的包下。示例:注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,908
精华内容 14,363
关键字:

webservice传对象参数