ASP.NETWebServices:跨域调用、网络监控与高级服务应用
立即解锁
发布时间: 2025-08-26 01:35:14 阅读量: 14 订阅数: 47 AIGC 


Silverlight 4 in VB: 创建跨平台浏览器应用
### ASP.NET Web Services:跨域调用、网络监控与高级服务应用
#### 1. 跨域 Web 服务调用
Silverlight 在调用 Web 服务时,对于同一网站内的服务调用没有限制。若要调用其他网站的 Web 服务,则需要对方通过策略文件明确允许。
要配置 Web 服务以允许跨域调用,需创建一个名为 `clientaccesspolicy.xml` 的文件,并将其放置在网站根目录(如 IIS 服务器的 `c:\inetpub\wwwroot` 目录)。此文件用于指定允许访问 Web 服务的域名。
以下是几个不同场景的示例:
- **允许任何 Silverlight 应用访问**:
```xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
```
- **限制特定域名的 Silverlight 应用访问**:
```xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="http://www.somecompany.com" />
<domain uri="http://www.someothercompany.com" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
```
- **使用通配符允许子域名访问**:例如 `*.somecompany.com` 允许 `mail.somecompany.com`、`admin.somecompany.com` 等子域名的请求。
- **允许访问网站部分内容**:
```xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/services/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
```
此外,也可以创建 `crossdomain.xml` 文件,它最初是为 Flash 应用开发的标准,若想同时允许 Silverlight 和 Flash 应用访问,可使用该文件。但 `clientaccesspolicy.xml` 更灵活,能精确控制对网站特定部分的访问。
在使 Web 服务公开可访问时,要确保其不会被滥用,避免返回敏感数据或执行任意更改。进行跨域 Web 服务安全检查时,不能信任非请求消息一部分的 Cookie 或认证信息,可添加检查机制来防止不当使用。
#### 2. 网络连接监控
在创建可在无网络连接时运行的浏览器外应用时,可能会遇到用户在离线状态下尝试调用 Web 服务的情况,此时调用必然失败。
处理此问题,可利用失败的 Web 服务调用触发的完成事件,捕获异常并决定忽略问题或通知用户。对于间歇性连接的客户端,可使用 Silverlight 的网络监控功能更优雅地处理问题。
网络监控功能由 `System.Net.NetworkInformation` 命名空间中的两个简单类组成:
- 使用 `NetworkInterface` 类的 `GetIsNetworkAvailable()` 方法判断用户是否在线。
- 响应 `NetworkChange` 类的 `NetworkAddressChanged` 事件,检测网络状态或 IP 地址的变化。
示例代码如下:
```vb
Public Sub New()
InitializeComponent()
' Watch for network changes.
AddHandler NetworkChange.NetworkAddressChanged, AddressOf NetworkChanged
' Set up the initial user interface
CheckNetworkState()
End Sub
Private Sub NetworkChanged(ByVal sender As Object, ByVal e As EventArgs)
' Adjust the user interface to match the network state.
CheckNetworkState()
End Sub
Private Sub CheckNetworkState()
If NetworkInterface.GetIsNetworkAvailable() Then
' Currently online.
cmdCallCachedService.IsEnabled = True
cmdCallService.IsEnabled = True
Else
' Currently offline.
cmdCallCachedService.IsEnabled = False
cmdCallService.IsEnabled = False
End If
End Sub
```
需要注意,网络监控功能虽有助于构建更完善的应用,但不能替代捕获网络异常的异常处理代码。
#### 3. 使用 ASP.NET 平台服务
通常,WCF 服务无法访问 ASP.NET 平台功能,如会话状态、数据缓存、`web.config` 文件中的授权规则以及基于提供者的功能(如认证、成员资格和配置文件)。
在某些情况下,使用 ASP.NET
0
0
复制全文
相关推荐








