我服务器用php做了一个web service,使用SoapDiscovery.class.php生成的WSDL,生成了WSDL文件之后将soap address指向如下显示的这个文件,<?php
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
require ('./ServerSys.class.php');
$soap = new SoapServer('ServerSys.wsdl');
$soap -> setClass("ServerSys");
$soap -> handle();
?>其中ServerSys.class.php实现了一个根据输入的字符串返回不同的ID的功能,他会return一个字符串。
客户端是vs里面C#写的,通过vs添加service reference,然后引用,用其中一个函数来举例吧。现在的问题是我把这些东西放在自己本地的xampp搭的服务器上就一切正常。
可是放到我申请的万网服务器上后返回的xml内容就会固定在开头多出一个方框字符,另一个class的返回内容则是固定多出三个方框,如图所示忽略第一行那个服务器未响应的提示,那是我输出着玩的。可以看到最低下那里S开头的一串字符,服务器已经给出了正确的返回值,但是整个报文开头多了一个方块,导致无法解析xml,希望有经验的朋友能帮帮忙。
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
require ('./ServerSys.class.php');
$soap = new SoapServer('ServerSys.wsdl');
$soap -> setClass("ServerSys");
$soap -> handle();
?>其中ServerSys.class.php实现了一个根据输入的字符串返回不同的ID的功能,他会return一个字符串。
客户端是vs里面C#写的,通过vs添加service reference,然后引用,用其中一个函数来举例吧。现在的问题是我把这些东西放在自己本地的xampp搭的服务器上就一切正常。
可是放到我申请的万网服务器上后返回的xml内容就会固定在开头多出一个方框字符,另一个class的返回内容则是固定多出三个方框,如图所示忽略第一行那个服务器未响应的提示,那是我输出着玩的。可以看到最低下那里S开头的一串字符,服务器已经给出了正确的返回值,但是整个报文开头多了一个方块,导致无法解析xml,希望有经验的朋友能帮帮忙。
但你并没有确保所有文件都没有 BOM 头
<?xml 前面的小方块显然是 BOM 头
额,其实我很想知道文件的格式会否影响到到回复的内容,因为在我想来我的C#程序收到的应该是一个serialized的xml文件,这个xml文件应该是由这个SoapServer生成的,那么它其实和我的php文件是用什么格式保存的应该没关系吧。或者如果不求甚解的话能提示一下如何解决收到的回复包含BOM头的问题呢?因为这个解析的过程是C#提供的函数解析的,我似乎无法干预的样子。还有我用php写了一个测试这个web service的小程序,就没有这个问题了,一切正常。
这样空对空的讨论实在是不能解决问题的
倒是无所谓,反正我现在还在开发中,web service地址是http://try.lygfengwei.com/php/soap/ServerSys.wsdl我的php测试程序如下
<?php
$client = new SoapClient('http://try.lygfengwei.com/php/soap/ServerSys.wsdl');
$arr[] = 'shop';
echo $ret = $client->__call('getID',$arr);visual studio版本是2015rc,现在的情况是php的soap client可以正常解析返回的内容,而vs的c#程序就不行。我使用vs的方式是在工程中添加service reference,然后直接引用。
$u = 'http://try.lygfengwei.com/php/soap/ServerSys.wsdl';
$s = file_get_contents($u);
echo bin2hex($s);efbbbf3c3f786d6c2076657273696f6e3d22312e3022203f3e0a3c64......这个 efbbbf 就是 BOM 头呀!