c#——WCF和HTTP文件传输实验
发布人:shili8
发布时间:2023-08-12 07:15
阅读次数:103
下面是一个使用C#编写的WCF和HTTP文件传输实验的示例代码,包含了一些代码注释:
csharp
using System;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace FileTransferService
{
// 定义文件传输服务的接口
[ServiceContract]
public interface IFileTransferService
{
[OperationContract]
[WebGet(UriTemplate = /file/{fileName})]
Stream DownloadFile(string fileName);
[OperationContract]
[WebInvoke(UriTemplate = /file/{fileName})]
void UploadFile(string fileName Stream fileStream);
}
// 实现文件传输服务接口
public class FileTransferService : IFileTransferService
{
public Stream DownloadFile(string fileName)
{
// 获取文件路径
string filePath = Path.Combine(Environment.CurrentDirectory fileName);
// 检查文件是否存在
if (!File.Exists(filePath))
{
WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.NotFound;
return null;
}
// 打开文件流并返回
FileStream fileStream = new FileStream(filePath FileMode.Open FileAccess.Read);
WebOperationContext.Current.OutgoingResponse.ContentType = application/octet-stream;
return fileStream;
}
public void UploadFile(string fileName Stream fileStream)
{
// 获取文件路径
string filePath = Path.Combine(Environment.CurrentDirectory fileName);
// 创建文件流并保存上传的文件
using (FileStream outputStream = new FileStream(filePath FileMode.Create FileAccess.Write))
{
fileStream.CopyTo(outputStream);
}
}
}
class Program
{
static void Main(string[] args)
{
// 创建文件传输服务的主机
using (WebServiceHost host = new WebServiceHost(typeof(FileTransferService) new Uri( /> {
// 启动服务
host.Open();
Console.WriteLine(文件传输服务已启动。);
Console.WriteLine(按任意键停止服务。);
Console.ReadKey();
// 停止服务
host.Close();
}
}
}
}
上述代码定义了一个文件传输服务的接口`IFileTransferService`,包含了两个方法`DownloadFile`和`UploadFile`,分别用于下载和上传文件。`DownloadFile`方法通过GET请求下载文件,`UploadFile`方法通过POST请求上传文件。
在`FileTransferService`类中,`DownloadFile`方法首先检查文件是否存在,如果文件不存在,则返回404错误。如果文件存在,则打开文件流并返回给客户端。`UploadFile`方法将上传的文件保存到指定的路径。
在`Program`类中,创建了一个`WebServiceHost`对象来承载文件传输服务。通过调用`Open`方法启动服务,然后通过按下任意键来停止服务。
请注意,上述代码中的文件路径是相对于当前执行程序的路径。你可以根据需要修改文件路径。

