当前位置:首页 > Asp.Net Ajax 学习笔记8 客户端访问WebService(下)

Asp.Net Ajax 学习笔记8 客户端访问WebService(下)

点击次数:1414  更新日期:2010-12-29
\n

1、改变客户端访问WebService代理方法名


\n

客户端无法重载函数,只能根据arguments的参数来判断。并且不能根据参数的类型来判断
如果WebService端有函数的重载,这时候映射到客户端是无法区别的。那么我们需要把函数的重载在客户端映射成非重载函数。在WebService方法上添加一个[WebMethod(MessageName = “…")]这样一个标记 [WebMethod]
public int GetRandom()
{
return new Random(DateTime.Now.Millisecond).Next();
}


\n

[WebMethod(MessageName="GetRangeRandom")]
public int GetRandom(int minValue, int maxValue)
{
return new Random(DateTime.Now.Millisecond).Next(minValue, maxValue);
}如例所示,那么有两个参数的GetRandom方法映射到客户端就是GetRangeRandom方法了。当然,不一定是重载时才能改变方法名,但是在重载时改变方法名才能体现这个标记的意义。
2、使用Http的Get方式访问WebService的方法


\n

使用Get方式访问WebService的方法,必须加上[ScriptMethod(UseHttpGet=true)]标记 [WebMethod]
[ScriptMethod(UseHttpGet=true)]
public int GetRangeRandom(int minValue, int maxValue)
{
return new Random(DateTime.Now.Millisecond).Next(minValue, maxValue);
}
参数将使用QueryString进行传递
性能较HTTPPOST方法略有提高
3、让方法返回XML对象


\n

客户端调用WebService方法默认使用JSon字符串返回数据。
要返回XML对象必须给ScriptMethod标记加上ResponseForma=ResponseFormat.Xml参数
Response的Content-Type将被设置为text/xml
返回普通对象时将使用XmlSerializer输出,如上面例子中返回Employee
返回字符串时可以直接作为XML字符串输出,就是说就算给出XML结构类似的字符串,经过XmlSerializeString处理之后,会将<和>转义,并且根元素为string //输入的XML结构的字符串
<xml>hello</xml>


\n

//被XmlSerializeString处理后输出的字符串,根元素为string,<>被转义
<string>&lt;xml&gt;hello&lt;/xml&gt;</string>


\n

4、在WebService方法中使用Session


\n

在WebMethod标签中加入EnableSession=true参数 [WebMethod(EnableSession = true)]
public int AddOne()
{
HttpSessionState session = HttpContext.Current.Session;
object objValue = session["value"];
int value = objValue == null ? 0 : (int)objValue;
value++;
session["value"] = value;
return value;
}
5、在客户端调用WebService的安全性


\n

完全适应Asp.Net的认证机制
可以使用FormsAuthentication,让WebService方法可以操作Cookie
Impersonation
PrincipalPermission
6、不使用WebService代理的对应方法,使用客户端代理直接调用WebService方法。


\n

Invoke方法签名
Sys.Net.WebServiceProxy.invoke= function (
servicePath,/*Service路径*/
methodName,/*方法名*/
useGet,/*是否使用HTTPGET方法*/
params,/*方法参数*/
onSucceeded,/*成功后的回调函数*/
onFailure,/*失败后的回调函数*/
userContext,/*用户上下文对象*/
timeout /* 超时时间*/){ } function getRandom(minValue, maxValue)
{
Sys.Net.WebServiceProxy.invoke(
“Services/UseHttpGetService.asmx”,
“GetRangeRandom”,
true,
{ “minValue” : minValue,
“maxValue” : maxValue},
onSucceeded,
null,
null,
-1);
}


\n

对应上面的invoke参数说明和例子,对WebService生成的代理方法是如何调用WebService有一定了解

\n