从Atlas到Microsoft ASP.NET AJAX(6) - Networking, Application Services

简介:
Networking


Calling Web Service Methods from Script

  为了简化Web Services方法调用,客户端代理的设计被改变了,它在方法调用和回调函数设置方面提供了强大的灵活性。

  下面的例子展示了CTP版本中Web Services方法的客户端调用,以及回调函数的使用方式。第一个例子展示了在CTP版本中Web service的定义方式。如下:
public   class  MyService: System.Web.Services.WebService
{
    [WebMethod]
    
public   string  MyWebMethod( int  param1,  string  param2) {
        ...
    }
}

  下一个例子展示了CTP版本中调用上述方法的客户端代码。如下:
//  Invoke method, specifying a "succeeded" callback function.
MyNS.MyService.MyMethod( 126 " my value " , OnComplete, 
    OnTimeout, OnError, onAborted, 
" MyUserContext " );

//  Callback function.
function  OnComplete(result, response, userContext) {
    
//  Use result.
}

  下面的两个例子展示了上述代码在RTM版本的相应的定义与使用方式。RTM版本中服务器端方法的定义方式和下面的例子类似。如下:
[ScriptService] 
public   class  MyService: System.Web.Services.WebService
{
    [WebMethod]
    
public   string  MyMethod( int  param1,  string  param2) {
        ...
    }
}

  RTM版本中访问服务器端方法的客户端代码与下面的例子类似。如下:
//  Invoke method, specifying callback functions and user context.
MyNS.MyService.MyMethod( 126 " my value " , OnSuccess, OnFailure,  " MyUserContext " );

//  Callback function
function  OnSuccess(result, userContext, methodName) {
    
//  Use result.
}

  在RTM版本中,您能够指定一个默认的回调函数和默认的user context,这样访问Web Service方法时就无需指定那些参数了。下面的客户端代码设置了默认的回调函数和user context,然后使用不同的参数连续调用了两次Web Services方法。
var  Fs  =  MyNS.MyService;
Fs.set_defaultSucceededCallback(OnSuccess);
Fs.set_defaultFailedCallback(OnFailure);
Fs.set_defaultUserContext(
" MyUserContext " );
Fs.set_timeout(
100 );

//  Invoke method without specifying callback functions or user context.
Fs.MyMethod( 126 " value one " );
Fs.MyMethod(
456 " value two " );


Server Attributes

  在CTP版本中,使用了.NET Framework中服务器端的自定义属性,以此对Web Services方法进行特定的控制。在RTM版本中引入了新的自定义属性来提供这些功能。这些改变的原因是考虑到安全因素,以及避免复用现有类库所带来的语义上的差别。

  针对Web Service方法的改变有:
  • 必须使用[ScriptService]自定义属性来标记Web Services类,使它的方法能够从客户端访问。
  • [ScriptIgnore]自定义属性能够用来避免某个类的属性或者实例变量被JSON序列化,从而使它们不会出现在客户端为服务器端对象生成的代理中。这个自定义属性与CTP版本中[XmlIgnore]自定义属性的作用相对应。
  • [GenerateScriptType()]自定义属性的作用是为服务器端的类型添加客户端代理,这样就可以将其作为Web Services方法的参数或返回值了。这个自定义属性可以使用在任何Web Service类和方法中。这个自定义属性与CTP版本中[XmlInclude]自定义属性的作用相对应。
Comment  在这之前其实我已经在“深入Atlas系列”中将Atlas中访问Web Services方法的主要功能讨论完了,在了解Microsoft ASP.NET AJAX针对这部分的改变之后我也去简单阅读了一下程序集的代码。这部分代码的改变并不如想象中的大(也有可能是因为我没有仔细研究其细节)。其服务器端的实现虽然进行了修改和重构,但是原有功能大致不变。另外,服务器端的功能也增强了,例如到目前为止,我发现目前的实现已经能够支持Dictionary<T, K>这样的范型字典。哎,还算是不幸中的万幸,“深入Atlas系列”中“分析”部分的文章没有完全丧失其价值,只是“示例”部分可以说真正的无一幸免……

