|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。我们晓得web程序和服务器交互的典范形式就是一问一答,就是客户端向服务器发一个哀求,然后守候哀求的了局,客户端一向要比及吸收到了局,才会持续实行。假如某个哀求的盘算必要对照长的时分,我们的页面就会假逝世形态,直到完整吸收到了局。这个就是典范的”哀求/应对形式”。
WCF中,默许情形下也是这类交互形式,但除”哀求/应对”这类典范形式外,另有”单工操纵”和”双工操纵”两种形式,上面我们就复杂地先容一下WCF中这三个形式中的”单工操纵”,再下一节演示”双工操纵”,由于我本人也是初学者,以是示例会对照的复杂,一为先容,二为本人多纯熟:
单向操纵
这类情形下,客户端不体贴服务器是否是实行哀求乐成,也不会往客户端回发动静。以是想要完成这类操纵的办法必需没有前往值,也就是前往值必需是void的办法,一样,服务器抛出的非常也不会传送到客户端。这类操纵的优点就是,客户端发送哀求后会即刻持续实行前面的代码,不会停留上去守候。
上面我们做一个复杂的示例来演示一下单向操纵:
先定一个左券:
[ServiceContract]
publicinterfaceIOperate
{
[OperationContract]
voidMyMethod();
}
这个左券中办法MyMethod没有标识为单向操纵,那末它的交互形式就是”哀求/应对”形式。
上面界说服务,完成这个左券:
publicclassOperate:IOperate
{
publicvoidMyMethod()
{
Console.WriteLine("我被实行了,我要堵塞5秒钟!");
Thread.Sleep(5000);
}
}
服务中的MyMethod使线程挂起5秒。
然后是创立服务,为把持台程序:
classProgram
{
staticvoidMain(string[]args)
{
NetTcpBindingbinding=newNetTcpBinding();
using(ServiceHosthost=newServiceHost(typeof(Operate)))
{
host.AddServiceEndpoint(typeof(IOperate),binding,"net.tcp://localhost:8001");
host.Opened+=delegate
{
Console.WriteLine("wcf服务开启!");
};
host.Open();
Console.ReadLine();
}
}
}
接上面我们创立客户端(也是把持台程序)挪用这个服务,由于是演示,以是利用复杂的以编程的体例挪用该服务:
classProgram
{
staticvoidMain(string[]args)
{
NetTcpBindingbind=newNetTcpBinding();
EndpointAddressaddress=newEndpointAddress("net.tcp://localhost:8001");
ChannelFactory<wcfservice.IOperate>clientfac=newChannelFactory<wcfservice.IOperate>(bind,address);
clientfac.Open();
wcfservice.IOperateclientproxy=clientfac.CreateChannel();
Console.WriteLine("将要实行wcf服务:"+DateTime.Now);
clientproxy.MyMethod();
Console.WriteLine("wcf服务实行完了:"+DateTime.Now);
clientfac.Close();
Console.ReadLine();
}
}
接上去我们就是看看演示的效果了,先运转服务,运转窗口以下:
然后我们运转客户端,运转窗口以下:
从下面的运转了局看,客户端被堵塞了5秒钟,这是由于典范的”哀求/应对”形式客户端必要守候服务器的了局才会实行上面的代码。
上面我们将左券修正以下:
[ServiceContract]
publicinterfaceIOperate
{
[OperationContract(IsOneWay=true)]
voidMyMethod();
}
注重:IsOneWay=true就标识了体例MyMethod为单向操纵,不必要别的任何分外的代码就可以完成单向操纵了。示例中的别的代码都稳定化,如今看看单向操纵的效果。
仍是先运转服务,运转窗口以下,和是一样的,没有任何区分:
再运转客户端,运转窗口以下:
这下面的运转能够看到,客户端在挪用服务中MyMethod()办法后立即实行了前面的代码,并没有守候5秒,这个就是单向操纵的效果了。我以前很喜欢Serv-U,自从它用Java重写之后我就再也没用过,实在是太慢了,我宁可用IIS搭建FTP,虽然IIS搭建FTP在权限管理上很不灵活。 |
|