WCF 4.0与PHP 5客户端

Adr*_*ano 3 php wcf webservice-client

我正在尝试为WCF Web服务创建一个PHP客户端.但是当我调用服务的功能时,我得到了一些错误.

App.config中

<system.serviceModel>
<services>
  <service behaviorConfiguration="MyServiceBehavior"
           name="GSC.Wcf.Services.CartService">
    <endpoint address=""
              binding="basicHttpBinding"
              contract="GSC.Wcf.Services.ICartService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding"
              contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8731/CartService" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="MyServiceBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)

功能:

> public int Addiere(int a, int b)
        {
            return a + b;
        }
Run Code Online (Sandbox Code Playgroud)

PHP请求:

> $client = new SoapClient("http://localhost:8731/CartService?wsdl");
>
> $result = $client->Addiere(2,4);
Run Code Online (Sandbox Code Playgroud)

对于这些功能我得到一个像这样的错误:

"Uncaught SoapFault异常:[a:DeserializationFailed] Formatierer格式化程序在消息去除期间发布了异常:无法反序列化消息的请求主体用于操作"Addiere".结束元素"Body"aus命名空间预计会出现"http://schemas.xmlsoap.org/soap/envelope/".发现是Namespace""的元素"param1".

在德国:

致命错误:未被捕获的SoapFault异常:[a:DeserializationFailed] Der Formatierer hat beim Deserialisieren der Nachricht eineAusnahmeausgelöst:Fehler beim DeserialisierendesTextkörpersderAnforderungsnachrichtfürVorgang"Addiere".Es wurde das Endelement"Body"aus命名空间"http://schemas.xmlsoap.org/soap/envelope/"erwartet.Gefunden wurde"Element"param1"aus Namespace""".Zeile 2,位置148.在C:\ xampp\htdocs\TestClient\Client.php:6堆栈跟踪:0 C:\ xampp\htdocs\TestClient\Client.php(6):SoapClient - > __ call('Addiere',数组)#1 C:\ xampp\htdocs\TestClient\Client.php(6):SoapClient-> Addiere(2,4)#2 {main}在C:\ xampp\htdocs\TestClient\Client.php中引发6

但是这个功能正在起作用:

C#

> public string Message()
        {
            return "WORD";
        }
Run Code Online (Sandbox Code Playgroud)

PHP

> $result = $client->Message();
var_dump($result);
Run Code Online (Sandbox Code Playgroud)

结果

object(stdClass)#2(1){["MessageResult"] => string(4)"WORD"} WORD

唯一的问题是返回类型是没有字符串.

任何人都可以猜到什么是错的,或者我发布了更多像wsdl这样的东西?或者有没有人知道很好的资源我可以查看如何获得正确的配置与我的服务进行通信?

Adr*_*ano 11

问题解决了.

调用具有2个以上参数的方法时,需要将它们放在这样的数组中

$result = $client->Addiere(array("a" => 2, "b" => 3))->AddiereResult;

而另一个问题是返回典型,这是通过解决的

....->AddiereResult;
Run Code Online (Sandbox Code Playgroud)

不知道最后一部分意味着什么,但它的确有效我会想出来的.