C# .NET VS2005加载Web服务,接口参数增多的问题?

至于为什么会导致参数增多的情况呢?经过测试发现只要是用C# .NET开发的WEB服务就不会出现此问题(这点也很容易理解,用C#工具发布,再由C#工具引用加载肯定不会有问题);而我们的geoweb服务是是用JAVA开发的,用C# .NET调用;出现问题也很正常。

 

该问题的产生背景:

.netwebservicedoubleintdatetime到服务器,而得到的返回值为null的情况,比如用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型、doubleDateTime类型的值(在服务端得到的均为null)。

 

解决办法:

VS2005封装WebService引用时,如果WebService发布的是一个基本数据类型组成的对象,则会对该对象的非string属性同时生成两个属性,一般是这样的"属性××""属性××Specified"。而"属性名Specified"是一个bool类型,只有这个属性被设置成true时,"属性××"的值才会被序列化成xml传递。

 

 

综上所述,参数增多是VS2005为了解决C# .NET调用JAVA开发的Web服务过程中服务端接收的参数为NULLBUG

故参数增多不会影响到程序的正确运行,传入的参数基本上多就是一些boolean(布尔);全部传true即可得到正确的结果

 

例如(SoapUIVS2005调用web服务区别):

Ø         SoapUI调用,接口参数是正常的;soapUI是用JAVA语言开发的,相当于是用JAVA调用web服务(该web服务的JAVA开发的)。

Request(请求串):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://webservice.geoglobe.geostar.com">

   <soap:Header/>

   <soap:Body>

      <web:getRightId>

         <!--Optional:-->

         <web:rightitem>添加</web:rightitem>

         <!--Optional:-->

         <web:rightparentid>1</web:rightparentid>

         <!--Optional:-->

         <web:sysid>1</web:sysid>

      </web:getRightId>

   </soap:Body>

</soap:Envelope>

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

Resposne(返回信息串)

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">

   <soapenv:Body>

      <ns:getRightIdResponse xmlns:ns="http://webservice.geoglobe.geostar.com">

         <ns:return>1</ns:return>

      </ns:getRightIdResponse>

   </soapenv:Body>

</soapenv:Envelope>

 

Ø         VS2005调用加载进来的web服务,接口参数是变多了;用C#.NET调用web服务(该web服务的JAVA开发的)

接口:public void getRightId(string rightitem, int rightparentid, bool rightparentidSpecified, int sysid, bool sysidSpecified, out int return, out bool returnSpecified)

 

程序调用示例:

localRightManager.RightManagerWebService sa = new WindowsApplication1.localRightManager.RightManagerWebService();

            int returnVal;

            bool returnBoolVal;

            sa.getRightId("添加",1,true,1,true,out returnVal, out returnBoolVal);

rightparentidSpecified设置为true是为了让服务端能正确的接收到rightparentid的值;

sysidSpecified设置为true是为了让服务端能正确的接收到sysid的值;

运行完此程序之后returnVal的值为1returnBoolVal的值为true

 

此例子说被VS2005加载进来的接口,参数确实增多了,这个接口参数增加了4个之多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章