从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 下一个例子展示了CTP版本中调用上述方法的客户端代码。如下: // Invoke method, specifying a "succeeded" callback function. 下面的两个例子展示了上述代码在RTM版本的相应的定义与使用方式。RTM版本中服务器端方法的定义方式和下面的例子类似。如下: [ScriptService] RTM版本中访问服务器端方法的客户端代码与下面的例子类似。如下: // Invoke method, specifying callback functions and user context. 在RTM版本中,您能够指定一个默认的回调函数和默认的user context,这样访问Web Service方法时就无需指定那些参数了。下面的客户端代码设置了默认的回调函数和user context,然后使用不同的参数连续调用了两次Web Services方法。 var Fs = MyNS.MyService; Server Attributes 在CTP版本中,使用了.NET Framework中服务器端的自定义属性,以此对Web Services方法进行特定的控制。在RTM版本中引入了新的自定义属性来提供这些功能。这些改变的原因是考虑到安全因素,以及避免复用现有类库所带来的语义上的差别。 针对Web Service方法的改变有: 必须使用[ScriptService]自定义属性来标记Web Services类,使它的方法能够从客户端访问。 [ScriptIgnore]自定义属性能够用来避免某个类的属性或者实例变量被JSON序列化,从而使它们不会出现在客户端为服务器端对象生成的代理中。这个自定义属性与CTP版本中[XmlIgnore]自定义属性的作用相对应。 [GenerateScriptType()]自定义属性的作用是为服务器端的类型添加客户端代理,这样就可以将其作为Web Services方法的参数或返回值了。这个自定义属性可以使用在任何Web Service类和方法中。这个自定义属性与CTP版本中[XmlInclude]自定义属性的作用相对应 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服务组件的实现 相关的类名从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 var x = Sys.Services.ProfileService.properties.SimpleProperty; 下面的示例展示了改变Profile属性的方式。如下: Sys.Services.ProfileService.properties.SimpleProperty = "value"; 下面的示例展示了保存Profile属性的方式。如下: // Save specific properties, after setting default success and 下面的示例展示了completed回调函数参数信息。如下: function loadCompletedCallback(numPropertiesLoaded, 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(); 下面的示例展示了completed回调函数的参数信息。如下:
下面的示例展示了failed回调函数的参数信息。如下: function loginFailed(errorObject, userContext, methodName) {...} |
