【解決方法】https バインディングのみを使用するように WCF サービス / IIS 7.5 を構成します。

プログラミングQA


WCF サービスをホストする ASP.NET Web アプリケーションの構成でいくつか問題が発生しました。 そして、私はかなり長い間探してきました。 正直なところ、かなり多くの結果があり、私は WCF の専門家ではありません。 ほとんどの解決策は、wsHttpBinding (私は使用しません) か、取得したものに関連付けられていない ErrorMessages を表示するためのものです。

これは私が達成したいことです:

特定のポートで https バインディングを介してのみ WCF サービスにアクセスします (例: “https://example.org:5555/MyService.svc”)。

これは私の現在の問題です:

「https://example.org:5555/MyService.svc」でサービスに正常にアクセスできます
しかし
IIS7.5 で http バインドを構成する必要があります (構成されている限り、localhost と意味のないポートを指していれば十分です…)

MyService.svc で get 要求を行ったときのエラー メッセージ (CustomErrors=”Off” を使用)

Service 'CustomNamespace.MyService' has zero application (non-infrastructure) endpoints. This might be because no configuration file was found for your application, or because no service element matching the service name could be found in the configuration file, or because no endpoints were defined in the service element.

そのことから、構成が欠落している可能性があることは理解しています。 しかし、IIS の http および https バインディングが存在する場合は機能するのに、https バインディングのみが存在する場合は機能しないのはなぜですか?

私の質問:

http バインディングを削除するには、どのような手順が必要ですか?

どんな助けでも本当に感謝します:)

追加情報:
– サービスは IIS 7.5 で正常に動作します。 https バインディング (例: ip “All Unassigned” とポート 5555) および http バインディング (例: ip “::1″(localhost) とポート 55555) がサイトに構成されている場合。
– IIS で次のいずれかの手順を実行するとすぐに。 アプリケーションが動作を停止します:
– http バインディングを削除します
– IIS の[SSL が必要]->[SSL 設定]を true に設定します。

ConfigFile の内容:

XML
<?xml version="1.0"?>
<configuration>
   <system.serviceModel>
      <bindings>
         <basicHttpBinding>
            <binding>
               <security mode="Transport">
                  <transport clientCredentialType="None" />
               </security>
            </binding>
         </basicHttpBinding>
      </bindings>
      <behaviors>
         <serviceBehaviors>
            <behavior>
               <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
               <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
         </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
   </system.serviceModel>
</configuration>

MyService.svc の内容 (簡略化):

XML
<%@ ServiceHost Service="CustomNamespace.MyServiceImpl" %>

「MyServiceImpl.cs」の内容(簡略化)

C#
namespace CustomNamespace {   

   public interface IMyService {

      [OperationContract(Name = "doSomething", Action = "", ReplyAction = "*")]
      [XmlSerializerFormat]
      CustomReplyType DoSomething(CustomType request)

   }

   public class MyServiceImpl : IMyService {

      public CustomReplyType DoSomething(CustomType request) {
         // Do Stuff
         return new CustomReplyType();
      }

   }

}

解決策 1

あなたはいくつかのことを試したと言いましたが、この記事を読んでそのアプローチを試しましたか?

WCF WsHttp バインディングで HTTPS を有効にする 7 つの簡単な手順[^]

解決策 2

ありがとう、私は一日中これを理解しようとしてきました。 require ssl に関するあなたのコメントは、私にヒントを与えてくれました。はい、私の場合、webHttpBinding が機能するには、iis で http と https の両方のバインディングが必要なので、それらを通常のポート 80 とポート 443 の Web サイトとして設定し、未割り当てのすべてのアクセスを許可します。ただし、[SSL が必要](チェック ボックス) を設定すると、人々は https を使用するように強制され、その人が http にアクセスすると、それが安全な Web サイトまたは 403 – 禁止されていることを示す友好的またはあまり友好的でないメッセージを受け取るという副次的な利点があります。 : アクセスが拒否されたというメッセージ。

ところで、あなたの http バインディングには、https バインディングにある 4 つの 5 (5555) ではなく、5 つの 5 (55555) があることがわかります。

コメント

タイトルとURLをコピーしました