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日

相关文章

  • C#中使用闭包与意想不到的坑详解

    C#中使用闭包与意想不到的坑详解 什么是闭包 在C#中,闭包是一个由函数和与其相关的引用环境组合而成的实体。具体地说,闭包函数可以访问其定义域之外的变量,即自由变量,这些变量与函数一同存在于一个闭包里。 C#中闭包的使用 C#中,使用闭包可以方便地共享变量和保持状态。例如下面的代码: public Action GetClosureAction() { va…

    C# 2023年6月6日
    00
  • C#中闭包概念讲解

    C#中闭包概念讲解 什么是闭包 闭包是指一个函数能访问其自身范围之外的变量,并使这些变量的值在函数内被保持和使用。在C#中,闭包可以简单地理解为一个函数内访问外部变量。 C#中闭包的使用 在C#中,闭包主要通过lambda表达式、委托和匿名方法实现。下面将分别介绍各种方法的使用。 使用lambda表达式实现闭包 lambda表达式是一种匿名函数,其可以访问其…

    C# 2023年6月7日
    00
  • C#中ManualResetEvent用法详解

    以下是关于“C#中ManualResetEvent用法详解”的完整攻略。 概述 ManualResetEvent 是一个同步基元,它允许一个或多个线程等待信号,然后再继续执行。当 WaitOne 方法被调用时,会阻塞线程直到接收到信号,然后线程被唤醒并继续执行。 ManualResetEvent 主要由两个方法 WaitOne() 和 Set() 组成。Wa…

    C# 2023年6月1日
    00
  • 说说C#的async和await的具体用法

    下面是“说说C#的async和await的具体用法”的完整攻略: 一、async/await简介和作用 async和await是 C# 5.0 中引入的新语法糖,目的是让异步编程代码更加清晰和简洁。其作用主要有两个: 应对高并发:异步方法可以让 CPU 和 IO 操作并发执行,从而提高程序的吞吐量和响应性能。 简化代码:通过异步编程的语法糖,可以让异步代码的…

    C# 2023年6月6日
    00
  • asp.net core服务限制堆内存大小的操作方法

    以下是“ASP.NET Core服务限制堆内存大小的操作方法”的完整攻略: 什么是ASP.NET Core服务限制堆内存大小 .NET Core服务限制堆内存大小是一种机制,允许您限制ASP.NET Core应用程序使用的堆内存大小。这种机制可以帮助您优化应用程序的性能,并避免内存泄漏。 ASP.NET Core服务限制堆内存大小的操作方法 ASP.NET …

    C# 2023年5月12日
    00
  • C#实现的4种常用数据校验方法小结(CRC校验,LRC校验,BCC校验,累加和校验)

    C#实现的4种常用数据校验方法小结 在数据通信过程中,对数据进行校验是十分必要的,通过校验可以确保数据的准确性和完整性。本文将讲解C#实现的4种常用数据校验方法:CRC校验、LRC校验、BCC校验、累加和校验。 CRC校验 CRC校验是一种常用的数据校验方法,常见于串口通信、以太网通信等领域。其原理是通过生成一个固定的校验码,将数据和校验码一起传输,接收方同…

    C# 2023年5月31日
    00
  • CAD2008+VS2008开发ObjectARX加载失败问题(推荐)

    下面是CAD2008+VS2008开发ObjectARX加载失败问题的完整攻略: 问题描述 在CAD2008+VS2008开发ObjectARX时,可能会遇到ObjectARX加载失败的问题。该问题通常是由于缺少或错误链接ObjectARX库文件导致的。 解决方案 要解决该问题,需要按照以下步骤进行操作: 1. 检查项目设置 在VS2008中打开解决方案,在…

    C# 2023年5月15日
    00
  • C#利用反射实现多数据库访问

    C#利用反射实现多数据库访问的完整攻略指的是使用C#编程语言,通过反射技术实现对多种不同的数据库的访问操作。在开发过程中,我们可以针对不同的数据库类型编写不同的代码。下面是整个过程的具体步骤: 添加必要的引用和命名空间:在使用反射进行数据库访问操作之前,我们需要在引用中添加 System.Reflection 和 System.Data 命名空间。添加这些命…

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