WCF简单实例[改进版]

一 实例结构

1)solution如下:

 

2)dependency如下:

 

 

*  Contracts 其实就是interface,用来实现service和client的松耦合;

*  Services 是真正的对contracts实现;

*  Hosting 用来宿主 services,是其能够被client访问;

*  client 用来访问wcf service;

 

二 contracts

ICalculator.cs文件如下:

复制代码
 using System.ServiceModel;

 
namespace Artech.WcfServices.Contracts
 {
     [ServiceContract(Name
="CalculatorService", Namespace="http://www.artech.com/")]
     
public interface ICalculator
    {

       [OperationContract]
       
double Add(double x, double y);

        [OperationContract]
        
double Subtract(double x, double y); 

        [OperationContract]
        
double Multiply(double x, double y); 

        [OperationContract]
        
double Divide(double x, double y);      
    } 
}
复制代码


三 services

CalculatorService.cs文件如下:

复制代码
using Artech.WcfServices.Contracts;

namespace Artech.WcfServices.Services
{

    
public class CalculatorService : ICalculator
    {
        
public double Add(double x, double y)
        {
            
return x + y;
        }
        
public double Subtract(double x, double y)
        {
            
return x - y;
        }
        
public double Multiply(double x, double y)
        {
            
return x * y;
        }
        
public double Divide(double x, double y)
        {
            
return x / y;
        }
    }
}
复制代码

 

四 hosting

app.config文件如下:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<system.serviceModel>
    
<behaviors>
      
<serviceBehaviors>
        
<behavior name="metadataBehavior">
          
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8888/calculatorservice/metadata" />
        
</behavior>
      
</serviceBehaviors>
    
</behaviors>
    
<services>
      
<service behaviorConfiguration="metadataBehavior" name="Artech.WcfServices.Services.CalculatorService">
        
<endpoint address="http://localhost:8888/calculatorservice" binding="wsHttpBinding"  contract="Artech.WcfServices.Contracts.ICalculator" />
      
</service>
    
</services>
  
</system.serviceModel>
</configuration>
复制代码

Hosting.cs文件如下:

复制代码
using System;
using System.ServiceModel;

using Artech.WcfServices.Contracts;
using Artech.WcfServices.Services;

namespace Artech.WcfServices.Hosting
{
   
class Program
   {

       
static void Main(string[] args)
       {
           
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
           {                
               host.Opened 
+= delegate
                {
                    Console.WriteLine(
"CalculaorService已经启动,按任意键终止服务!");
                };

                host.Open();
                Console.Read();
            }
        }
    }
}
复制代码

 

五 client

app.config文件如下:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://localhost:8888/calculatorservice" binding="wsHttpBinding"
contract
="Artech.WcfServices.Contracts.ICalculator" name="calculatorservice" />
</client>
</system.serviceModel>
</configuration>
复制代码

client.cs文件如下:

复制代码
using System;
using System.ServiceModel;

using Artech.WcfServices.Contracts;

namespace Artech.WcfServices.Client
{
   
class Program
   {
       
static void Main(string[] args)
       {
           
using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorservice"))
            {
                ICalculator proxy 
= channelFactory.CreateChannel();
                
using (proxy as IDisposable)
                {
                    Console.WriteLine(
"x + y = {2} when x = {0} and y = {1}"12, proxy.Add(12));
                    Console.WriteLine(
"x - y = {2} when x = {0} and y = {1}"12, proxy.Subtract(12));
                    Console.WriteLine(
"x * y = {2} when x = {0} and y = {1}"12, proxy.Multiply(12));
                    Console.WriteLine(
"x / y = {2} when x = {0} and y = {1}"12, proxy.Divide(12));
                }
            }
           Console.ReadLine();
        }
    }
}
复制代码

 

参考:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html

posted @   iTech  阅读(1059)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示