WCF服务返回一个不可序列化的对象
本文关键字:序列化 对象 一个 返回 服务 WCF | 更新日期: 2023-09-27 18:15:19
我这样设置了一个WCF服务:
IService1.cs
namespace AzureWebServiceTest
{
[ServiceContract]
public interface IService1
{
[OperationContract]
void createCloudAccount(string accountName);
[OperationContract]
SqlConnection useDb();
}
}
Service1.cs
namespace AzureWebServiceTest
{
public class Service1 : IService1
{
public void createCloudAccount(string accountName)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(accountName);
container.CreateIfNotExists();
}
public SqlConnection useDb()
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Server=localhost;Database=StilistaLibrary;Trusted_Connection=true";
return conn;
}
}
}
但是我对useDB()的返回类型有问题,我认为因为SqlConnection是一个不可序列化的对象,我如何才能正确设置此服务?
看起来你误解了你引入web服务的目的。
您当然不会从服务返回数据库连接对象到客户端。您可以使用服务来封装和抽象客户端的数据库。
您将GetRecordsForCustomer(int customerID)
之类的方法添加到服务中,并让客户端调用它。你不返回数据库对象,而是从服务返回数据契约。
通过这种方式,您不仅可以更改底层数据存储(例如,交换数据库,或者更常见的,在不影响客户端的情况下更改数据模型),还可以添加额外的行为,而无需使用在数据库上编程触发器和过程。
如果你想让你的客户端直接访问数据库,你就不需要web服务了。