WCF入门需要掌握的基础知识

WCF(Windows Communication Foundation)是一种在Windows操作系统上实现分布式系统之间通信的技术,是微软推荐的一种服务导向架构(SOA)框架。下面是WCF入门需要掌握的基础知识的完整攻略:

WCF概述

WCF是一种基于消息传输的通信框架,它可以跨越多个计算机、多个操作系统和多个应用程序域进行通信。WCF的核心是服务(Service),WCF服务是运行在WCF宿主中的可执行程序,它们可以实现不同的通信模型,如单向通信、双向通信和回调等。WCF服务可以通过多种协议实现通信,如HTTP、TCP、MSMQ等。

WCF服务模型

WCF服务模型通过一系列公约来描述服务的协定(Contract)、行为(Behavior)和终结点(Endpoint)。服务协定定义了服务的接口和操作,服务行为定义了服务的行为方式,终结点定义了服务在何处可以访问和响应请求。

WCF服务开发

WCF服务开发包括以下步骤:
1. 定义服务协定
2. 实现服务协定
3. 配置服务的终结点
4. 创建WCF服务宿主

WCF服务协定

服务协定是WCF服务的核心,服务协定是一个接口,定义了服务的操作。服务协定分为服务契约和数据契约两种。
服务契约定义了服务的操作方法和参数,通常使用[OperationContract]特性进行标识。

[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    double Add(double x, double y);
}

数据契约定义了服务操作需要传递的数据类型,通常使用[DataContract]特性进行标识。

[DataContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Age { get; set; }
}

WCF服务实现

服务实现是服务契约的具体实现,服务实现类需要实现服务契约中定义的操作。服务实现类通常使用[ServiceBehavior]特性进行标识,[ServiceBehavior]特性可以添加一些服务行为,如实例管理方式、并发模式等。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class CalculatorService : ICalculator
{
    public double Add(double x, double y)
    {
        return x + y;
    }
}

配置WCF服务终结点

WCF服务终结点是指服务在何处可以被访问以及如何访问服务。WCF服务终结点的配置可以在web.config或app.config文件中完成。

<system.serviceModel>
  <services>
    <service name="ExampleService">
      <endpoint address="http://localhost:8000/example"
                binding="basicHttpBinding"
                contract="IExampleService" />
    </service>
  </services>
</system.serviceModel>

上面的配置表示了一个基于HTTP协议、绑定类型为basicHttpBinding的终结点,该终结点的地址为http://localhost:8000/example,该终结点实现的服务契约为IExampleService。

创建WCF服务宿主

WCF服务宿主用于运行WCF服务。WCF服务宿主可以是一个控制台应用程序、Windows服务、IIS应用程序池等。以下为一个简单的控制台应用程序宿主:

using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
    host.Open();
    Console.WriteLine("Service is running ...");
    Console.ReadKey();
}

示例说明1

以下为一个简单的WCF服务示例,该服务实现了一个简单的计算功能,支持计算两个数的加法。
服务契约:

[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    double Add(double x, double y);
}

服务实现:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class CalculatorService : ICalculator
{
    public double Add(double x, double y)
    {
        return x + y;
    }
}

服务端配置:

<system.serviceModel>
  <services>
    <service name="CalculatorService">
      <endpoint address="http://localhost:8000/calculator"
                binding="basicHttpBinding"
                contract="ICalculator" />
    </service>
  </services>
</system.serviceModel>

客户端调用:

using (ChannelFactory<ICalculator> factory =
            new ChannelFactory<ICalculator>(new BasicHttpBinding(), "http://localhost:8000/calculator"))
{
    ICalculator calculator = factory.CreateChannel();
    double result = calculator.Add(1.0, 2.0);
    Console.WriteLine("1.0 + 2.0 = {0}", result);
    Console.ReadKey();
}

示例说明2

以下为一个WCF服务示例,用于向客户端发送消息。服务契约:

[ServiceContract(CallbackContract = typeof(IMessageCallback))]
public interface IMessageService
{
    [OperationContract(IsOneWay = true)]
    void SendMessage(string message);
}

public interface IMessageCallback
{
    [OperationContract(IsOneWay = true)]
    void ReceiveMessage(string message);
}

服务实现:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MessageService : IMessageService
{
    private List<IMessageCallback> callbacks = new List<IMessageCallback>();

    public void SendMessage(string message)
    {
        Console.WriteLine("Sending message: {0}", message);
        foreach (var callback in callbacks)
        {
            callback.ReceiveMessage(message);
        }
    }

    public void Subscribe()
    {
        var callback = OperationContext.Current.GetCallbackChannel<IMessageCallback>();
        if (!callbacks.Contains(callback))
        {
            callbacks.Add(callback);
            Console.WriteLine("New client connected.");
        }
    }

    public void Unsubscribe()
    {
        var callback = OperationContext.Current.GetCallbackChannel<IMessageCallback>();
        if (callbacks.Contains(callback))
        {
            callbacks.Remove(callback);
            Console.WriteLine("Client disconnected.");
        }
    }
}

