2010-06-17 33 views
5

Tôi đang kết nối với dịch vụ web ASMX do nhà cung cấp cung cấp và gửi một bộ dữ liệu qua dây. Nỗ lực đầu tiên của tôi nhấn thời gian chờ 1 phút mà Visual Studio ném vào theo mặc định trong tệp app.config khi bạn thêm một tham chiếu dịch vụ vào một dự án. Tôi tăng nó lên 10 phút, một thời gian chờ khác. 1 giờ, một thời gian chờ khác:Dịch vụ Web .NET (asmx) Timeout Problem

Error: System.TimeoutException: The request channel timed out while waiting for 
a reply after 00:59:59.6874880. Increase the timeout value passed to the call to 
Request or increase the SendTimeout value on the Binding. The time allotted to 
this operation may have been a portion of a longer timeout. ---> System.TimeoutE 
xception: The HTTP request to 'http://servername/servicename.asmx' has exceeded the allotted timeout of 01:00:00. The time allotted to this 
operation may have been a portion of a longer timeout. ---> System.Net.WebExcept 
ion: The operation has timed out 
    at System.Net.HttpWebRequest.GetResponse() [... lengthly stacktrace follows] 

Tôi đã liên hệ với nhà cung cấp. Họ xác nhận cuộc gọi có thể mất hơn một tiếng đồng hồ (đừng hỏi, họ là nguyên nhân của sự tồn tại của tôi). Tôi tăng thời gian chờ lên 10 giờ để được an toàn. Tuy nhiên, cuộc gọi dịch vụ web tiếp tục hết thời gian sau 1 giờ. Phần app.config có liên quan bây giờ trông giống như sau:

<basicHttpBinding> 
    <binding name="BindingName" closeTimeout="10:00:00" 
        openTimeout="10:00:00" receiveTimeout="10:00:00" sendTimeout="10:00:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
    </security> 
    </binding> 
    </basicHttpBinding> 

Khá ngớ ngẩn, nhưng bất kể thời gian chờ vẫn khởi động sau 1 giờ. Rất tiếc, mọi thay đổi đều mất ít nhất một giờ nữa để kiểm tra. Có một số giới hạn nội bộ mà tôi đang gặp phải - một cài đặt thời gian chờ khác sẽ được thay đổi ở đâu đó không? Tất cả thay đổi đối với các cài đặt này tối đa một giờ đã có hiệu lực mong đợi.

Cảm ơn bạn đã trợ giúp bạn có thể cung cấp!

+0

Khi khởi động trong một giờ, có phải chính xác cùng ngoại lệ bạn nhận được khi hết thời gian chờ trong 1 phút không? –

+0

Vâng, đó là lỗi tương tự. –

Trả lời

4

Trước tiên: Xem phản hồi của Steven Cheng [MSFT] here về thời gian hết giờ. Có một thời gian chờ thực hiện bạn có thể đặt cho httpRuntime. Sau đó, anh ấy nói điều gì đó thú vị, đó là "Ngoài ra, hãy đảm bảo rằng bạn đã đặt 'debug debug =" false "' thành làm cho thời gian chờ hoạt động chính xác"

Bên cạnh thực tế là điều gì đó có thể quá khủng khiếp sai về kết thúc của họ (hoặc các dữ liệu trả về là quá lớn/tôi sẽ không phán xét - có thể là một lý do chính đáng), bạn đã thử gọi hoạt động của họ không đồng bộ? Cùng một kết quả? Tôi đoán nó sẽ mất một giờ

YourVendor.WebService ws = new YourVendor.WebService(); 
ws.LongRunningOperationCompleted += new YourVendor.LongRunningOperationEventHandler(ws_LongRunningOperationCompleted); 

ws.LongRunningOperationAsync(); 

// Implement the ws_LongRunningOperationCompleted handler (stub will auto generate) 

Các xử lý sự kiện hoàn thành sẽ có một sự kiện cụ thể args param, mà sẽ chứa các kết quả, cho args kiện điện tử, e.Result nên có những gì bạn cần khi nó hoàn thành.

+0

Tệp web.config ở phía máy khách không có phần tử httpRuntime, vì vậy tôi đã thêm một tệp có thời gian chờ rất lớn, sau đó khởi động lại. Chúng ta sẽ thấy trong một giờ, cảm ơn! –

+0

Đối với tùy chọn không đồng bộ, tôi có thể mở nắp đậy và thay đổi cuộc gọi thành không đồng bộ. Có phải những người này thường khoan dung hơn với thời gian chờ, chúng có thực thi khác nhau không? Dữ liệu không quá lớn nhưng phải được xử lý ở đầu kia trước khi kết quả được trả về và bất kỳ ai đã viết mã xử lý không có mắt để thực hiện qua một kích thước dữ liệu nhất định. –

+0

@BarryFandango: Xin chào Barry, Bạn đã giải quyết vấn đề như thế nào? Tôi đã đặt cả hai thời gian chờ httpRuntime thành một giá trị lớn và cũng có thể đặt gỡ lỗi biên dịch thành sai. Vẫn nhận được lỗi tương tự sau 1 giờ – MichaelS

Các vấn đề liên quan