【发布时间】:2019-06-19 17:17:24
【问题描述】:
我已开发并发布了托管在 Azure 云服务(经典)中的 WCF 服务。我已安装证书并将云服务配置为使用该证书。这是从 CA 购买的证书,而不是自签名证书。我最初怀疑证书有问题,但正如 Steffen 在他的评论中指出的那样,情况似乎并非如此。我可以通过 HTTP 发送 POST 请求,并得到 200 响应。但是,如果我尝试通过 HTTPS 发送 POST 请求,我会收到 404 响应。这是两个请求之间的唯一区别。需要使用 HTTPS。
我已将 IIS 配置为为本地和远程调用发送详细的错误消息,但除了基本 404 之外,我仍然没有收到任何信息,未找到。
以下是服务定义 (.csdef) 文件中的绑定和端点部分。
<Bindings>
<Binding name="HttpsIn" endpointName="HttpsIn" />
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
<Endpoints>
<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="mycertificate" />
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
这里是 web.config 文件中的绑定部分:
<bindings>
<basicHttpBinding>
<binding name="HttpsIn">
<security mode="Transport"></security>
</binding>
</basicHttpBinding>
</bindings>
这可行,返回 200 响应:
POST http://mydomain/myservice.svc HTTP/1.1
User-Agent: Fiddler
Host: mydomain
Content-Length: 600
Content-Type: text/xml; charset=utf-8
SOAPAction: "myclass/myaction"
<?xml version="1.0" etc, etc
失败,返回 404 响应:
POST https://mydomain/myservice.svc HTTP/1.1
User-Agent: Fiddler
Host: mydomain
Content-Length: 600
Content-Type: text/xml; charset=utf-8
SOAPAction: "myclass/myaction"
<?xml version="1.0" etc, etc
回复:
HTTP/1.1 404 Not Found
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Thu, 20 Jun 2019 09:40:02 GMT
Content-Length: 0
我尝试在下面进行亚伯拉罕·奎安建议的更改。我的服务配置主要如 Abraham 所示,除了它没有 aspNetCompatibilityEnabled 属性或 protocolMapping 部分,所以我添加了这些。我的 IIS 绑定如 Abraham 所示,但使用的是特定 IP 地址而不是“全部分配”,因此我也进行了更改。在这些更改之后,我得到了服务激活异常。错误消息表明 aspNetCompatibilityEnabled 属性存在问题,因此我再次将其取出。我现在在尝试远程浏览该站点时收到 503,服务不可用,但我在登录到服务器时能够浏览到该站点。这看起来可能是 IP 地址的问题,所以我更改了 IIS 绑定以再次使用特定的 IP 地址。我现在回到了我开始的地方 - 该服务通过 http 工作,但是当我尝试通过 https 调用它时得到 404。
总之,我可以使用 HTTP 或 HTTPS 在浏览器 (mydomain/myservice.svc?wsdl) 中显示 WSDL。我可以使用 HTTP 或 HTTPS 使用 GET 调用 SOAP 操作方法。这当然不会返回想要的结果,因为需要使用 POST 调用该方法,但它会返回“您已创建服务”页面的内容。 404 只发生在 HTTPS 和 POST 的组合中。
HTTP + GET = 200,
HTTPS + GET = 200,
HTTP + POST = 200,
HTTPS + POST = 404.
【问题讨论】:
-
这与 SSL 证书完全无关。 404 响应意味着该页面不存在 - 您在成功的 TLS 握手后得到此响应,即证书有效。为什么您的服务器在此特定请求上返回 404 尚不清楚,但它与证书无关。
-
感谢 Steffen。我已编辑问题以考虑您的评论。
-
您是否在 web.config 中指定了
<security mode="Transport">?你有谷歌 WCF Https 绑定吗? -
嗨,Thomas,是的,安全模式 = "Transport",是的,我用谷歌搜索过,但我当然不会声称自己了解我发现的所有内容。我将在问题中添加有关绑定的信息。
标签: azure wcf iis azure-cloud-services