C#创建WCF服务控制台应用程序详解

C#创建WCF服务控制台应用程序详解

WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的技术。它可以实现跨平台、跨语言的通信,支持多种协议和编码方式,提供了更多的功能,如消息队列、事务处理、安全性、可靠性等。本文将详细讲解如何使用C#创建WCF服务控制台应用程序,并提供两个示例。

1. 创建WCF服务控制台应用程序

以下是创建WCF服务控制台应用程序的基本步骤:

  1. 打开Visual Studio。

  2. 创建一个新的“控制台应用程序”项目。

  3. 在“解决方案资源管理器”中,右键单击项目名称,选择“添加”->“新建项”。

  4. 在“添加新项”对话框中,选择“WCF服务”模板。

  5. 输入服务名称,单击“添加”按钮。

  6. 在“解决方案资源管理器”中,打开“App.config”文件。

  7. 在“App.config”文件中,配置服务绑定和终结点。

<system.serviceModel>
  <services>
    <service name="MyService">
      <endpoint address="" binding="basicHttpBinding" contract="IMyService" />
    </service>
  </services>
  <bindings>
    <basicHttpBinding>
      <binding name="basicHttpBinding" />
    </basicHttpBinding>
  </bindings>
</system.serviceModel>

在上面的代码中,我们使用了基本的HTTP绑定来配置WCF服务,并指定了服务的地址和契约。

  1. 在服务代码中,实现服务契约。
[ServiceContract]
public interface IMyService
{
    [OperationContract]
    string GetData(int value);
}

public class MyService : IMyService
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}

在上面的代码中,我们创建了一个名为MyService的WCF服务,并实现了一个名为GetData的方法。我们还使用了[OperationContract]和[ServiceContract]属性来标记服务契约和操作契约。

  1. 在“Program.cs”文件中,启动WCF服务。
using System;
using System.ServiceModel;

namespace MyService
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(MyService)))
            {
                host.Open();
                Console.WriteLine("Service started.");
                Console.ReadLine();
            }
        }
    }
}

在上面的代码中,我们使用了ServiceHost类来启动WCF服务,并在控制台输出“Service started.”。

  1. 运行应用程序。

在上面的代码中,我们运行应用程序,并查看控制台输出。由于我们在服务中实现了GetData方法,并在控制台中启动了WCF服务,因此应用程序可以正常运行。

2. 示例1:使用WCF服务控制台应用程序实现计算器

以下是一个示例,演示如何使用WCF服务控制台应用程序实现计算器:

  1. 创建WCF服务控制台应用程序。

  2. 在服务代码中,实现服务契约。

[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    int Add(int a, int b);

    [OperationContract]
    int Subtract(int a, int b);

    [OperationContract]
    int Multiply(int a, int b);

    [OperationContract]
    int Divide(int a, int b);
}

public class Calculator : ICalculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Subtract(int a, int b)
    {
        return a - b;
    }

    public int Multiply(int a, int b)
    {
        return a * b;
    }

    public int Divide(int a, int b)
    {
        return a / b;
    }
}

在上面的代码中,我们创建了一个名为Calculator的WCF服务,并实现了四个基本的计算方法。我们还使用了[OperationContract]和[ServiceContract]属性来标记服务契约和操作契约。

  1. 在“Program.cs”文件中,启动WCF服务。
using System;
using System.ServiceModel;

namespace CalculatorService
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(Calculator)))
            {
                host.Open();
                Console.WriteLine("Service started.");
                Console.ReadLine();
            }
        }
    }
}

在上面的代码中,我们使用了ServiceHost类来启动WCF服务,并在控制台输出“Service started.”。

  1. 创建一个WCF客户端。
using System;
using System.ServiceModel;

namespace CalculatorClient
{
    class Program
    {
        static void Main(string[] args)
        {
            ChannelFactory<ICalculator> factory = new ChannelFactory<ICalculator>(new BasicHttpBinding(), new EndpointAddress("http://localhost:8000/Calculator"));
            ICalculator client = factory.CreateChannel();

            Console.WriteLine("1 + 2 = " + client.Add(1, 2));
            Console.WriteLine("3 - 4 = " + client.Subtract(3, 4));
            Console.WriteLine("5 * 6 = " + client.Multiply(5, 6));
            Console.WriteLine("8 / 2 = " + client.Divide(8, 2));

            Console.ReadLine();
        }
    }
}

在上面的代码中,我们创建了一个名为client的WCF客户端,并使用ChannelFactory和CreateChannel方法来创建客户端代理,并调用四个基本的计算方法。

  1. 运行应用程序。

在上面的代码中,我们运行应用程序,并查看控制台输出。由于我们在服务中实现了四个基本的计算方法,并在客户端中调用了它们,因此应用程序可以正常进行计算。

3. 示例2:使用WCF服务控制台应用程序实现文件上传

以下是一个示例,演示如何使用WCF服务控制台应用程序实现文件上传:

  1. 创建WCF服务控制台应用程序。

  2. 在服务代码中,实现服务契约。

[ServiceContract]
public interface IFileService
{
    [OperationContract]
    void UploadFile(FileData fileData);
}

[DataContract]
public class FileData
{
    [DataMember]
    public string FileName { get; set; }

    [DataMember]
    public byte[] FileContent { get; set; }
}

public class FileService : IFileService
{
    public void UploadFile(FileData fileData)
    {
        string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileData.FileName);
        File.WriteAllBytes(filePath, fileData.FileContent);
    }
}

