DotNet服务开发指南Word文件下载.docx
《DotNet服务开发指南Word文件下载.docx》由会员分享,可在线阅读,更多相关《DotNet服务开发指南Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
3.2自定义Binding服务发布17
3.2.1系统环境17
3.2.2开发环境17
3.2.3服务编写及配置18
3.2.4引用自定义Binding方式WCF服务23
1引言
1.1文档目的
本文档用以指导开发人员如何在.Net开发环境下发布系统应用服务,文档分为WebService服务开发和WCF服务开发两部分。
1.2参考资料
2WebService服务开发
2.1概述
WebServices是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;
它是一种新的web应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
WebService是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问WebService,通过WebService内部执行得到所需结果.WebService可以执行从简单的请求到复杂商务处理的任何功能。
一旦部署以后,其他WebService应用程序可以发现并调用它部署的服务。
其功能图如下:
2.2WSE方式服务发布
2.2.1系统环境
操作系统:
Windows2000/2003/XPWindowsNT/Windows7为内核的操作系统,IIS6.0/7.0
运行库:
Microsoft.NETFramework3.5SP1
数据访问:
Oracle客户端组件或MSSQLServer2005
2.2.2开发环境
名称
版本
用途说明
MicrosoftVisualStudio2008
9.0.30729.1SP
.Net开发环境,可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。
MicrosoftWSE3.0
V3.0
(需在安装选项中选择Developer项)
WebServicesEnhancements3.0forMicrosoft.NET(WSE)是一个用来建设Web服务的.NET类库,它支持最新的Web服务协议,包括WS-Security、WS-SecureConversation、WS-Trust、WS-Policy、WS-SecurityPolicy、WS-Addressing和WS-Attachments。
WSE可使开发人员跨安全平台建设可升级的、安全的Web服务。
它支持用传输的方式发送SOAP消息,而不是HTTP。
另一个特点是具有建立SOAP路由器的功能,SOAP消息被发送给SOAP路由器,路由器再将工作交付给托管该服务的Web服务器。
2.2.3发布步骤
第一步:
创建ASP.NET应用程序:
第二步:
创建和配置WebService服务
1.创建WebService服务
2.在服务项目中,添加对Microsoft.Web.Service3.dll的引用
3.添加配置文件
4.添加验证类
5.验证类继承UsernameTokenManager
6.重写AuthenticateToken(UsernameTokentoken)方法
protectedoverridestringAuthenticateToken(UsernameTokentoken)
{
boolcheckPass=CheckPassw(token);
if(checkPass)
returntoken.Password;
}
else
thrownewException("
UserNameOrPasswordWrong"
);
}
7.编写安全验证类CheckPassw
publicboolCheckPassw(UsernameTokentoken)
boolresult=false;
if(token.PasswordOption==PasswordOption.SendPlainText)
if(token.Username=="
admin"
&
&
token.Password=="
123456"
)
result=true;
returnresult;
8.在服务实现类中添加安全策略标示[Policy("
ServerPolicy"
)]
9.修改Web.config配置信息
首先在<
system.web>
节点中添加<
webServices>
节点,确定协议方式
节点内容如下:
<
<
soapServerProtocolFactorytype="
Microsoft.Web.Services3.WseProtocolFactory,Microsoft.Web.Services3,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"
/>
soapExtensionImporterTypes>
addtype="
Microsoft.Web.Services3.Description.WseExtensionImporter,Microsoft.Web.Services3,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"
/soapExtensionImporterTypes>
/webServices>
第二步:
在配置文件中添加<
microsoft.web.services3>
节点(注不要添加在<
节点中)
确定服务安全检查类addtype="
TestWebService.WebServiceUsernameTokenManager"
书写规则注释:
命名空间+类名称
diagnostics>
traceenabled="
false"
input="
InputTrace.webinfo"
output="
OutputTrace.webinfo"
detailedErrorsenabled="
/diagnostics>
security>
securityTokenManager>
!
--Youcanoptionallychoosetosupplythenameofthedll(SampleBase)inwhichtofindtheCustomUsernameTokenManagertype-->
--Ifnodllnameissupplied(asinthiscase)theCustomUsernameTokenManagerisassumedtobeinthethe\bindirectory-->
namespace="
http:
//docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
localName="
UsernameToken"
xmlns="
"
/securityTokenManager>
--<
x509allowTestRoot="
true"
-->
/security>
policyfileName="
wse3policyCache.config"
tokenIssuer>
statefulSecurityContextTokenenabled="
/tokenIssuer>
/microsoft.web.services3>
第三步:
注意事项
1.检查配置文件中<
configSections>
节点是否添加引用配置
添加节点内容如下:
sectionname="
microsoft.web.services3"
type="
Microsoft.Web.Services3.Configuration.WebServicesConfiguration,Microsoft.Web.Services3,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"
2.检查配置文件中<
assemblies>
添加节点内容如下:
addassembly="
Microsoft.Web.Services3,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35"
2.2.4引用WSE方式服务
客户端程序添加Web引用
在服务项目中,添加对Microsoft.Web.Service3.dll的引用
添加Web项目中平台提供的WSE配置文件
第四步:
修改Web程序web.config文件
1.首先在<
2.在配置文件中添加<
3.注意事项
检查配置文件中<
第五步:
修改引用服务类Reference.cs文件
1.命名空间添加WSE引用
usingMicrosoft.Web.Services3;
2.修改引用服务类继承类
修改为Microsoft.Web.Services3.WebServicesClientProtocol
修改完成代码如下:
客户端使用,代码如下:
protectedvoidPage_Load(objectsender,EventArgse)
//使用WebService的WSE方式是,要修改引用服务的Reference的CS文件,加入以用usingMicrosoft.Web.Services3;
,同时让类继承Microsoft.Web.Services3.WebServicesClientProtocol
Microsoft.Web.Services3.Security.Tokens.UsernameTokentoken=newMicrosoft.Web.Services3.Security.Tokens.UsernameToken("
"
Microsoft.Web.Services3.Security.Tokens.PasswordOption.SendPlainText);
WebRef.WSWseSecurityServiceaa=newTestWebService.WebRef.WSWseSecurityService();
aa.SetClientCredential(token);
aa.SetPolicy("
DataTabledt=aa.QueryStaffByPersonID("
8acfecd32c2fb035012c2fb6ea6b0002"
3WCF服务开发
3.1概述
WindowsCommunicationFoundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由.NETFramework3.0开始引入。
在.NETFramework2.0以及前版本中,微软发展了WebService(SOAPwithHTTPcommunication),.NETRemoting(TCP/HTTP/Pipelinecommunication)以及基础的Winsock等通信支持,由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性(例如.NETRemoting可以开发SOAP,HTTP通信),因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是WCF
合约(Contract)
WCF的基本概念是以合约(Contract)来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。
合约分成了四种:
数据合约(DataContract),订定双方沟通时的数据格式;
服务合约(ServiceContract),订定服务的定义;
操作合约(OperationContract),订定服务提供的方法;
消息合约(MessageContract),订定在通信期间改写消息内容的规范。
协议绑定(Binding)
由于WCF支持了HTTP,TCP,NamedPipe,MSMQ,Peer-To-PeerTCP等协议,而HTTP又分为基本HTTP支持(BasicHttpBinding)以及WS-HTTP支持(WsHttpBinding),而TCP亦支持NetTcpBinding,NetPeerTcpBinding等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。
安全性层次
WCF实现上已经支持了传输层次安全性(Transport-levelsecurity)以及消息层次安全性(Message-levelsecurity)两种。
传输层次安全性:
在数据传输时期加密,例如SSL。
消息层次安全性:
在数据处理时就加密,例如使用数字签名,散列或是使用密钥加密法等
3.2自定义Binding服务发布
3.2.1系统环境
3.2.2开发环境
WebServicesEnhancements2.0forMicrosoft.NET(WSE)是一个用来建设Web服务的.NET类库,它支持最新的Web服务协议,包括WS-Security、WS-SecureConversation、WS-Trust、WS-Policy、WS-SecurityPolicy、WS-Addressing和WS-Attachments。
3.2.3服务编写及配置
1.建立一个Web应用程序工程WebApp.
2.新建一个接口:
IBussiness
3.添加System.ServiceModel引用
4.对IBussiness实现契约
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.ServiceModel;
namespaceWebApp
{
[ServiceContract]
publicinterfaceIBussiness
[OperationContract]
stringOperate();
}
注:
[ServiceContract]为服务契约标签,[OperationContract]为操作契约标签
5.创建一个类Bussiness,实现IBussiness接口
usingSystem.Web;
publicclassBussiness:
IBussiness
#regionIBussiness成员
stringIBussiness.Operate()
return"
CalledSuccess"
;
#endregion
6.创建一个WCF服务BussService,解决方案中会自动产生三个文件BussService.svc,BussService.svc.cs,IBussService.cs
7.删除BussService.svc.cs,IBussService.cs两个文件,并修改WCF宿主文件BussService.svc为
%@ServiceHostLanguage="
C#"
Debug="
Service="
WebApp.Bussiness"
%>
8.添加UserNameToken验证类,并重写Validate方法(本示例采用了直接判断简单的验证方式,可在此方法中设置复杂验证手段,如将用户名密码存入数据库等)
usingSystem.IdentityModel.Selectors;
usingSystem.IdentityModel.Tokens;
publicclassMyUserNameTokenValidator:
UserNamePasswordValidator
///<
summary>
///Validatestheusernameandpasswordcombination.
/summary>
paramname="
userName"
>
Theusername.<
/param>
password"
Thepassword.<
publicoverridevoidValidate(stringuserName,stringpassword)
//validatearguments
if(string.IsNullOrEmpty(userName))
thrownewArgumentNullException("
//checkiftheuserisnotxiaozhuang
if(userName!
="
user"
||password!
thrownewSecurityTokenException("
用户名或者密码错误!
9.添加自定Binding引用(SOA.ClearUserNameBind