服务端配置:

<system.serviceModel>
  <services>
    <service name="MessageService">
      <endpoint address=""
                binding="wsDualHttpBinding"
                contract="IMessageService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8000/MessageService/" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <behavior>
        <callbackDebug />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <extensions>
    <behaviorExtensions>
      <add name="callbackDebug" type="MessageCallbackEndpointBehavior, MessageService" />
    </behaviorExtensions>
  </extensions>
</system.serviceModel>

客户端调用:

using (var factory = new DuplexChannelFactory<IMessageService>(
            new InstanceContext(new MessageCallback()),
            new WSDualHttpBinding(),
            new EndpointAddress("http://localhost:8000/MessageService")))
{
    IMessageService proxy = factory.CreateChannel();
    proxy.Subscribe();
    proxy.SendMessage("Hello, world!");
    Console.ReadKey();
}

其中,MessageCallback实现了IMessageCallback接口:

public class MessageCallback : IMessageCallback
{
    public void ReceiveMessage(string message)
    {
        Console.WriteLine("Received message: {0}", message);
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:WCF入门需要掌握的基础知识 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Python第三方库face_recognition在windows上的安装过程

    下面是Python第三方库face_recognition在Windows上的安装过程攻略。 1. 安装依赖项 在安装face_recognition之前需要先安装一些依赖项: 安装Python和pip 安装numpy库 安装dlib库 安装Python和pip Python是运行face_recognition的编程语言,并且需要安装pip来管理Pytho…

    人工智能概览 2023年5月25日
    00
  • 基于Python和openCV实现图像的全景拼接详细步骤

    针对“基于Python和OpenCV实现图像的全景拼接详细步骤”的攻略,我将分以下六步来进行讲解: 一、收集全景图像 收集需要进行全景拼接的图像,并确保每张图像的重叠部分不小于30%。最好使用三张及以上的图像进行拼接,以获得更好的效果。 二、确定需求 确定需要哪些库和模型来进行拼接,并安装相应的Python库。 三、确定图像的关键点 使用特征匹配算法确定每张…

    人工智能概论 2023年5月24日
    00
  • Python Web程序搭建简单的Web服务器

    我们来详细讲解 Python Web 程序搭建简单的 Web 服务器的完整攻略。本攻略包含以下三个部分: 环境准备 web.py 简介 web.py 搭建 Web 服务器的步骤 环境准备 在开始搭建 Python Web 服务器之前,我们需要事先准备好以下环境: Python 2.x 或者 Python 3.x(建议使用 Python 3.x) 安装 web…

    人工智能概览 2023年5月25日
    00
  • Django ORM 多表查询示例代码

    下面我将为你详细讲解 Django ORM 多表查询示例代码的完整攻略。 什么是Django ORM Django ORM(Object-Relational Mapping)是 Django 框架中的一个组件,它将数据库和 Python 对象之间创建了一种映射关系。我们可以使用 Python 代码操作数据库,无需编写 SQL 语句,这大大减少了我们编写数据…

    人工智能概论 2023年5月24日
    00
  • mongodb 3.4下远程连接认证失败的解决方法

    下面是“mongodb 3.4下远程连接认证失败的解决方法”的完整攻略。 问题描述 在使用mongodb 3.4版本进行远程连接时,可能会出现认证失败的情况。详细表现为,当使用用户名和密码进行远程连接时,会提示“Authentication failed”错误。 问题分析 一种可能的原因是,在mongodb 3.4中,启用了SCRAM-SHA-1身份验证机制…

    人工智能概论 2023年5月25日
    00
  • 阿里云服务器ubuntu 配置教程

    阿里云服务器Ubuntu配置教程 1. 注册阿里云账号并购买云服务器 首先,在阿里云官网注册账号。注册成功后,进入阿里云云服务器购买页,选择需要的服务器配置和操作系统。本教程以Ubuntu 18.04版本为例。 2. 连接云服务器 购买成功后,我们需要通过SSH协议连接云服务器。使用Mac或Linux系统的用户可以通过终端访问。如果使用Windows系统,可…

    人工智能概览 2023年5月25日
    00
  • pytorch 实现在一个优化器中设置多个网络参数的例子

    下面是 PyTorch 实现在一个优化器中设置多个网络参数的例子的完整攻略: 定义模型和优化器 在定义模型时,需要注意将不同的模型层分别定义在不同的变量中以便之后使用。 在定义优化器时,可以使用 nn.Parameter 函数将模型中的需要优化的参数设置为可训练。另外,为了区分不同层级的参数(如不同的层级可能需要不同的学习速率),可以使用 nn.Module…

    人工智能概论 2023年5月25日
    00
  • python图片验证码识别最新模块muggle_ocr的示例代码

    使用Python图片验证码识别最新模块muggle_ocr能够自动识别图片验证码,提高验证码的自动破解能力。以下是该模块的示例代码及详细攻略。 安装 通过pip安装muggle_ocr模块: pip install muggle_ocr 使用方法 这是一个最简单的示例: from muggle_ocr import OCR import requests #…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部