https://mywebsite/MyApp/Myservice.svc にアクセスすると、以下のエラーが表示されます。
(リンクは、http:// を使用すると動作します)
"サービス '/MyApp/MyService.svc' は、コンパイル中に例外が発生したためアクティブ化できません。 例外メッセージは次のとおりです。バインディング BasicHttpBinding を持つエンドポイントのスキーム https に一致するベース アドレスが見つかりませんでした。登録されているベースアドレススキームは [http]..."
EDIT: そこで address=""
を address="https:// ..."
に変更すると、代わりにこのエラーが表示されます。
"Error:プロトコル 'https' はサポートされていません...。'https://.../Annotation.svc' で、コントラクト '"Annotation"' を持つ ChannelDispatcher は、その IChannelListener." を開くことができません。
私の Web.Config
は以下のようなものです。
<services>
<service behaviorConfiguration="AnnotationWCF.AnnotationBehavior"
name="AnnotationWCF.Annotation">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Annotation"
contract="AnnotationWCF.Annotation" />
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="SecureTransport"
contract="AnnotationWCF.Annotation" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_Annotation" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
<binding name="SecureTransport" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
これとまったく同じ問題がありました。 私の解決策を除いて、バインディング値に「s」を追加することでした。
古い:。 binding = "mexHttpBinding"。
新規:。 binding = "mexHttpsBinding"。
web.config snippet:。
<services>
<service behaviorConfiguration="ServiceBehavior" name="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
<endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding"
contract="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
私の問題は、ロードバランサーを使ってSSLを処理し、それを実際のサーバーにhttpで送信し、そのサーバーからクレームが来ていたことだと判明したのです。
編集部:マイクロソフトのサポートに相談して、少し違う問題を解決しました。
私のシルバーライトアプリは、コード内のエンドポイントアドレスをロードバランサーにhttpsで送信していました。 ロードバランサーは、エンドポイントアドレスをhttpに変更し、実際のサーバーを指すようにしました。そこで、各サーバーのウェブ設定に、エンドポイントの listenUri を https ではなく http に追加しました。
<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />
サーバーのSSLが有効になっていることを確認してください
証明書のないローカルマシンで HTTPS 設定ファイルを使用しようとすると、このエラーが発生しました。私は、バインディングのいくつかをHTTPSからHTTPに変換することで、ローカルテストを行おうとしていました。ローカルテストのために自己署名証明書をインストールするよりも、この方が簡単だと思ったのです。
実際に使うつもりはなかったのに、ローカルのIISでSSLが有効になっていないためにこのエラーが出ていることがわかりました。
HTTPSの設定に何かあったのでしょう。IIS7で自己署名証明書を作成すると、HTTPが動作するようになりました :-)
以下のコンフィグと同様の方法でサービスを構成しようとしているのだと思います。こちらに詳しい情報があります。[異なるバインディング値を使用して2つのエンドポイントを持つサービスを指定する][1]。また、開発以外では、同じサービスに HTTP 'HTTPS の両方のエンドポイントを持つことは、おそらく良いアイデアではありません。HTTPSの意味がなくなってしまいます。これが役に立つといいのですが。
<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="shortTimeout"
</endpoint>
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure"
</endpoint>
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure">
<Security mode="Transport" />
</basicHttpBinding>
</bindings>
[1]: http://msdn.microsoft.com/en-us/library/ms733099.aspx "2つのエンドポイントを持つサービスを指定する..."までスクロールダウンしてください。
私の場合、バインディングでは「Transport」ではなく「TransportCredentialOnly」にセキュリティモードを設定しています。 それを変更すると問題が解決しました。
<bindings>
<webHttpBinding>
<binding name="webHttpSecure">
<security mode="Transport">
<transport clientCredentialType="Windows" ></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
基本アドレスとエンドポイントアドレスを確認します(サンプルコードでは表示できません)。 おそらく、列やその他のタイプミスを逃した可能性があります。 https://の代わりにhttps //。