【问题标题】:WCF 4.0 with PHP 5 Client带有 PHP 5 客户端的 WCF 4.0
【发布时间】:2011-10-24 16:30:56
【问题描述】:

我正在尝试为 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>

功能:

> public int Addiere(int a, int b)
        {
            return a + b;
        }

PHP 请求:

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

对于这些函数,我得到一个这样的错误:

“未捕获的 SoapFault 异常:[a:DeserializationFailed] Formatierer 格式化程序在 消息反序列化:无法反序列化请求正文 该消息的目的是用于操作“Addiere”。末端元素 “正文” aus 命名空间“http://schemas.xmlsoap.org/soap/envelope/”是 预期的。找到的是 Namespace"" 的元素 "param1"。

德语:

致命错误:未捕获的 SoapFault 异常:[a:DeserializationFailed] Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme 上一篇:Fehler beim Deserialisieren des Textkörpers der Anforderungsnachricht für Vorgang "Addiere"。 Es wurde das Endelement “正文”aus 命名空间“http://schemas.xmlsoap.org/soap/envelope/” 厄瓦特。 Gefunden wurde "元素 "param1" aus 命名空间 """。泽勒 2, 位置 148. 在 C:\xampp\htdocs\TestClient\Client.php:6 堆栈跟踪: 0 C:\xampp\htdocs\TestClient\Client.php(6): SoapClient->__call('Addiere', Array) #1 C:\xampp\htdocs\TestClient\Client.php(6): SoapClient->Addiere(2, 4) #2 {main} 在第 6 行的 C:\xampp\htdocs\TestClient\Client.php 中抛出

但是这个功能是有效的:

C#

> public string Message()
        {
            return "WORD";
        }

PHP

> $result = $client->Message();
var_dump($result);

结果

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

唯一的问题是返回类型不是字符串。

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

【问题讨论】:

    标签: php wcf webservice-client


    【解决方案1】:

    问题解决了。

    当调用具有超过 2 个参数的方法时,您需要将它们放入这样的数组中

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

    另一个问题是返回类型,这是用

    解决的
    ....->AddiereResult;
    

    不确定最后一部分是什么意思,但我会弄清楚的。

    【讨论】:

    • 祝贺解决方案。如果有能力,请将您的答案标记为“已接受”,以便其他人可以从您的成功中学习。干杯~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多