c# - WCF 服务在方法请求上返回 404

标签 c# wcf ssl iis-7.5

我有一个 WCF 服务页面,它仅通过 SSL 运行 WebGets/WebInvokes - 它在我的本地机器上运行良好(自签名证书)。但是,在生产环境中,我可以访问 service.svc(它会向我提供有关如何使用的消息),但 service.svc/AnyRequest 返回 404。这两个环境都托管在 IIS 7.5 中。

我已经启用了跟踪,服务甚至没有接收到任何方法请求(例如 service.svc/SomeRequest),但是它正在处理 service.svc 就好了。它还在 https://computername.domain.net/path/service.svc 上监听 - 这正常吗?它通常应该指向 https://publicfacing.com/path/service.svc 吗?

另请注意,生产服务器在 IIS 中托管多个站点。

下面是我的 web.config 的 system.serviceModel 部分。 SSLBehave 是从 here 建议的.

  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="TransportSecurity">
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SSLBehave">
          <useRequestHeadersForMetadataAddress>
            <defaultPorts>
              <add scheme="https" port="443"/>
            </defaultPorts>
          </useRequestHeadersForMetadataAddress>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="UserManagement.ajaxAspNetAjaxBehavior">
          <webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Wrapped" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="UserManagement.ajax" behaviorConfiguration="SSLBehave">
        <endpoint address="" behaviorConfiguration="UserManagement.ajaxAspNetAjaxBehavior"
          binding="webHttpBinding" bindingConfiguration="TransportSecurity" contract="UserManagement.ajax" />
      </service>
    </services>
  </system.serviceModel>

最佳答案

每当我使用新开发的 WCF Web 服务遇到 404 时,我做的第一件事就是检查解释此类调用所需的处理程序映射,因为这通常是问题的原因。有多种方法可以解决此问题,其中许多方法需要手动执行 ServiceModelReg.exe 控制台命令:这些无疑是有效的过程,但也可能无法工作 - 或者产生其他问题 - 如果您开发机的配置特别复杂。我在下面提出的解决方法的实现时间稍长,但具有更安全可靠地解决问题的优点。

  • 打开用于机器管理的服务器管理器界面,通常出现在任务栏开始菜单中。
  • 转到仪表板(或控制面板)并选择添加角色或功能以打开向导。
  • 选择基于角色或基于功能的安装类型以及您要使用的服务器,即您的本地/本地服务器。
  • 转到功能部分:在那里,展开.NET Framework 3.5 功能 节点和/或.NET Framework 4.5 功能节点,具体取决于您安装的内容:如果您同时安装了这两个节点,则应执行以下步骤两次(对每个节点执行一次)。
  • 展开 WCF 服务部分(如果可用),然后选择 HTTP 激活(参见下面的屏幕截图)。
  • 继续,直到完成向导,然后单击安装

enter image description here

安装完成后,您应该能够运行 WCF 服务而不会再次出现 404 错误。

有关此特定问题及其解决方法的更多信息,您还可以 read this post在我的博客上。

关于c# - WCF 服务在方法请求上返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16240217/

相关文章:

java - Spring Boot 导入信任库

c# - 在 C# 中验证 SSL 证书

c# - 如何向非技术人员推广 WCF?

c# - 如何在 SharePoint 中读取具有多个值的 LookUp 字段?

c# - 防火墙后的 WCF 服务——如何设置端口转发?

c# - 在服务器端解码查询字符串值

android - android中受信任的CA列表?

c# - 如何使用被解析的类型来解析依赖

c# - c#中有函数指针吗?

c# - 如何为 x=>x.List 创建简单的表达式树