AppFabric中托管与部署服务的详细指南
立即解锁
发布时间: 2025-08-26 01:26:39 阅读量: 2 订阅数: 6 


深入理解AppFabric架构
### AppFabric 中托管与部署服务的详细指南
在现代软件开发中,高效地托管和部署服务至关重要。AppFabric 提供了强大的功能,使得 WCF 和 WF 服务的托管与部署变得更加简单和高效。本文将详细介绍在 AppFabric 中进行服务托管、部署以及相关配置的具体步骤和方法。
#### 1. 准备工作
在开始之前,需要确保应用程序池选择 .NET Framework 4.0,因为 AppFabric 支持托管使用 .NET Framework 4.0 构建的 WCF 和 WF 服务。
#### 2. 添加新网站
##### 2.1 为 Contoso Claims Web 应用添加新网站
添加新网站以托管 Contoso Claims Web 应用需要以下三个步骤:
1. 启动 IIS。
2. 展开服务器节点,右键单击“站点”,然后选择“添加网站”以打开“添加网站”对话框。
3. 输入或选择以下值,然后点击“确定”:
| 属性 | 值 |
| --- | --- |
| 站点名称 | Contoso.Claims.Web |
| 应用程序池 | ContosoAppPool |
| 物理路径 | C:\Pro AppFabric Book\Contoso\WebSites\Contoso.Claims.Web |
| 端口 | 89 |
| 主机 | Localhost |
| 立即启动网站 | (已选中) |
**注意**:创建新网站时,向导默认会创建一个与网站同名的新应用程序池。请确保点击“选择”并选择之前创建的 ContosoAppPool。
##### 2.2 托管 Contoso WCF 和 WF 服务
添加新网站以托管 Contoso WCF 和 WF 服务也需要三个步骤:
1. 启动 IIS。
2. 展开服务器节点,右键单击“站点”,然后选择“添加网站”以打开“添加网站”对话框。
3. 输入或选择以下值,然后点击“确定”:
| 属性 | 值 |
| --- | --- |
| 站点名称 | Contoso.Claims.Services |
| 应用程序池 | ContosoAppPool |
| 物理路径 | C:\Pro AppFabric Book\Solution\Claims.Services |
| 端口 | 90 |
| 主机 | Localhost |
| 立即启动网站 | (已选中) |
#### 3. 将 Contoso WCF 服务部署到 AppFabric
为了将 Contoso WCF 服务部署到 AppFabric,需要完成以下几个步骤:
1. **迁移项目**:将每个 WCF 服务项目从 WCF 服务库迁移到 WCF 服务应用程序。
2. **打包项目**:使用 Visual Studio 2010 的“打包/发布向导”将 WCF 服务应用程序项目打包成 Web 部署包。
3. **部署服务**:使用这些包将 Contoso WCF 服务部署到 AppFabric。
4. **移除旧主机**:成功部署 WCF 服务到 AppFabric 并确保服务可用且可通过 AppFabric 仪表板管理后,移除之前创建的所有相应控制台应用程序主机。
##### 3.1 迁移到 WCF 服务应用程序项目
以 Appraisal.WCF 服务为例,将现有 WCF 服务库项目迁移到新的 WCF 服务应用程序项目的步骤如下:
1. 启动 Microsoft Visual Studio 2010。
2. 打开之前使用的解决方案文件:Claims.sln。
3. 右键单击 Claims 解决方案节点,然后选择“添加” -> “新项目...”以打开“添加新项目”对话框。
4. 添加一个类型为 WCF 服务应用程序的新项目,命名为 AppraisalService.WCF。
5. 添加对 BusinessEntities 项目的程序集引用。
6. 从项目中移除 IService1.cs 文件。
7. 将 Service1.svc 文件重命名为 AppraisalService.svc。
8. 删除 AppraisalService.svc.cs 文件(如果存在),因为将使用单个服务定义文件来描述和实现 WCF 服务。
9. 右键单击 AppraisalService.svc 模块,选择“查看标记”菜单选项。
10. 在旧的 Appraisal.WCF 项目中,打开 AppraisalService.cs 模块并复制其内容。
11. 将剪贴板内容粘贴到 AppraisalService.svc 文件末尾,并用命名空间 AppraisalService.WCF {} 进行包裹。同时,根据需要添加 [ServiceContract] 和 [OperationContract] 属性。
最终的 AppraisalService.svc 模块应如下所示:
```xml
<%@ ServiceHost Language="C#" Debug="true"
Service="AppraisalService.WCF.AppraisalService" %>
namespace AppraisalService.WCF
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using BusinessEntities;
[ServiceContract]
public class AppraisalService
{
ClaimRepository claimRepository = new ClaimRepository();
[OperationContract]
public List<Claim> FindAllClaims()
{
return claimRepository.FindAllClaims().ToList<Claim>();
}
[OperationContract]
public List<Claim> FindPendingClaims()
{
return claimRepository.FindPendingClaims().ToList<Claim>();
}
[OperationContract]
public Claim GetLastClaim()
{
return claimRepository.GetLastClaim();
}
[OperationContract]
public Claim GetClaim(int claimId)
{
return claimRepository.GetClaim(claimId);
}
[OperationContract]
public void Save(Claim claim)
{
Console.WriteLine("{0}: The claim # {1} is being saved in the backend system.", DateTime.Now.ToShortTimeString(), claim.ClaimId);
Claim originalClaim = claimRepository.GetClaim(claim.ClaimId);
//Update the claim
originalClaim.AccidentId = originalClaim.AccidentId;
originalClaim.Accidents.FName = claim.Accidents.FName;
originalClaim.Accidents.LName = claim.Accidents.LName;
originalClaim.Accidents.Address = claim.Accidents.Address;
originalClaim.Accidents.City = claim.Accidents.City;
originalClaim.Accidents.ContactPhone = claim.Accidents.ContactPhone;
originalClaim.Accidents.State = claim.Accidents.State;
originalClaim.Accidents.Zip = claim.Accidents.Zip;
originalClaim.Accidents.Latitude = claim.Accidents.Latitude;
originalClaim.Accidents.Longitude = claim.Accidents.Longitude;
originalClaim.Description = claim.Description;
originalClaim.DateCreated = claim.DateCreated;
originalClaim.Status = claim.Status;
originalClaim.RentalCar = claim.RentalCar;
claimRepository.Save();
Console.WriteLine("{0}: The claim # {1} has been saved.",
DateTime.Now.ToShortTimeString(), claim.ClaimId);
}
}
}
```
这是 WCF 服务定义的最简单形式,因为没有使用
0
0
复制全文
相关推荐