Support for WCF Web Services

  在RTM版本里,您已经无法从客户端访问Windows Communication Foundation (WCF) Web Services(.svc文件)了。访问WCF的能力将会被一个增强的实现所替代,在接下来的“Orcas”CTP中将有对于WCF的完全集成。


Advanced Networking Scenarios Not Available in the RTM Release

  CTP版本内的下列功能在RTM版本中被取消了:
  • iframe调用。这个功能可以支持跨域名的调用,处于安全性考虑,在RTM中这项功能被移除了。
  • 下列不常用的功能:
    • 机遇程序集的方法调问。
    • InitialData控件。
    • Web Service的批量调用。


Application Services

  在RTM版本中,我们为客户端使用Authentication服务和Profile服务提供了一个简化的并且更为灵活的设计。这个设计与前面讲过的客户端访问Web Services方法保持了统一。


Profile Services

  RTM版本的Profile服务使用了Web Service客户端代理的模型,而没有单独作为一个组件而实现。但是,Value-add包内提供了一个Profile服务组件的实现。

  CTP版本和RTM版本中关于Profile服务的主要改变有以下几点:
  • 相关的类名从Sys._Profile改变为Sys.Services._ProfileService。
  • 全局实例从Sys.Profile改变为Sys.Services.ProfileService。
  • 开发人员可以为save,load和error方法指定默认的回调函数。
  • 增加了使用字符串数组作为参数的save和load方法。
  • 增加了对于Profile Group的支持。
  • 增加了使用ScriptManager和ProfileServiceManager服务器端控件预加载Profile属性的支持。
  • 去除了AutoSave功能。
  • 去除了saved,loaded和propertyChanged事件。

  Value-add包提供的Profile服务缩小了CTP版本中的Profile组件和RTM版本中Profile代理之间的距离。它有以下一些功能:
  • 类名变成了Sys.Preview.Services.Compoenents.Profile。
  • XML-Script的标签仍然是<profile />
  • 如果没有指定preloading功能的话,该组件会在页面加载时自动加载profile信息。
  • 该组件提供了AutoSave功能。
  • 该组件提供了saved和loaded事件。
  • 该组件提供了getProperty()和setProperty()方法。
  • 该组件可以作为Binding的target或source。

  下列示例展示了Profile服务的使用方式。第一个示例展示了如何加载Profile信息。如下:
//  Load specific properties, after setting default completed
//
 and failed callback functions.
Sys.Services.ProfileService.load([ " SimpleProperty " " Group.GroupedProperty " ]); 

//  Load all properties marked as "read access" in the Web service,
//
 after setting default completed and failed callback functions.
Sys.Services.ProfileService.load();

//  Specify explicit callbacks rather than using defaults. "88" is 
//
 passed to the callback function as user context.
Sys.Services.ProfileService.load(props, loadCompletedCallback, failedCallback,  88 ); 

  下面的示例展示了访问Profile属性的方法。如下:
var  x  =  Sys.Services.ProfileService.properties.SimpleProperty;

var  x  =  Sys.Services.ProfileService.properties.Group.GroupedProperty1;

var  x  =  Sys.Services.ProfileService.properties.Group.GroupedComplexTypeProperty.AddressLine1;

  下面的示例展示了改变Profile属性的方式。如下:
Sys.Services.ProfileService.properties.SimpleProperty  =   " value " ;

if ( ! Sys.Services.ProfileService.properties.Group) {
      Sys.Services.ProfileService.properties.Group 
=   new  Sys.Services.ProfileGroup();
}
Sys.Services.ProfileService.properties.Group.GroupedProperty1 
=   " group value " ;
Sys.Services.ProfileService.properties.Group.GroupedComplexTypeProperty 
=  { AddressLine1:  " abc " , AddressLine2:  " xyz "  };

  下面的示例展示了保存Profile属性的方式。如下:
