【问题标题】:CommunicationException with Windows Phone 7 and PHP Web ServiceCommunicationException 与 Windows Phone 7 和 PHP Web 服务
【发布时间】:2011-11-09 03:56:51
【问题描述】:

我有一个使用 NuSOAP 库构建的 PHP Web 服务。我已经调整了 Web 服务以与 Windows Phone 一起使用,一切似乎都很好。

问题是当我收到回复时,我收到了 CommunicationException。我认为那是无法识别 ?wsdl 的端点的 url。

我搜索了有关它的信息,但找不到任何解决方法。

我的代码如下:

       private void button1_Click(object sender, RoutedEventArgs e)
       {
        var test = new TS.TestWSDLPortTypeClient();
        test.sumarCompleted += test_sumarCompleted;
        test.sumarAsync(3, 4);
       }

      void test_sumarCompleted(object sender, TS.sumarCompletedEventArgs e)
      {
      MessageBox.Show(e.Result.ToString();
      }

还有我的 .ClientConfig

<configuration>
             <system.serviceModel>
                <bindings>
                   <basicHttpBinding>
                    <binding name="TestWSDLBinding" maxBufferSize="2147483647"                                      maxReceivedMessageSize="2147483647">
                     <security mode="None" />
                 </binding>
             </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://192.168.1.38/ws_test.php" binding="basicHttpBinding"
                bindingConfiguration="TestWSDLBinding" contract="TestWSDL.TestWSDLPortType"
                name="TestWSDLPort" />
              </client>
              </system.serviceModel>
               </configuration>

我也测试过:

<endpoint address="http://192.168.1.38/ws_test.php?wsdl"...

我也用域名测试过,ip:127.0.0.1,其他端口等

PHP代码是:

#Declaración del servidor nusoap
$server = new soap_server();
$server->configureWSDL("TestWSDL","urn:TestWSDL", "http://libreriacloud.sytes.net/ws_monster/ws_test.php?wsdl");
$server->soap_defencoding = 'UTF-8'; 

#Registro de la Funcion Sumar
$server->register(
    'sumar',
    array(
        'x' => 'xsd:int',
        'y' => 'xsd:int'
        ),
    array('return' => 'xsd:int'),
    'urn:TestWSDL',
    'urn:TestWSDL/sumar',
    'document',
    'literal',
    'Suma dos datos'
);

function sumar($x, $y)
{
    return $x+$y;
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA); 

WSDL 网址是:http://libreriacloud.sytes.net/ws_monster/ws_test.php

【问题讨论】:

  • 我想知道您是否可以提供更多信息。听起来您尝试将客户端中的服务引用添加到 ws_test.php 服务没有成功。您是否使用 Visual Studio 中的添加服务引用功能执行此操作?当你尝试时会发生什么? client/endpoint/@address 不应引用 ?wsdl URL,它是一种用于查找元数据交换端点的临时协议(/mex 已成为其标准)。您是否有机会在公共服务器上托管示例 php 服务,以便我们可以构建一个工作示例客户端?
  • 这是一篇博文,Testing the NuSOAP Webservice in C#,它似乎很好地解释了如何在 NuSOAP 中添加对 php 服务的服务引用。这与您一直在尝试的方法相比如何?
  • 我工作的例子,但是当我按要求做时,异步 Windows Phone 停止工作

标签: php web-services windows-phone-7 wsdl communicationexception


【解决方案1】:

我解决了我的问题。而不是'document'到''已经把'document',因为他在svc中见过,我疯了寻找答案最后去试错。

服务器编码解决方案:

#Declaración del servidor nusoap
$server = new soap_server();
$server->configureWSDL("TestWSDL","urn:TestWSDL", "http://libreriacloud.sytes.net/ws_monster/ws_test.php?wsdl");
$server->soap_defencoding = 'UTF-8'; 

#Registro de la Funcion Sumar
$server->register(
    'sumar',
    array(
        'x' => 'xsd:int',
        'y' => 'xsd:int'
        ),
    array('return' => 'xsd:int'),
    'urn:TestWSDL',
    'urn:TestWSDL/sumar',
    '',
    'literal',
    'Suma dos datos'
);

function sumar($x, $y)
{
    return $x+$y;
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA); 

都是一样的,但是在下面

'urn:TestWSDL/sumar',

我放单引号

【讨论】:

    【解决方案2】:

    您似乎对网络服务有一些控制权。如果是这样,我会远离 SOAP,而使用更简单的技术堆栈,例如带有 JSON 的 REST。为什么?因为 WCF 功能强大但难以调试/设置等。

    有很多很好的库可以在 .NET 上使用 JSON:http://json.codeplex.com/ 对于 REST,如果您需要的不仅仅是 WebClient/WebRequest):http://restsharp.org/

    很抱歉,如果这不是您期望的答案,但我与 WCF 进行了很多工作以了解何时不使用它。

    【讨论】:

    • 恕我直言,我认为不需要改变服务技术。 WCF 配置,尤其是配置客户端,并不是特别难。 WCF 4 在 REST 和 JSON 方面做得相当不错,因此对于简单的任务,不需要添加 RESTSharp 或 JSON.net。这些都是很好的库,但据我所知,与问题几乎无关。也许@Gandark 可以更清楚地了解所遇到的问题。
    • 我需要将 SOAP 与 PHP 一起使用,关键是一切正常,Web 服务发挥作用,但在尝试返回响应时出现配置问题(端点地址)
    • @VisualStuart WCF 它是如此简单,以至于当您遇到错误时,您必须去 SO 才能理解它......是的,WCF 4(客户端)非常简单,以至于 MS 选择重新重写它适用于 .NET 框架 4.5 (wcf.codeplex.com/wikipage?title=WCF HTTP)。顺便说一句,这些库没有 XML 配置,因为您不需要它。 WCF 太过分了,我试图在继续之前指出它。
    • 你好@Matthieu,Gandark 的问题不是讨论 WCF 优缺点的合适时间或地点(硬币正反两面都有很多。)他解释说,他的解决方案仅限于SOAP 服务的客户端。我希望看到他在这方面取得成功,也许我可以为他的成功做出贡献。我想这就是我们都在这里的原因。
    • 在第一段中,他说“我已经调整了 Web 服务以与 Windows Phone 一起工作,一切看起来都很好。”如果他适应了一次,在我看来他可以适应与其他堆栈服务器端的工作。我有一些使用 Windows Phone 和 WCF 的经验,我可以说 WCF 在这种特定情况下不是一个好的解决方案。如果现在他根本无法更改服务器端服务,也许我们可以提供有关客户端使用代码的更多详细信息?
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多