C#创建WCF服务控制台应用程序详解
WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的技术。它可以实现跨平台、跨语言的通信,支持多种协议和编码方式,提供了更多的功能,如消息队列、事务处理、安全性、可靠性等。本文将详细讲解如何使用C#创建WCF服务控制台应用程序,并提供两个示例。
1. 创建WCF服务控制台应用程序
以下是创建WCF服务控制台应用程序的基本步骤:
-
打开Visual Studio。
-
创建一个新的“控制台应用程序”项目。
-
在“解决方案资源管理器”中,右键单击项目名称,选择“添加”->“新建项”。
-
在“添加新项”对话框中,选择“WCF服务”模板。
-
输入服务名称,单击“添加”按钮。
-
在“解决方案资源管理器”中,打开“App.config”文件。
-
在“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服务,并指定了服务的地址和契约。
- 在服务代码中,实现服务契约。
[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]属性来标记服务契约和操作契约。
- 在“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.”。
- 运行应用程序。
在上面的代码中,我们运行应用程序,并查看控制台输出。由于我们在服务中实现了GetData方法,并在控制台中启动了WCF服务,因此应用程序可以正常运行。
2. 示例1:使用WCF服务控制台应用程序实现计算器
以下是一个示例,演示如何使用WCF服务控制台应用程序实现计算器:
-
创建WCF服务控制台应用程序。
-
在服务代码中,实现服务契约。
[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]属性来标记服务契约和操作契约。
- 在“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.”。
- 创建一个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方法来创建客户端代理,并调用四个基本的计算方法。
- 运行应用程序。
在上面的代码中,我们运行应用程序,并查看控制台输出。由于我们在服务中实现了四个基本的计算方法,并在客户端中调用了它们,因此应用程序可以正常进行计算。
3. 示例2:使用WCF服务控制台应用程序实现文件上传
以下是一个示例,演示如何使用WCF服务控制台应用程序实现文件上传:
-
创建WCF服务控制台应用程序。
-
在服务代码中,实现服务契约。
[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]属性来标记数据契约。
- 在“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.”。
- 创建一个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方法来上传文件。
- 运行应用程序。
在上面的代码中,我们运行应用程序,并查看控制台输出。由于我们在服务中实现了UploadFile方法,并在客户端中调用了它,因此应用程序可以正常上传文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#创建WCF服务控制台应用程序详解 - Python技术站