如何:使用单向和请求-答复协定访问 WCF 服务
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
//使用单向和请求-答复协定访问 WCF 服务
//1.声明服务协定。 要成为单向的操作必须在 OperationContractAttribute 中将 IsOneWay 设置为 true。 下面的代码声明具有 Add、Subtract、Multiply 和 Divide 的单向操作的 IOneWayCalculator 协定。 它还定义称为 SayHello 的请求响应操作。
//2.实现服务协定。 下面的代码实现 IOnewayCalculator 接口。
//3.在控制台应用程序中承载服务。 下面的代码演示如何承载服务。
[ServiceContract( Namespace = "http://Microsoft.ServiceModel.Samples" )]
public interface IOneWayCalculator
{
[OperationContract( IsOneWay = true )]
void Add( double n1, double n2 );
[OperationContract( IsOneWay = true )]
void Subtract( double n1, double n2 );
[OperationContract( IsOneWay = true )]
void Multiply( double n1, double n2 );
[OperationContract( IsOneWay = true )]
void Divide( double n1, double n2 );
[OperationContract]
string SayHello( string name );
}
//实现接口
public class Service1 : IOneWayCalculator
{
public void Add( double n1, double n2 )
{
double result= n1 + n2;
Console.WriteLine( "add({0},{1}) = {2} ",n1,n2,result );
}
public void Subtract( double n1, double n2 )
{
double result= n1 - n2;
Console.WriteLine( "Subtract({0},{1}) = {2} ",n1,n2,result );
}
public void Multiply( double n1, double n2 )
{
double result= n1 * n2;
Console.WriteLine( "Multiply({0},{1}) = {2} ",n1,n2,result );
}
public void Divide( double n1, double n2 )
{
double result = n1 / n2;
Console.WriteLine( "Divide({0},{1}) = {2} ", n1, n2, result );
}
public string SayHello( string name )
{
Console.WriteLine( "SayHello({0})", name );
return "Hello " + name;
}
}
//异步请求发送
class Program
{
// Host the service within this EXE console application.
public static void Main( )
{
Uri baseAddress = new Uri( "http://localhost:8000/servicemodelsamples/service" );
using ( ServiceHost serviceHost = new ServiceHost( typeof( Service1 ), baseAddress ) )
{
serviceHost.AddServiceEndpoint( typeof( IOneWayCalculator ),
new WSHttpBinding( ), "" );
ServiceMetadataBehavior smb = ( ServiceMetadataBehavior )
serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>( );
if ( smb == null )
{
smb = new ServiceMetadataBehavior( );
smb.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add( smb );
}
serviceHost.Open( );
// The service can now be accessed.
Console.WriteLine( "The service is ready." );
Console.WriteLine( "Press <ENTER> to terminate service." );
Console.WriteLine( );
Console.ReadLine( );
}
}
}
//求求应答
class Program
{
static void Main( string[ ] args )
{
WSHttpBinding binding = new WSHttpBinding( );
EndpointAddress epAddress = new EndpointAddress(
"http://localhost:8000/servicemodelsamples/service" );
OneWayCalculatorClient client = new OneWayCalculatorClient( binding, epAddress );
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
client.Add( value1, value2 );
Console.WriteLine( "Add({0},{1})", value1, value2 );
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
client.Subtract( value1, value2 );
Console.WriteLine( "Subtract({0},{1})", value1, value2 );
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
client.Multiply( value1, value2 );
Console.WriteLine( "Multiply({0},{1})", value1, value2 );
// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
client.Divide( value1, value2 );
Console.WriteLine( "Divide({0},{1})", value1, value2 );
// Call the SayHello service operation
string name = "World";
string response = client.SayHello( name );
Console.WriteLine( "SayHello([0])", name );
Console.WriteLine( "SayHello() returned: " + response );
client.Close();
}
}