silverlight3 学习 4.1 初识WCF

 Silverlight

创建WCF 服务时,首先应该定义协定。协定指定服务支持的操作,通过定义接口可创建协定。接口中的每个方法都对应于特定的服务操作。每个接口都必须将ServiceContract特性应用于自身,ServiceContract有两个重要的属性Name:服务的名称和Namespace:命名空间;

如果未指定,则默认的命名空间为http://tempuri.org。每个操作都必须将 OperationContract特性应用于自身。如果接口中的一个方法具有 ServiceContract特性但是并没有OperationContract特,则无法通过该服务访问此方法。

 

 [ServiceContract]
public interface IMyCalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}

 

先以简单示例对WCF有一个初步的认识:

摘自MSDN

开始创建自己的WCF服务

1,首先创建一个控制台应用程序

添加代码:

 [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}

 

2,在Main方法下添加如下代码: 注意代码注释行

//创建服务的基础地址,可以设置服务运行端口和IP地址
Uri siteUri = new Uri("http://localhost:8001/ServiceModelSamples/Service");
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService),siteUri))
{
try
{
// 添加公开服务的终结点。必须指定终结点公开的协议、绑定和终结点的地址.
WSHttpBinding binding = new WSHttpBinding();
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, "CalculatorService");
//启用元数据交换
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(smb);
// ServiceDescription sd = serviceHost.Description;
// sd.Behaviors.Add();
serviceHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
serviceHost.Close();
}
catch (InvalidOperationException ioe)
{
Console.WriteLine(ioe.Message);
Console.ReadLine();
}
catch (TimeoutException timeProblem)
{
Console.WriteLine(timeProblem.Message);
Console.ReadLine();
}
catch (CommunicationException commProblem)
{
Console.WriteLine(commProblem.Message);
Console.ReadLine();
}
}

 

3,运行效果

4, 使用命令行工具创建客户端代码

svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config http://localhost:8000/ServiceModelSamples/service

5,创建一个客户端控制台应用程序

添加generatedProxy.csapp.config文件.

Main方法内添加代码

CalculatorClient client = new CalculatorClient();
// Call the Add service operation.
double value1 = 100.00;
double value2 = 15.99;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00;
value2 = 76.54;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00;
value2 = 81.25;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
value1 = 22.00;
value2 = 7.00;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
//Closing the client releases all communication resources.
client.Close();
Console.ReadLine();

 

6,运行效果:


                  

  使用命令行工具创建客户端代码 

svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config http://localhost:8000/ServiceModelSamples/service
5,创建一个客户端控制台应用程序 
添加generatedProxy.csapp.config文件.
Main方法内添加代码 
posted @ 2010-10-25 12:52  base  阅读(645)  评论(0编辑  收藏  举报