WCF サービスがメソッド要求に対して 404 を返す 質問する

WCF サービスがメソッド要求に対して 404 を返す 質問する

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は以下から提案されました。ここ

  <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>

ベストアンサー1

新しく開発した WCF Web サービスで 404 エラーが発生したときに最初に行うことは、このタイプの呼び出しを解釈するために必要なハンドラー マッピングを確認することです。これが問題の原因であることが多いためです。この問題を回避する方法はいくつかありますが、その多くはコンソールServiceModelReg.exeコマンドを手動で実行する必要があります。これらは間違いなく有効な手順ですが、開発マシンの構成が特に複雑な場合は機能しないか、追加の問題が発生する可能性があります。以下で提案する解決方法は、実行に少し時間がかかりますが、より安全かつ確実に問題を解決できるという利点があります。

  • 開くサーバーマネージャーマシン管理用のインターフェースで、通常はタスクバーそしてそのスタートメニュー
  • に行くダッシュボード(またはコントロールパネル)選択して役割または機能を追加するウィザードを開きます。
  • を選択役割ベースまたは機能ベースのインストールタイプ作業するサーバー、つまりローカル/ローカル サーバー。
  • に行く特徴セクション: そこに到達したら、.NET Framework 3.5 の機能ノードおよび/または.NET Framework 4.5 の機能インストールしたものに応じて、ノードごとに実行する必要があります。両方ある場合は、次の手順を 2 回実行する必要があります (それぞれに対して)。
  • WCFサービスセクションを展開し(利用可能な場合)、HTTP アクティベーション(下のスクリーンショットを参照)。
  • ウィザードを完了するまで続行し、インストール

ここに画像の説明を入力してください

インストールが完了すると、404 エラーが発生することなく WCF サービスを実行できるようになります。

この特定の問題とその解決方法に関する追加情報については、この投稿を読む私のブログで。

おすすめ記事