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

相关文章

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen