0

我有一个带有 net.tcp 和 http 服务器绑定的 WCF 服务。

Web.config 文件如下所示

 <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="tcp_Unsecured" portSharingEnabled="true">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service name="MarketFeedServiceLibrary.Service1">
        <endpoint address="net.tcp://localhost:808/MarketFeedService/Service.svc/mexTcp"
          binding="mexTcpBinding" bindingConfiguration="" name="mexEndPoint"
          contract="IMetadataExchange" />
        <endpoint address="net.tcp://localhost:808/MarketFeedService/Service.svc/tcpService"
          binding="netTcpBinding" bindingConfiguration="tcp_Unsecured"
          name="dataEndPoint" contract="MarketFeedServiceLibrary.IService1" />
        <endpoint address="http://localhost:80/MarketFeedService/Service.svc/basicHttp"
          binding="basicHttpBinding" bindingConfiguration="" name="httpDataEndpoint"
          contract="MarketFeedServiceLibrary.IService1" />
        <endpoint address="http://localhost:80/MarketFeedService/Service.svc/mex"
          binding="mexHttpBinding" bindingConfiguration="" name="httpMexEndpoint"
          contract="MarketFeedServiceLibrary.IService1" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
       />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

我已经在本地 PC 的 IIS 中托管了该服务,如果我使用地址在 IE 中浏览 "http://localhost/MarketFeedService/Service.svc",我会得到如下元数据信息

在本地 PC 上浏览

但是,如果我在 VPS 服务器(Windows Server 2008 IIS 7.5)上的 IIS 中托管相同的 WCF Web 服务,地址相同,我会收到以下错误,

在 VPS 上浏览

我也可以添加本地托管服务的服务参考,但是如果我尝试使用路径“net.tcp://IPAddress/MarketFeedService/Service.svc”添加服务器的服务参考,我会收到以下错误

无法分派消息,因为端点地址“net.tcp://IPAddress/MarketFeedService/Service.svc”处的服务对于该地址的协议不可用。

注意

  1. Net.Tcp 端口共享服务,Net.Tcp Listener Adapter 开启
  2. WCF Http 和 Non-Http Activation 已安装并启用。
  3. 为默认网站和应用程序启用了 http 和 net.tcp 协议。

非常感谢您提前。

4

2 回答 2

0

svc 文件类型是否在 IIS 中正确映射? http://msdn.microsoft.com/en-us/library/vstudio/ms752252(v=vs.90).aspx

于 2013-02-13T11:44:27.593 回答
0

对于那些有可能或可能不完全匹配这个问题的问题的人来说,只是另一种选择(由于防火墙,我无法查看发布的工作快照) -

我遇到了很多问题,尤其是 RESTful 服务在本地运行良好,但在服务器上崩溃和烧毁。我认为这可能是因为与根配置或注册表的配置冲突,但实际上并非如此。

您必须进入 IIS 并查看您的基本站点级别设置,将有一个名为“ISAPI 过滤器”的功能选项。

长话短说,称为 UrlScan 的特定 ISAPI 过滤器(版本可能非常,我认为当前是 3.1)是我们问题的根源。这个过滤器的作用是寻找传入请求的模式,以尝试屏蔽潜在的恶意请求。

随着技术的变化和改进,设置不熟悉的请求进来并被拒绝或重新路由。就我而言,它正在查看文件扩展名。从 ASP 扩展启动的旧 SOAP 技术已被识别/祝福 (.asmx),但我们从未设置过 RESTful 或 WCF 服务,因此它无法识别“.svc”扩展名。

初始设置通常非常紧凑,以至于任何 http 请求都会被拒绝或重新路由,并且管理 Web 服务器的任何人都会根据需要调整文件以允许功能。

您可以转到文件位置,在同一目录中是具有该工具设置的 .ini 文件。

在该文本文件中,查找名为 [AllowExtensions] 和 [DenyExtensions] 的部分。确保将 .svc 添加到“允许”组,并确保它没有明确列在拒绝组中。

Microsoft - 方法:使用 URLScan

于 2017-12-21T19:18:14.810 回答