12

我在我们的一台服务器上的 Windows 服务中托管 WCF 服务。在使其在 basicHttpBinding 中工作并在 .NET 中构建测试客户端(最终成功)之后,我继续尝试使用 SoapClient 类从 PHP 访问它。最终消费者将是一个 PHP 站点,因此我需要使其在 PHP 中可用。

当我不得不在 PHP 代码的 SoapClient 类的构造函数中输入 WSDL url 时,我感到很困惑。WSDL 在哪里?我所拥有的是:

http://172.27.7.123:8000/WordServicehttp://172.27.7.123:8000/WordService/mex

这些都没有公开 WSDL。

作为 WCF 的新手,我可能会问一个愚蠢的问题(或者我可能在某处有错误的假设)。请温柔 :D

不, http: //172.27.7.123 :8000/WordService?wsdl没有显示与 http://172.27.7.123:8000/WordService 不同的任何内容:(

我是否被迫在 IIS 中托管它?我是否被迫使用常规 WebService?

4

2 回答 2

9

这可能会有所帮助:

http://msdn.microsoft.com/en-us/library/ms734765.aspx

简而言之,您需要配置服务端点和行为。这是一个最小的例子:

<system.serviceModel>
  <services>

    <service 
      <!-- Namespace.ServiceClass implementation -->
      name="WcfService1.Service1" 

      <!-- User behaviour defined below -->
      behaviorConfiguration="SimpleServiceBehaviour"> 

      <endpoint 
        address="" 
        binding="basicHttpBinding"
        <!-- Namespace.Interface that defines our service contract -->
        contract="WcfService1.IService1"/>

    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="SimpleServiceBehaviour">

        <serviceMetadata 
          <!-- We allow HTTP GET -->
          httpGetEnabled="true" 

          <!-- Conform to WS-Policy 1.5 when generating metadata -->
          policyVersion="Policy15"/>

      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

不要忘记删除 XML 注释,因为它们在它们所在的位置是无效的。

于 2008-10-03T17:24:40.527 回答
1

请看这个链接:

公开具有多个绑定和端点的 WCF 服务

与以前的 ASMX 服务不同,WCF 的 WSDL(Web 服务定义语言)
服务不会自动生成。上一张图片甚至告诉我们
“此服务的元数据发布当前已禁用。”。  
这是因为我们还没有配置我们的服务来公开任何关于它的元数据。
 要为服务公开 WSDL,我们需要配置我们的服务以提供元信息。笔记:  
mexHttpBinding 还用于共享有关服务的元信息。尽管
这个名字不是很“gump”它代表元数据交换。
于 2008-10-03T17:24:07.393 回答