2009-05-28 33 views
21

Tôi đang cố gắng tạo kết nối xà phòng với dịch vụ web của Magento, tuy nhiên tôi gặp lỗi khi thử và tạo một thể hiện của lớp trình khách xà phòng. Tôi có thể xem các tập tin wsdl trong firefox mà không có vấn đề và tôi có thể xem php làm cho các yêu cầu cho các wsdl trong nhật ký apaches nhưng nó vẫn không thành công. Nusoap có thể kết nối.Vô hiệu hóa SoapFault ngoại lệ: [HTTP] Lỗi Tìm nạp tiêu đề http

$proxy = new SoapClient('someaddress?wsdl'); 

Lỗi này là

<b>Fatal error</b>: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php:29 
Stack trace: 
[internal function]: SoapClient-&gt;__doRequest('&lt;?xml version=&quot;...', 'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0) 
[internal function]: SoapClient-&gt;__call('call', Array) 
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient-&gt;call(NULL, 'catalog_categor...', 5, 'giftshop') 
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586): include('/home/sites/cor...') 
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(228): MY_Loader-&gt;_ci_load(Array, '') 
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader-&gt;view('contentpage_tem...', false, true) 
[internal function]: Contentpage-&gt;index() 
/home/sites/xxx in <b>/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php</b> on line <b>29</b> 

Cảm ơn

+1

tôi có thể bị nhầm lẫn nhưng phù hợp với "gift_service .php (29): SoapClient- > gọi (NULL, 'catalog_categor ...', "trong ngăn xếp cuộc gọi dường như không tương ứng với" $ proxy = new SoapClient "nhưng giống như" proxy-> catalog_categories() " Xin vui lòng (đôi) kiểm tra dòng 29 trong gift_service.php – VolkerK

Trả lời

33

Cố gắng thiết lập:

default_socket_timeout = 120 

trong tập tin php.ini của bạn.

+4

Điều này đã giúp tôi trong trường hợp hoàn toàn không liên quan với Magento. – mindeh

+2

Điều này cũng có thể được thực hiện tại thời gian chạy với 'ini_set ('default_socket_timeout', 120)', sẽ cung cấp cho bạn giá trị ban đầu nếu bạn muốn khôi phục sau đó. – xiuyuan

11

Bạn có thử thêm

'trace'=>1, 

các thông số tạo SoapClient và sau đó:

var_dump($client->__getLastRequest()); 
var_dump($client->__getLastResponse()); 

để xem những gì đang xảy ra?

+0

điều này giúp tôi xem yêu cầu xà phòng của tôi thiếu thông số đúng, nhưng tôi không biết tại sao tệp wsdl của tôi không cập nhật đúng ectly. –

0

Trong log lỗi apache của tôi, tôi thấy:

[Tue Feb 16 14:55:02 2010] [notice] child pid 9985 exit signal File size limit exceeded (25) 

Vì vậy, tôi, loại bỏ tất cả các nội dung của log file 2.1GB /var/log/system.log lớn nhất của tôi. Bây giờ mọi thứ đều hoạt động.

0

Có sự cố trong phiên bản php nhỏ hơn 5.2.6. Bạn có thể cần phải nâng cấp phiên bản của php.

6

Lỗi này có thể xuất hiện trên máy khách nếu có sự cố ở phía máy chủ. Ví dụ, nếu máy chủ SOAP là một kịch bản PHP với một lỗi phân tích cú pháp, máy khách sẽ thất bại với thông báo này.

Nếu bạn kiểm soát máy chủ, hãy kết nối Apache error_log của bạn trên máy lưu trữ máy chủ SOAP. Trên CentOS bạn sẽ tìm thấy điều này trong/var/log/httpd/error_log, vì vậy lệnh này là:

tail -f/var/log/httpd/error_log

Bây giờ làm mới cho khách hàng và theo dõi cho thông báo lỗi . Bất kỳ lỗi PHP nào với tập lệnh máy chủ sẽ được hiển thị.

Hy vọng rằng sẽ giúp ai đó.

1

Nếu đây là vấn đề liên quan đến Magento, bạn nên tắt tính năng lập chỉ mục lại tự động vì điều này có thể làm cho ổ cắm hết thời gian chờ (hoặc hết hạn). Bạn có thể bật lại sau khi kịch bản đã hoàn thành nhiệm vụ của mình. Tăng thời gian chờ socket mặc định trong php.ini cũng là một ý tưởng hay.

4

Tôi phải đối mặt với cùng một vấn đề.
Tôi đã chạy Nó như CLI.Vì vậy, PHP đã luôn luôn chạy và nó đã phải thực hiện cuộc gọi xà phòng một lần nữa và một lần nữa sau một khoảng thời gian.
Sai lầm tôi đã làm là sử dụng mẫu đơn cho việc này. Tôi nghĩ việc sử dụng singleton sẽ làm tăng hiệu suất nhưng inturn tôi nhận được

Error Fetching http headers in ... 

Tôi đã sửa nó bằng cách tạo đối tượng mới cho mỗi cuộc gọi.

0

Vui lòng cập nhật php.ini của bạn với

default_socket_timeout = 120 

Bạn có thể tạo php.ini của riêng bạn nếu php được cài đặt một CGI thay vì một module Apache

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