跨平台调用asp.net WebService

当时的情况是要与某企业(客户端是java程序)做一个接口,存在的问题是在客户端类无法序列化,方法调用也存在一些问题,但是经过测试在.net开发环境中应用该webservice没问题,可以正常调用.

解决的办法,在要暴露给客户端要序列化的类,要被远程调用的方法前加上一些Atrubuters 

第一种是 .asmx文件的后台文件如 users.asmx.cs  ,这里需要序列化类与方法,代码如下

 

[WebService(Namespace = " http://kingonsoft.com/telehouse " )]
 [SoapRpcService(RoutingStyle
= SoapServiceRoutingStyle.SoapAction)]
 [System.Xml.Serialization.XmlTypeAttribute(Namespace
= " http://kingonsoft.com/telehouse " )] 
 [Serializable()] 
 
public   class  TeleUser : System.Web.Services.WebService
 
{

              [WebMethod]
              [SoapRpcMethod(Action
="http://61.23.210.8/UserInterface"
              RequestNamespace
="http://61.23.210.8/UserInterface/Rpc",
              RequestElementName
="UserInterfaceRequest",
              ResponseNamespace
="http://61.23.210.8/UserInterface/Rpc",
              ResponseElementName
="UserInterfaceResponse")]
              [
return: System.Xml.Serialization.SoapElementAttribute("return")]
              
public  state  AddUser(UserInfo  objUser)
              
{
                  
//.....
              }

}

第二种情况是 需要被序列化的普通实体类

     i: 如果类的内部属性只是简单数据类型,序列化方法如下

    

    [Serializable()]  
    
public    class   point
    
{
          
string  pType;
          
int quantity;
          
string factorycode;
        
public  string   PType
        
{
            
get{return  pType;}
            
set{pType=value;}
        }

        
public  int  Quantity
        
{
            
get{return  quantity;}
            
set{quantity=value;}
        }

        
public   string  FactoryCode
        
{
            
get{return  factorycode;}
            
set{factorycode=value;}
        }


    }
  

  ii:如果类的内部属性不只是简单的数据类型,比如包含有自定义的数据类型,如含有数组 Piont[] psInfo ,且定义了一个类索引器来访问类的私有字段  psInfo .

  这样的情况序列化的办法是:

 

[System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute(
" code " )]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace
= " http://61.23.210.8/UserInterface/ " )] 
    [Serializable()] 
    
public   class  UserInfo
    
{
        
public UserInfo()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
        
private     point[]  psInfo=new point[0];
        
        
private  string  areaCode="";
        
        
    
        
/// <summary>
        
/// 配件信息
        
/// </summary>

        public  point this[int index] 
        
{
            
get  
            
{
//                if ( index < 0 || index > psInfo.Length -1 )
//                {
//                    return null;
//                }
                return (point)psInfo[index];
            }

            
set  
            
{
                
if ( index <0 || index >psInfo.Length-1 )
                
{
                    
return ;
                }

                psInfo[index]
=value;
            }

        }

        
public  point[]  Point 
        
{
            
get  
            
{
                
return  psInfo;
            }

            
set  
            
{
                psInfo
=value;
            }

        }
 
        
        
/// <summary>
        
/// 城市代码
        
/// </summary>

        public  string   AreaCode
        
{
            
get{return areaCode;}
            
set{areaCode=value;}
        }

        
    }

第三种情况  普通的业务逻辑类的序列化

 

[System.SerializableAttribute()]
    
public   class  Users
    
{
                           
/// <summary>
                          
/// 删除用户信息
         
/// </summary>
                          
/// <param name="obj">用户对象</param>
         
/// <returns>状态信息</returns>

         public   state  Delete(userInfo  obj)
         
{
                              
//..............
                          }

                     }

 

    希望对各位有所帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值