30

SSL 経由で WebGets/WebInvokes のみを実行する WCF サービス ページがあります。ローカル マシン (自己署名証明書) で正常に動作します。ただし、運用環境では、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>
4

9 に答える 9

5

おそらく、RouteConfig.cs ファイルに次の行を追加します。

routes.IgnoreRoute("{resource}.svc/{*pathInfo}");

.svc ファイルがアプリケーションのルートにある限り。

于 2015-06-25T02:38:08.987 に答える
4

あなたが言及したように、.svc 拡張子でサービスにアクセスできますservice.svcが、REST 形式service.svc/AnyRequestではアクセスできません。問題はルーティング統合にあるはずです。

これをあなたに追加してくださいweb.config

 <system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </modules>
  <handlers>
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/>
  </handlers>
 </system.webServer> 

IIS 6 では、このエラーの原因は svc 拡張子の設定にあるはずCheck that file existsです。「ファイルの存在を確認する」のチェックを外してください。詳細については、「IIS ホステッド サービスが失敗する」を参照してください。

于 2013-05-05T17:53:34.463 に答える