2017-09-28 71 views
-1

我嘗試在c#服務器和php客戶端之間使用web服務。肥皂故障'輸入字符串不正確格式'

當我使用沒有參數的web服務時,所有的作品!

但是,當我想傳遞參數的功能,我有此錯誤: 的SOAPFault:文件格式德拉科特迪瓦錨鏈EST主菜不正確

我的WSDL文件: https://pastebin.com/ti805zkW

我的PHP代碼:

public function previewAction(Request $req) 
{ 
    $client = new \SoapClient("http://localhost:1664/WebReport/Service/?wsdl"); 
    $preview = $client->Preview(array('id' => 1, 'choice' => 2, 'userDate' => 'test')); 
    return new JsonResponse($preview); 
} 

我的C#代碼Iservice:

using System.Collections.Generic; 
using System.ServiceModel; 

namespace WebReport 
{ 
    [ServiceContract] 
    public interface IService 
    { 
     [OperationContract] 
     bool Reload(); 

     [OperationContract] 
     bool Treatment(); 

     [OperationContract] 
     Dictionary<string, float> Preview(int id, int choice, string userDate); 
    } 
} 

我的C#服務代碼:

using System; 
using System.Collections.Generic; 

namespace WebReport 
{ 
    public class Service : IService 
    { 
     public bool Reload() 
     { 
      //Application.GetInstance().ReloadConfig(); 
      return true; 
     } 

     public bool Treatment() 
     { 
      //DataPoints.Treatment.GetInstance().run(); 
      return true; 
     } 

     public Dictionary<string, float> Preview(int id, int choice, string userDate) 
     { 
      Console.WriteLine("{ 0}.{ 1}.{ 2}", id, choice, userDate); 
      Dictionary<string, float> test = new Dictionary<string, float>(); 
      test.Add("2017-05-04 10:10:10", 100000); 
      test.Add("2017-05-05 10:10:10", 100001); 
      return test; 
     } 
    } 
} 

我有測試來提取wsdl文件PHP類與wsdl2phpgenerator但同樣的錯誤。

任何想法?

回答

0

我不是PHP開發人員,但在使用PHP測試我自己的API時,我接受控制器中的對象,而不是每個數組項的參數。

因此,創建一個具有與數組匹配的屬性的類,並將其作爲控制器的一個參數。

public class PreviewDTO 
{ 
    public int id { get; set; } 
    public int choice { get; set; } 
    public string userDate { get; set; } 
} 

而且控制器:

public Dictionary<string, float> Preview(PreviewDTO prev) 
{ 
    Console.WriteLine("{ 0}.{ 1}.{ 2}", prev.id, prev.choice, prev.userDate); 
    Dictionary<string, float> test = new Dictionary<string, float>(); 
    test.Add("2017-05-04 10:10:10", 100000); 
    test.Add("2017-05-05 10:10:10", 100001); 
    return test; 
} 
0

謝謝回答。

我發現我的問題。

我已經取代這個:

Console.WriteLine("{ 0}.{ 1}.{ 2}", id, choice, userDate); 

通過這樣的:在字符串參數

Console.WriteLine("{0}.{1}.{2}", id, choice, userDate); 

空間。