在上面的代码中,我们创建了一个名为FileService的WCF服务,并实现了一个名为UploadFile的方法。我们还使用了[OperationContract]和[ServiceContract]属性来标记服务契约和操作契约,使用[DataContract]和[DataMember]属性来标记数据契约。

  1. 在“Program.cs”文件中,启动WCF服务。
using System;
using System.ServiceModel;

namespace FileService
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(FileService)))
            {
                host.Open();
                Console.WriteLine("Service started.");
                Console.ReadLine();
            }
        }
    }
}

在上面的代码中,我们使用了ServiceHost类来启动WCF服务,并在控制台输出“Service started.”。

  1. 创建一个WCF客户端。
using System;
using System.IO;
using System.ServiceModel;

namespace FileClient
{
    class Program
    {
        static void Main(string[] args)
        {
            ChannelFactory<IFileService> factory = new ChannelFactory<IFileService>(new BasicHttpBinding(), new EndpointAddress("http://localhost:8000/FileService"));
            IFileService client = factory.CreateChannel();

            string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.txt");
            byte[] fileContent = File.ReadAllBytes(filePath);

            FileData fileData = new FileData()
            {
                FileName = "test.txt",
                FileContent = fileContent
            };

            client.UploadFile(fileData);

            Console.WriteLine("File uploaded.");
            Console.ReadLine();
        }
    }
}

在上面的代码中,我们创建了一个名为client的WCF客户端,并使用ChannelFactory和CreateChannel方法来创建客户端代理,并调用UploadFile方法来上传文件。

  1. 运行应用程序。

在上面的代码中,我们运行应用程序,并查看控制台输出。由于我们在服务中实现了UploadFile方法,并在客户端中调用了它,因此应用程序可以正常上传文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#创建WCF服务控制台应用程序详解 - Python技术站

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

相关文章

  • 浅谈.Net Core后端单元测试的实现

    在.Net Core后端开发中,单元测试是一种非常重要的测试方法,可以帮助我们快速发现代码中的问题,提高代码质量。本文将详细讲解.Net Core后端单元测试的实现,包括环境搭建、代码实现、示例说明等。 环境搭建 在开始实现.Net Core后端单元测试之前,我们需要先搭建好开发环境。具体来说,我们需要安装以下软件: Visual Studio 2019或更…

    C# 2023年5月16日
    00
  • 使用DataTable.Select 方法时,特殊字符的转义方法分享

    使用DataTable的Select方法时,若查询字符串中存在特殊字符,需要对其进行转义,以确保查询能正常执行。以下就是转义方法的完整攻略。 1. 要转义的特殊字符 在Select方法中,需要转义的特殊字符主要包括: 单引号(’):在SQL查询语句中,单引号用于表示字符串变量。 方括号([ ]):在SQL查询语句中,方括号用于表示特殊字符或者列名中包含有空格…

    C# 2023年5月15日
    00
  • asp.net中的check与uncheck关键字用法解析

    让我们详细讲解一下“asp.net中的check与uncheck关键字用法解析”。 什么是check与uncheck关键字? 在C#中,check与uncheck是两个关键字,主要用于控制整数运算的溢出。check表示启用溢出检查,uncheck表示禁用溢出检查。 为什么需要check与uncheck关键字? 在C#中,整数类型默认是不启用溢出检查的,这就意…

    C# 2023年6月8日
    00
  • C#根据IP地址查询所属地区实例详解

    C#根据IP地址查询所属地区实例详解 前言 在实际的web开发中,我们经常会使用到IP地址的查询功能。本文主要介绍如何使用C#根据IP地址查询所属地区的具体实现过程。 步骤 1. 获取IP地址 我们可以使用ASP.NET中的Request对象获取用户IP地址,示例代码如下: string userIP = Request.UserHostAddress; 2…

    C# 2023年6月1日
    00
  • C#中如何正确的使用字符串String

    下面是C#中如何正确使用字符串的完整攻略: 1. 创建字符串 在C#中创建字符串最简单的方式就是使用双引号(“”)或单引号(”)将字符括起来: string str1 = "hello"; string str2 = ‘world’; 2. 字符串连接 C#中可以使用”+”运算符来连接两个字符串: string str1 = &quot…

    C# 2023年6月6日
    00
  • ASP.NET MVC生成静态页面的方法

    生成静态页面是网站优化中常用的手段之一,能够有效提高网站的访问速度和用户体验。在ASP.NET MVC中,我们可以使用以下两种方法来生成静态页面。 方法一:使用HtmlHelper的Action方法 步骤一:添加路由规则 首先,在RouteConfig.cs文件中,添加一个路由规则,用于匹配需要生成静态页面的 action。 routes.MapRoute(…

    C# 2023年5月31日
    00
  • C#实现泛型动态循环数组队列的方法

    下面是实现“C#实现泛型动态循环数组队列”的完整攻略。 目录 动态循环数组队列的定义 C# 实现泛型动态循环数组队列的方法 示例说明 示例一:队列的基本操作 示例二:循环数组队列的应用 动态循环数组队列的定义 动态循环数组队列是一种数据结构,和普通队列类似,具备入队和出队的操作。不同之处在于,动态循环数组队列是使用数组实现的,而且拥有动态扩容的特性。 具体来…

    C# 2023年6月1日
    00
  • c#定时器和global实现自动job示例

    下面我将为你详细讲解“c#定时器和global实现自动job示例”的完整攻略。 什么是自动job? 自动 job 是指某项工作可以自动地按照预设的时间、条件或者事件触发来执行,比如自动备份数据、自动发送邮件、自动打开文件等等。 c#定时器实现自动job 在 C# 中,我们可以使用内置的定时器 Timer 类来实现自动job。具体实现步骤如下: 引入命名空间 …

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部