这是创建 WCF 服务的方法。
假设:
假设您有一个 tblExcel 对象列表,您想从问题中显示的 WinForm 客户端应用程序发送到 WCF 服务。
第 1 步:
创建一个新的类库项目并将其命名为 ExcelDataService
在这个项目中创建一个名为“DataContracts”的新文件夹,并在该文件夹下创建一个具有以下定义的新类:
[DataContract]
public class ExcelData
{
[DataMember]
public string Sid { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
}
注意:tblExcel 被重命名为 ExcelData,类的定义与你在原问题中发布的相同。
第 2 步:
在 ExcelDataService 项目下创建另一个名为“ServiceContracts”的文件夹,并创建一个具有以下定义的新接口
[ServiceContract]
public interface IExcelDataService
{
[OperationContract]
bool SaveData(List<ExceData> data);
}
第 3 步:
接下来创建另一个文件夹并将其命名为“Services”并使用以下定义创建一个新类
public class ExcelDataService : IExcelDataService
{
public bool SaveData(List<ExceData> data)
{
// Showing the code how to save into SQL is beyond this question.
// In the data object you have the list of excel data objects that you can save into the sql server
// you can use Enterprise Library Data block or ADO.Net to save this data into the SQL Server.
}
}
第 4a 步:
现在在 Visual Studio 解决方案中添加一个新项目并将其命名为ExcelDataServiceConsoleHostManager,将项目类型设置为控制台应用程序。在Main 方法中编写如下代码:
using (ServiceHost host = new ServiceHost(typeof(ExcelDataService)))
{
PrintEndpoints(host.Description);
host.Open();
Console.WriteLine("Service(s) are up and running... Press Enter key to exit!");
Console.ReadLine();
}
第 4b 步:
添加另一个具有以下定义的静态方法:
static void PrintEndpoints(ServiceDescription desc)
{
Console.WriteLine(desc.Name);
foreach (ServiceEndpoint nextEndpoint in desc.Endpoints)
{
Console.WriteLine();
Console.WriteLine(nextEndpoint.Address);
}
}
第 5 步:
在本项目的 App.config 文件中添加如下配置:
<system.serviceModel>
<services>
<service name="ExcelDataService.Services.ExcelDataService">
<endpoint address="net.tcp://localhost:8887/ExcelDataService/"
binding="netTcpBinding"
contract="ExcelDataService. ServiceContracts.IExcelDataService"
></endpoint>
</service>
</services>
</system.serviceModel>
确保将所有引用添加到项目中。构建成功后按 F5 键启动 Excel 数据服务控制台主机管理器。
下一步是修改您的客户端应用程序:
第 6 步:
在您的客户端应用程序中添加“ExcelDataService.dll”的引用。
使用以下定义创建一个新类:
public class ExcelDataServiceClient : ClientBase<IExcelDataService>
{
public bool SaveData(List<ExcelData> excelData)
{
base.Channel.SaveData(excelData);
}
}
第 7 步:
将 app.config 文件添加到您的客户端(如果尚未添加)并粘贴以下配置
<system.serviceModel>
<client>
<endpoint address="net.tcp://localhost:8887/ExcelDataService/"
binding="netTcpBinding"
contract="ExcelDataService. ServiceContracts.IExcelDataService"></endpoint>
</client>
</system.serviceModel>
保存所有文件并解析所有引用(WCF 使用 System.ServiceModel.dll)。
第 8 步:
接下来创建ExcelDataServiceClient 类的新实例并调用其实例方法SaveData。
我会将来自客户端的调用包装到 try-catch 块中以捕获任何异常。
编辑 2:
要将文件发送到 WCF 服务,我们有
客户端用来发送文件的请求类...
[DataContract]
public class UploadFileRequest
{
public string FileName { get; set; }
public string Path { get; set; }
public byte[] FileContents { get; set; }
}
以及服务将发回的响应类:
[DataContract]
public class UploadFileResponse
{
public string Message { get; set; }
}
向 IExcelDataService 接口添加另一个方法:
[OperationContract]
UploadFileResponse UploadFile(UploadFileRequest request);
及其在 ExcelDataService 类中的实现:
public UploadFileResponse UploadFile(UploadFileRequest request)
{
// In the request object you have the file as byte array that can be used here.
}
在客户端的ExcelDataServiceClient类中添加这个方法
public string UploadFile(byte[] fileContent, string fileName = "", string filePath = "")
{
UploadFileRequest request = new UploadFileRequest()
{
FileContents = fileContent, FileName = fileName, Path = filePath
};
UploadFileResponse response = base.Channel.UploadFile(request);
return response.Message;
}
接下来使用这个客户端类的实例调用UploadFile方法并传入参数。
希望这会有所帮助!