IISで唯一のバインディングとして443のhttpsを使用して、別のWebサイトでWCF Webサービスをホストしようとしています。
次の構成は、両方のバインディング(http(80)/ https(443))を使用するWebサイトで使用するとうまく機能します。 httpバインディングを削除すると、次のエラーがスローされ始めます。
BasicHttpBindingをバインドしたエンドポイントのスキームhttpに一致するベースアドレスが見つかりませんでした。登録済みのベースアドレススキームは[https]です。
IIS httpsバインディングのみを備えたWebサイトで動作させるにはどうすればよいですか?
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="defaultBasicHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/ERPService/retailPayment.svc"
binding="basicHttpBinding" bindingConfiguration="defaultBasicHttpBinding"
contract="RetailPaymentService.RetailPayment.SVRetailPaymentService" name="EnterpriseRetailPayment" />
</client>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="MyEndPointBehavior">
<!--<SchemaValidator enabled="true"/>-->
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="SettlementSalesCollection.SaleItemService" behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint behaviorConfiguration="MyEndPointBehavior" binding="basicHttpBinding"
name="SettlementSalesCollection"
contract="SettlementSalesCollection.CITransactionSettlementListenerService" />
<endpoint name="mexEndpoint" contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
<extensions>
<behaviorExtensions>
<add name="SchemaValidator"
type="SettlementSalesCollection.SchemaValidation.SchemaValidationBehavior+CustomBehaviorSection, SettlementSalesCollectionService, Version=1.0.0.0, Culture=neutral" />
</behaviorExtensions>
</extensions>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
あなたの設定はそれに似ているはずです。変更が必要な場合があります<transport clientCredentialType="None" proxyCredentialType="None" />
認証のニーズに応じて。以下の構成では、認証は必要ありません。
<bindings>
<basicHttpBinding>
<binding name="basicHttpBindingConfiguration">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="XXX">
<endpoint
name="AAA"
address=""
binding="basicHttpBinding"
bindingConfiguration="basicHttpBindingConfiguration"
contract="YourContract" />
</service>
<services>
これにより、basicHttpBinding
を持つWCFサービスがHTTPSを使用できるようになります。
私の問題は、IISでバインドが見つからないことが原因で発生しました。サイトを右クリックし、[バインドを編集]> [追加]> [https]
[IIS Express Development Certificate]を選択し、ポートを443に設定してから、webconfigに別のバインディングを追加しました。
<endpoint address="wsHttps" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" name="Your.bindingname" contract="Your.contract" />
ServiceBehavioursにも追加されました:<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
そして最終的には機能しましたが、このエラーのstackoverflowでチェックしたソリューションはどれも私の特定のシナリオに適用できませんでしたので、他の人を助ける場合にはここに含めてください
https
をIIS内のサイトバインドとしてのみ構成する場合、これを取得できます。
http(80)
とhttps(443)
を追加する必要があります-少なくとも私は追加しました:-)
@Szymonの回答に従ってバインディングを試しましたが、うまくいきませんでした。 basicHttpsBindingを試しました。これは.net 4.5の新機能で、問題を解決しました。ここに私のために働く完全な構成があります。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpsBinding>
<binding name="basicHttpsBindingForYourService">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"/>
</security>
</binding>
</basicHttpsBinding>
</bindings>
<services>
<service name="YourServiceName">
<endpoint address="" binding="basicHttpsBinding" bindingName="basicHttpsBindingForYourService" contract="YourContract" />
</service>
</services>
</system.serviceModel>
参考までに、私のアプリケーションのターゲットフレームワークは4.5.1です。 IISこのwcfサービスをデプロイするために作成したWebサイトでは、httpsバインディングのみが有効になっています。
私の問題は、IISでhttpsバインディングが見つからないことによっても発生しました。選択されたデフォルトのWebサイト>右端のペインで[バインディング]> [追加]> https
「IIS Express Development Certificate」を選択し、ポートを443に設定します
私の場合、プロトコルマッピングの下のバインディング名はエンドポイントのバインディング名と一致しませんでした。以下の例では一致しています。
<endpoint address="" binding="basicHttpsBinding" contract="serviceName" />
そして
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
Open IISそして、デフォルトのアプリケーションプールを右クリックし、バインディングを追加して、HTTPSプロトコルでアプリケーションを動作させます。
タイプ:https
IPアドレス:すべて未割り当て
ポート番号:443
SSL証明書:WMSVC
それから
IISをクリックして再起動します
完了