当时的情况是要与某企业(客户端是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)
...{
//..............
}
}
希望对各位有所帮助.
5605

被折叠的 条评论
为什么被折叠?



