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是一个不可序列化的对象,我如何才能正确设置此服务?

WCF服务返回一个不可序列化的对象

看起来你误解了你引入web服务的目的。

您当然不会从服务返回数据库连接对象到客户端。您可以使用服务来封装和抽象客户端的数据库。

您将GetRecordsForCustomer(int customerID)之类的方法添加到服务中,并让客户端调用它。你不返回数据库对象,而是从服务返回数据契约。

通过这种方式,您不仅可以更改底层数据存储(例如,交换数据库,或者更常见的,在不影响客户端的情况下更改数据模型),还可以添加额外的行为,而无需使用在数据库上编程触发器和过程。

如果你想让你的客户端直接访问数据库,你就不需要web服务了。