Tôi đã tạo một dịch vụ web trong WCF trả về hơn 54000 hàng dữ liệu với 10 dữ liệu trong mỗi hàng. Tôi đã sử dụng số điện thoại wsHttpBinding để liên lạc. Dịch vụ này hoạt động tốt với ít dữ liệu hơn (tức là 2000 hàng) nhưng nó bị loại bỏ khi cố gửi một bộ hồ sơ lớn với hơn 50000 hàng (~ 2MB). Thông báo ngoại lệ là như thế nàyChuyển số lượng lớn dữ liệu trong dịch vụ WCF
Đã xảy ra lỗi khi nhận phản hồi HTTP tới
http://localhost:9002/MyService.svc
. Điều này có thể là do ràng buộc điểm cuối dịch vụ không sử dụng giao thức HTTP. Điều này cũng có thể là do bối cảnh yêu cầu HTTP bị máy chủ hủy bỏ (có thể do việc tắt dịch vụ). Xem nhật ký máy chủ để biết thêm chi tiết.
Xin vui lòng không cho tôi biết sử dụng phân trang ở phía khách hàng - Tôi biết rằng nó sẽ giải quyết được vấn đề. Nhưng tôi cần toàn bộ đoạn dữ liệu trong phần cuối của máy khách.
cấu hình dịch vụ của tôi trên máy chủ là như
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="MyWsHttpBinding" />
</wsHttpBinding>
</bindings>
<services>
<service name="AdminService">
<endpoint address="AdminSrv"
binding="wsHttpBinding"
contract="IAdminService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="/Bus/IRfotoWCF" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"></serviceHostingEnvironment>
</system.serviceModel>
cấu hình Khách hàng của tôi là như
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IAdminService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/TestService/AdminService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAdminService"
contract="IAdminService" name="BasicHttpBinding_IAdminService" />
</client>
</system.serviceModel>
một ai đó sẽ giúp tôi ra với cấu hình excact cả client và server side. Ngay cả khi tôi cần thay đổi ràng buộc từ wsHttpBinding đến netTcpBinding - tôi không gặp vấn đề gì khi thực hiện điều đó. Cảm ơn trước.
Tôi không hiểu. Nó là một giải pháp thực sự tốt, khi một dịch vụ chờ đợi một dịch vụ khác trong 5,20 phút. Tôi nghĩ đây là câu hỏi lớn về kiến trúc, nhưng tôi không thể tìm ra giải pháp. – Vladislav
Tôi tiếp tục thử nghiệm với tốc độ truyền dữ liệu lớn. Sử dụng "Chunks" phương pháp tôi có thể gửi 300 000 (!) Hàng, lưu nó vào cơ sở dữ liệu trong vòng 4,34 phút mà không có bất kỳ thay đổi trong cấu hình dịch vụ của tôi. Tôi chỉ tách dữ liệu của tôi cho các khối với 50 hàng. – Vladislav
Bạn nên sử dụng Trình mã hóa dữ liệu nối tiếp thay vì XML. Điều này cho đến nay một công việc thay thế thủ công bên trong reference.cs. – NickD