探索Silverlight与ASP.NETWeb服务的集成与应用
立即解锁
发布时间: 2025-08-26 01:35:14 阅读量: 4 订阅数: 18 


Silverlight 4 in VB: 创建跨平台浏览器应用
### 探索Silverlight与ASP.NET Web服务的集成与应用
#### 1. Silverlight动画与HTML互操作性安全
在使用特定动画时,需要在`element_MouseOver()`事件处理程序的末尾添加如下语句:
```vb
fadeUp.Begin()
```
Silverlight的HTML互操作性功能带来了新的安全考量。当Silverlight应用程序和托管网页由不同方开发时,存在Silverlight应用程序中的恶意代码篡改页面上其他HTML内容,或者HTML页面中的JavaScript代码携带恶意信息调用Silverlight应用程序,从而导致执行错误操作的风险。
为了限制Silverlight的HTML互操作性,可以在HTML入口页面设置以下两个参数:
- **enableHtmlAccess**:设置为`false`时,Silverlight应用程序将无法使用大多数HTML互操作性功能,如`HtmlPage`类的`Document`、`Window`、`Plugin`和`BrowserInformation`属性,但仍可调用`HtmlPage.PopupWindow()`方法。通常情况下,该参数默认为`true`,需要显式关闭;若Silverlight应用程序与HTML入口页面托管在不同域名下,则默认值为`false`,可选择显式开启以允许HTML互操作性。
- **allowHtmlPopupwindow**:设置为`false`时,Silverlight应用程序无法使用`HtmlPage.PopupWindow()`方法显示弹出窗口。当测试页面和Silverlight应用程序一起部署时,该参数默认值为`true`;当Silverlight应用程序托管在不同域名下时,默认值为`false`。
以下是设置这两个参数的示例代码:
```html
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="enableHtmlAccess" value="false" />
<param name="allowHtmlPopupwindow" value="false" />
...
</object>
<iframe style="visibility:hidden;height:0;width:0;border:0px"></iframe>
</div>
```
Silverlight还提供了保护应用程序免受JavaScript代码影响的功能。需要注意的是,JavaScript代码只有在显式指定某些类和方法为可脚本化时才能与应用程序交互。若HTML入口页面和Silverlight应用程序部署在一起,指定为可脚本化的方法将对HTML入口页面可用;若它们托管在不同域名下,HTML页面将无法访问这些可脚本化的类和方法。若要允许跨域访问可脚本化成员,可以在应用程序清单文件`AppManifest.xml`中设置`ExternalCallersFromCrossDomain`属性:
```xml
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ExternalCallersFromsCrossDomain="ScriptableOnly" ...>
<Deployment.Parts>
...
</Deployment.Parts>
</Deployment>
```
但使用此选项时需谨慎,因为可能会有未知人员在未经授权的情况下创建托管Silverlight应用程序的HTML页面,若允许跨域访问可脚本化方法,任何人都可以随时调用这些方法并传递任意信息。
#### 2. ASP.NET Web服务概述
一些有趣的Silverlight应用程序依赖于服务器端代码,如从数据库检索数据、执行身份验证、存储数据、提交耗时任务等,这些都基于Web服务。Web服务是服务器端逻辑库,任何具备Web功能的应用程序都可以访问。
接下来将学习如何创建ASP.NET Web服务并从Silverlight应用程序调用它们,包括处理不同类型的数据、处理安全问题、利用ASP.NET服务、监控客户端网络连接,甚至构建双向Web服务。
#### 3. 为Silverlight构建Web服务
Silverlight应用程序访问服务器端代码最有效的方式是通过Web服务。基本思路是在ASP.NET网站中包含一个Web服务,Silverlight应用程序调用该Web服务中的方法。Web服务可以提供客户端无法获取或计算成本过高的服务器生成内容,还可以对服务器端数据库执行查询和更新操作,甚至利用ASP.NET服务,如身份验证、缓存和会话状态。
Silverlight应用程序可以调用传统的ASP.NET Web服务(.asmx服务)和较新的WCF服务。下面将详细介绍如何构建、调用和优化WCF服务。
#### 4. 创建Web服务
在Visual Studio中创建WCF服务的步骤如下:
1. 在解决方案资源管理器中右键单击ASP.NET网站,选择“添加新项”。
2. 选择“Silverlight启用的WCF服务”模板,输入文件名,然后点击“添加”。
添加新的WCF服务时,Visual Studio会创建两个文件:
- **服务端点**:扩展名为`.svc`,位于网站根文件夹中。例如,创建名为`TestService`的Web服务,将生成`TestService.svc`文件。客户端使用Web服务时,请求指向该`.svc`文件的URL,但该文件不包含代码,仅包含一行标记,用于告知ASP.NET在哪里找到对应的Web服务代码。
- **服务代码**:若创建的是无项目网站,服务代码将放置在网站的`App_Code`文件夹中;若创建的是Web项目,则放置在单独的代码隐藏文件中。例如,创建名为`TestService`的Web服务,在无项目网站中会生成`TestService.vb`文件,在Web项目中会生成`TestService.svc.vb`文件。无论哪种情况,文件内容都是实现服务接口并提供Web服务实际代码的类。
Web服务的代码文件开头包含两个属性:
```vb
<ServiceContract, AspNetCompatibilityRequirements( _
RequirementsMode := AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class TestService
...
End Class
```
其中,`ServiceContract`属性表示定义了一个服务契约,即计划作为服务的一部分向远程调用者公开的一组方法;`AspNetCompatibilityRequirements`属性表示该服务可以访问ASP.NET平台功能,如会话状态。
若要添
0
0
复制全文
相关推荐










