WCF学习笔记(二),服务契约

2024-03-06 08:32
文章标签 服务 学习 笔记 wcf 契约

本文主要是介绍WCF学习笔记(二),服务契约,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、服务契约介绍
       
我个人理解服务契约是一组公开的操作,其中公开的操作(OperationContract)只能定义在方法(Method)上。对于我们要公开的服务我们可以在接口或者类上加上标识ServiceContract。但是我们一般情况下,会把ServiceContract定义在接口上而不是类上,这样有几个好处:
       1.方便契约的继承,不同的类型可以去实现相同的契约,重用性高。
       2.同一服务可以去实现多个契约。
       3.可以随时去修改服务类型,而不需去修改接口。
       下面定义一个服务的契约:   

altusing System;
alt
using System.Collections.Generic;
alt
using System.Linq;
alt
using System.Text;
alt
using System.ServiceModel;
alt
alt
namespace Service
alt
{
alt    [ServiceContract(Name
="Service_Calucator",Namespace="Henllyee")]
alt    
public interface ICalucator
alt    
{
alt        [OperationContract]
alt        
int Add(int x, int y);
alt
alt    }

alt}

我们在上面首先定义了一个接口名称为:ICalucator,然后我们要将这个接口公开为服务契约在上面加上属性标识[ServiceContract],其中Name可以为契约指定别名,这样的话,如果我们在客户端遇到相同的接口时可以通过Name来制定别名区别开来。公开的操作为Add方法,在上面标识[OperationContract]即可。

二、方法的重载
    按照我们正常的方法去重载的话,只需要方法的参数不同(个数、类型)就可以实现方法的重载。但是我们在服务契约的定义的时候是不能怎样的,wdsl是编译同不过的如:

alt using  System;
alt
using  System.Collections.Generic;
alt
using  System.Linq;
alt
using  System.Text;
alt
using  System.ServiceModel;
alt
alt
namespace  Service
alt
{
alt    [ServiceContract(Name
="Service_Calucator",Namespace="Henllyee")]
alt    
public interface ICalucator
alt    
{
alt        [OperationContract]
alt        
int Add(int x, int y);
alt
alt        [OperationContract]
alt        
double Add(double x, double y);
alt    }

alt}

alt

上面的方法是编译不能通过的。但是我们有一种解决的办法可以去解决这样的问题,就是通过OperationContract的Name属性来设定方法的别名是实现方法的重载。如:

alt using  System;
alt
using  System.Collections.Generic;
alt
using  System.Linq;
alt
using  System.Text;
alt
using  System.ServiceModel;
alt
alt
namespace  Service
alt
{
alt    [ServiceContract(Name
="Service_Calucator",Namespace="Henllyee")]
alt    
public interface ICalucator
alt    
{
alt        [OperationContract(Name
="IntAdd")]
alt        
int Add(int x, int y);
alt
alt        [OperationContract(Name
="DoubleAdd")]
alt        
double Add(double x, double y);
alt    }

alt}

alt


下面我们通过数据元的方式来配置一个宿主主机,我们添加一个控制台的程序,通过配置App.Config来实现。
在App.Config中:

alt xml version="1.0" encoding="utf-8" ?>
alt
<configuration>
alt  
<system.serviceModel>
alt    
<services>
alt      
<service name="Service.Calucator" behaviorConfiguration="mex">
alt        
<host>
alt          
<baseAddresses>
alt            
<add baseAddress="http://localhost:8888"/>
alt          
baseAddresses>
alt        
host>
alt        
<endpoint address="Calucator" binding="basicHttpBinding" contract="Service.ICalucator"> endpoint>
alt      
service>
alt    
services>
alt    
<behaviors>
alt      
<serviceBehaviors>
alt        
<behavior name="mex">
alt          
<serviceMetadata httpGetEnabled="true"/>
alt        
behavior>
alt      
serviceBehaviors>
alt    
behaviors>
alt  
system.serviceModel>
alt
configuration>

在主程序中:

alt using  System;
alt
using  System.Collections.Generic;
alt
using  System.Linq;
alt
using  System.Text;
alt
using  System.ServiceModel;
alt
using  Service;
alt
alt
namespace  Host
alt
{
alt    
class Program
alt    
{
alt        
static void Main(string[] args)
alt        
{
alt            ServiceHost host 
= null;
alt            
try
alt            
{
alt                host 
= new ServiceHost(typeof(Calucator));
alt                host.Open();
alt
alt                Console.Write(
"Host is opening now! Press any key to stop");
alt                Console.Read();
alt            }

alt            
finally
alt            
{
alt                host.Close();
alt            }

alt        }

alt    }

alt}

alt

然后我们启动主机,在浏览器中输入地址:http://www.systhinker.com/?wsdl 。我们可以看到:
alt



我们可以看到wsdl编译时已经将名称编译成为了我们Name中定义的别名。

WCF学习笔记系列链接:

WCF学习笔记(一),WCF预览

WCF学习笔记(二),服务契约

WCF学习笔记(三),数据契约

WCF学习笔记(四),数据契约的事件

WCF学习笔记(五),数据契约的已知类型

WCF学习笔记(六),实例类型

这篇关于WCF学习笔记(二),服务契约的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779426

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06