//  Save specific properties, after setting default success and 
//
 fail callback functions.
Sys.Services.ProfileService.save([ " SimpleProperty " " Group.GroupedProperty " ]); 

//  Save all properties in the .properties object, after 
//
 setting default completed and failed callback functions.
Sys.Services.ProfileService.save(); 

//  Specify explicit callbacks, rather than using defaults. "88" is 
//
 passed to the callback function as user context.
Sys.Services.ProfileService.save(props, saveCompletedCallback, failedCallback,  88 );

  下面的示例展示了completed回调函数参数信息。如下:
function  loadCompletedCallback(numPropertiesLoaded, userContext, methodName) {...} 

function  saveCompletedCallback(numPropertiesSaved, userContext, methodName) {...}

  下面的示例展示了failed回调函数的参数信息。如下:
function  failedCallback(errorObject, userContext, methodName) {...}



Autentication Service

  CTP版本和RTM版本中Authentication服务的改变有以下几点:
  • 您可以为login,logout和error指定默认的回调函数。
  • 在login和logout函数中,可以传递一个redirectUrl作为参数,指定操作完成后的页面转向。
  • 在login函数中,可以传递一个customInfo作为参数,这个参数为今后使用而保留,目前应该设置为null。
  • 增加了get_isLoggedIn方法。这个方法不会与服务器端交互,它只和当前组件的状况有关。如果您使用了未指定redirctUrl参数的login函数,则在login成功之后,get_isLoggedIn就会返回true。
  • 去除了verifyUser方法。

  下面的示例表示了如何在RTM版本如何使用Authentication服务。如下:
var  loggedIn  =  Sys.Services.AuthenticationService.get_isLoggedIn(); 

Sys.Services.AuthenticationService.login(userLogin, userPassword, isPersistentCookie,
    customInfo, redirectUrl, loginCompletedCallback, failedCallback, userContext);

Sys.Services.AuthenticationService.logout(redirectUrl, logoutCompletedCallback, failedCallback, userContext);

  下面的示例展示了completed回调函数的参数信息。如下:
function  loginCompleted(validCredentials, userContext, methodName) {...}

  下面的示例展示了failed回调函数的参数信息。如下:
function  loginFailed(errorObject, userContext, methodName) {...}


本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/59546,如需转载请自行联系原作者
相关文章
|
1天前
|
开发框架 前端开发 JavaScript
ASP.NET AJAX使用方法概述(三)
ASP.NET AJAX使用方法概述(三)
|
2天前
|
开发框架 缓存 前端开发
安装ASP.NET AJAX (一安装)
安装ASP.NET AJAX (一安装)
|
3月前
|
安全 C# 开发者
.NET开源的一键自动化下载、安装、激活Microsoft Office利器
.NET开源的一键自动化下载、安装、激活Microsoft Office利器
|
5月前
|
SQL 数据库连接 数据库
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
106 0
|
6月前
|
开发框架 前端开发 .NET
用ajax和asp.net实现智能搜索功能
用ajax和asp.net实现智能搜索功能
46 0
|
7月前
|
开发框架 .NET 数据库
asp.net企业费用报销管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
asp.net 企业费用报销管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使 用c#语言开发 应用技术:asp.net c#+sqlserver 开发工具:vs2010 +sqlserver
56 0
|
11月前
|
开发框架 前端开发 JavaScript
【Asp.net】 Ajax小例子
【Asp.net】 Ajax小例子
69 0
|
开发框架 前端开发 JavaScript
ASP.Net Core中使用jquery-ajax-unobtrusive替换Ajax.BeginForm
ASP.Net Core中使用jquery-ajax-unobtrusive替换Ajax.BeginForm
160 0
|
开发框架 移动开发 前端开发
ASP.NET MVC中使用jQuery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径
ASP.NET MVC中使用jQuery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径
251 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
46 0