一次发送多个项目到WCF Dataservice?

时间:2014-04-09 15:20:03

标签: c# web-services odata wcf-data-services

我使用WCF数据服务作为允许项目中的其他Web服务连接到数据库的方法。我的问题是我的项目有一个爬虫,每小时向数据库添加数十个项目。

使用 AddToItems 方法(由ADO.NET自动生成)会导致超时异常,或者至少会使爬虫需要等待很长时间考虑到Addto方法独立处理每个方法。

*注意: 1-我在添加项目时添加了一个拦截器,以便在添加新项目时执行某些操作。

2- WCF数据服务服务操作不允许获取用户定义数据类型的参数,这阻止了我创建服务操作,该服务操作将项列表作为参数以便能够处理多个项目每次都以同样的方式允许客户端异步处理它。

当我尝试序列化此列表以便可以将其视为字符串时,由于url的长度限制,即使使用POST而不是Get,也会发生异常。

更新:通过BeginSaveChanged和EndSaveChanged保存更改在一定程度上解决了问题,但我仍在寻找更好的解决方案

1 个答案:

答案 0 :(得分:0)

也许OData功能Batch可以满足您的要求:

    var client = new Container(serviceUrl);
    client.Format.UseJson();

    DefaultBatchCustomer customer0ToAdd = new DefaultBatchCustomer { Id = 10, Name = "Customer 10" };
    DefaultBatchCustomer customer0ToAdd = new DefaultBatchCustomer { Id = 11, Name = "Customer 11" };

    client.AddToDefaultBatchCustomer(customer0ToAdd);
    client.AddToDefaultBatchCustomer(customer1ToAdd);

    var response = await client.SaveChangesAsync(SaveChangesOptions.BatchWithSingleChangeset);

,请求如下:

POST http://jinfutanwebapi1:9123/DefaultBatch/$batch HTTP/1.1
OData-Version: 4.0;NetFx
OData-MaxVersion: 4.0;NetFx
Content-Type: multipart/mixed; boundary=batch_8ce61768-e8bb-4117-954b-9bc43e05baef
Accept: multipart/mixed
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services
Host: jinfutanwebapi1:9123
Content-Length: 1772
Expect: 100-continue

--batch_8ce61768-e8bb-4117-954b-9bc43e05baef
Content-Type: multipart/mixed; boundary=changeset_b36bec94-fc3b-4d89-99cc-0610fcec8148

--changeset_b36bec94-fc3b-4d89-99cc-0610fcec8148
Content-Type: application/http
Content-Transfer-Encoding: binary

POST http://jinfutanwebapi1:9123/DefaultBatch/DefaultBatchCustomer HTTP/1.1
Content-ID: 13
OData-Version: 4.0;NetFx
OData-MaxVersion: 4.0;NetFx
Content-Type: application/json;odata.metadata=minimal
Accept: application/json;odata.metadata=minimal
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services

{"@odata.type":"#WebStack.QA.Test.OData.Batch.Tests.DataServicesClient.DefaultBatchCustomer","Id":10,"Name":"Customer 10"}
--changeset_b36bec94-fc3b-4d89-99cc-0610fcec8148
Content-Type: application/http
Content-Transfer-Encoding: binary

POST http://jinfutanwebapi1:9123/DefaultBatch/DefaultBatchCustomer HTTP/1.1
Content-ID: 14
OData-Version: 4.0;NetFx
OData-MaxVersion: 4.0;NetFx
Content-Type: application/json;odata.metadata=minimal
Accept: application/json;odata.metadata=minimal
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services

{"@odata.type":"#WebStack.QA.Test.OData.Batch.Tests.DataServicesClient.DefaultBatchCustomer","Id":11,"Name":"Customer 11"}
--changeset_b36bec94-fc3b-4d89-99cc-0610fcec8148--
--batch_8ce61768-e8bb-4117-954b-9bc43e05baef--