2

我正在尝试创建一个 WCF Web 服务,该服务将允许其他应用程序通过向该服务 url 发出 http 请求来检索字符串。我尝试在 IIS 中发布服务,并在尝试使用 url 浏览到它时,它说

' The resource cannot be found'

当我检查我使用 url 的文件夹的路径时,我得到了错误

'No protocol binding matches the given address 
'http://localhost:xxxx/WcfSampleLibrary/Service1/mex.' 
 Protocol bindings are configured at the Site level in IIS or WAS configuration'

这是已发布文件夹的目录路径:

C:\inetpub\wwwroot\WcfServices\WcfSampleLibrary\WcfSampleLibrary.Service1
C:\inetpub\wwwroot\WcfServices\WcfSampleLibrary\Web.config
C:\inetpub\wwwroot\WcfServices\WcfSampleLibrary\bin\WcfSampleLibrary.dll

网络配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<system.web>
    <compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
  <service name="WcfSampleLibrary.Service1" behaviorConfiguration ="mex">
    <host>
      <baseAddresses>
        <add baseAddress = "http://192.xxx.x.xxx/WcfSampleLibrary/Service1/" />
      </baseAddresses>
    </host>
    <!-- Service Endpoints -->
    <endpoint address ="" 
      binding="wsHttpBinding"  contract="WcfSampleLibrary.IService1">
     <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <!-- Metadata Endpoints -->
   <endpoint address="http://localhost:xxxx/WcfSampleLibrary/Service1/mex" name="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="mex">
     <serviceMetadata httpGetEnabled="false"/>
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true.  Set to false before deployment 
      to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

4

1 回答 1

3

在 IIS 托管的 WCF 服务中,您没有在地址中指定完整的 URI。IIS 决定地址。在 IIS 中托管时,该baseAddresses元素也会被完全忽略(因此请从您的 Web.config 中删除它)。服务的基地址由放置 wcf 服务的网站和虚拟目录确定。执行以下操作:

  <endpoint
    address="mex"
    binding="mexHttpBinding"
    contract="IMetadataExchange"
  />

那么您的地址将是http://IIS.SERVER/SiteName/Folder/WcfSampleLibrary.Service1.svc。如果您不确定地址是什么,请使用您的 IIS 管理工具,选择包含该服务的站点,右键单击并选择高级 -> 浏览站点。

mex另外,如果您想发布您的 WSDL ,我会在您的行为上打开 httpGetEnabled 。这使您在开发服务时更容易使用您的服务:

<behaviors>
  <serviceBehaviors>
    <behavior name="mex" >
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

启用后,浏览到httpGetEnabled您的服务 URI 将为您提供查看 WSDL 的选项。

于 2012-04-27T13:53:12.347 回答