我尝试在c#server和php client之间使用web服务。
当我使用没有参数的Web服务时,一切正常!
但是当我想将参数传递给函数时我有这个错误: SoapFault:Le format delachaîned'entréeest错误
我的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;
}
}
}
我测试用wsdl2phpgenerator从wsdl文件中提取php类但是同样的错误。
有什么想法吗?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
感谢您的回答。
我发现了我的问题。
我已经取代了这个:
Console.WriteLine("{ 0}.{ 1}.{ 2}", id, choice, userDate);
由此:
Console.WriteLine("{0}.{1}.{2}", id, choice, userDate);
字符串参数中的空格。