Httpsを介して使用されるようにbasicHttpBindingを介してWCFサービスを作成しようとしています。これが私のweb.configです。
<!-- language: xml -->
<service behaviorConfiguration="MyServices.PingResultServiceBehavior"
name="MyServices.PingResultService">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="defaultBasicHttpBinding"
contract="MyServices.IPingResultService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
...
<bindings>
<basicHttpBinding>
<binding name="defaultBasicHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
...
<behaviors>
<serviceBehaviors>
<behavior name="MyServices.UpdateServiceBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
私はすべてのメタデータを正しく取得することができるWCFStormを使って接続していますが、実際のメソッドを呼び出すと次のようになります。
提供されているURIスキーム 'https'は無効です。 「http」が必要です。パラメータ名:via
次のようにapp.configにメッセージ認証情報を追加してみてください。
<bindings>
<basicHttpBinding>
<binding name="defaultBasicHttpBinding">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
これを答えとして付け加えましょう。あなたがコメントの中であまり凝ったフォーマットをすることができないからです。
私は自分のWebサービスクライアントを完全にコードで作成しバインドしていたことを除いて同じ問題を抱えていました。
理由はDLLがシステムにアップロードされていたため、設定ファイルの使用が禁止されていたためです。
これは、SSLを介して通信するために更新する必要があるコードです。
Public Function GetWebserviceClient() As WebWorker.workerSoapClient
Dim binding = New BasicHttpBinding()
binding.Name = "WebWorkerSoap"
binding.CloseTimeout = TimeSpan.FromMinutes(1)
binding.OpenTimeout = TimeSpan.FromMinutes(1)
binding.ReceiveTimeout = TimeSpan.FromMinutes(10)
binding.SendTimeout = TimeSpan.FromMinutes(1)
'// HERE'S THE IMPORTANT BIT FOR SSL
binding.Security.Mode = BasicHttpSecurityMode.Transport
Dim endpoint = New EndpointAddress("https://myurl/worker.asmx")
Return New WebWorker.workerSoapClient(binding, endpoint)
End Function
これをCassini(vs devサーバー)で実行していますか、それとも証明書がインストールされたIISで実行していますか私は過去にdev Webサーバ上に安全なエンドポイントを接続しようとしている問題を抱えています。
これは私にとって過去に機能したバインディング構成です。 basicHttpBinding
の代わりにwsHttpBinding
を使用します。それがあなたにとって問題であるかどうか私は知りません。
<!-- Binding settings for HTTPS endpoint -->
<binding name="WsSecured">
<security mode="Transport">
<transport clientCredentialType="None" />
<message clientCredentialType="None"
negotiateServiceCredential="false"
establishSecurityContext="false" />
</security>
</binding>
そしてエンドポイント
<endpoint address="..." binding="wsHttpBinding"
bindingConfiguration="WsSecured" contract="IYourContract" />
また、トランスポートセキュリティを有効にするようにクライアント構成を必ず変更してください。
から変更する
<security mode="None">
に
<security mode="Transport">
あなたのweb.configファイルで。この変更により、httpの代わりにhttpsを使用できるようになります。
私はOPと全く同じ問題を抱えていました。私の構成と状況は同じでした。私はついに、Visual Studioのテストプロジェクトでサービス参照を作成し、そのサービスが機能していることを確認した後、WCFStormの問題に絞り込んだ。 Stormでは、 "Config"設定オプションをクリックする必要があります( "Client Config"ではありません)。それをクリックした後、ポップアップするダイアログの「セキュリティ」タブをクリックしてください。 [認証の種類]が[なし]に設定されていることを確認します(デフォルトは[Windows認証]です)。プレスト、それは動作します!私はWCFStormで自分のメソッドを構築するときに常にテストしますが、すでにSSLでセットアップされているものに接続するためにそれを使用しようとしたことはありません。これが誰かに役立つことを願っています!
custom binding
シナリオでも同じ例外がありました。このアプローチを使っている人は誰でもこれをチェックすることができます。
私は実際にはlocal WSDL
ファイルからサービス参照を追加していました。正常に追加され、必要なカスタムバインディングが設定ファイルに追加されました。しかし、実際のサービスはhttpsです。 httpではありません。そこで私はhttpTransport要素をhttpsTransport
に変更しました。これで問題は解決しました
<system.serviceModel>
<bindings>
<customBinding>
<binding name="MyBindingConfig">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap11" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<!--Manually changed httpTransport to httpsTransport-->
<httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
bypassProxyOnLocal="false"
decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true" maxBufferSize="65536"
proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://mainservices-certint.mycompany.com/Services/HRTest"
binding="customBinding" bindingConfiguration="MyBindingConfig"
contract="HRTest.TestWebserviceManagerImpl" name="TestWebserviceManagerImpl" />
</client>
</system.serviceModel>
参考文献
同じ問題に遭遇した、これは私の解決策が最後に判明した方法です:
<basicHttpsBinding>
<binding name="VerificationServicesPasswordBinding">
<security mode="Transport">
</security>
</binding>
<binding name="VerificationServicesPasswordBinding1" />
</basicHttpsBinding>
私は基本的にすべてのHttpをHttpsに置き換えました。お望みなら、両方を追加してみることができます。
これをweb.configではなくプログラムで行う場合
new WebHttpBinding(WebHttpSecurityMode.Transport)
設定ファイルを二次ファイルに分割して異なるサーバー(dev/demo/productionなど)で設定変更を容易にすることができます。コードやアプリなどを再コンパイルする必要はありません。実際に「実際の」ファイルに触れずにエンドポイントを変更します。
最初のステップはWPF App.Configからバインディングセクションをそれ自身の別々のファイルに移動することです。
ビヘイビアセクションは、httpとhttpsの両方を許可するように設定されています(両方が許可されている場合、アプリには影響がないようです)。
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
そして、バインディングセクションをそれ自身のファイルに移動します。
<bindings configSource="Bindings.config" />
Bindings.configファイルでは、プロトコルに基づいてセキュリティを切り替えます
<!-- None = http:// -->
<!-- Transport = https:// -->
<security mode="None" >
現在、オンサイトエンジニアは、各エンドポイントの実際のURLを格納しているBindings.ConfigファイルとClient.Configファイルを変更するだけで済みます。
このようにして、コードを変更することなく、エンドポイントをhttpからhttpsに変更して再びアプリをテストすることができます。
お役に立てれば。
OPの質問に再度キャップを付けるには:
すべてのメタデータを正しく取得できるWCFStormを使用して[WCFサービスに]接続していますが、実際のメソッドを呼び出すと次のようになります。
提供されているURIスキーム 'https'は無効です。 「http」が必要です。パラメータ名:via
WCFStormチュートリアルでは、この問題を IISとSSLを使った作業 で扱います。
彼らの解決策は私のために働きました:
エラーを修正するには、wcfサービス設定と一致するクライアント設定を生成します。これを行う最も簡単な方法は、Visual Studioを使用することです。
Visual Studioを開き、サービスへのサービス参照を追加します。 VSはサービスに一致するapp.configファイルを生成します
App.configファイルを編集して、WCFStormから読み取れるようにします。 クライアントのApp.configファイルを読み込む をご覧ください。 endpoint/@ nameおよびendpoint/@ contract属性がwcfstormの値と一致するようにしてください。
[Client Config toobarボタンを使用して]変更したapp.configをWCFStormにロードします。
メソッドを呼び出します。今回はメソッド呼び出しは失敗しなくなりました
アイテム(1)の最後の箇条書きは、事実上、 ネームスペースの接頭辞を削除することを意味します VSはエンドポイントコントラクト属性の先頭に追加します。
<endpoint ... contract="ServiceReference1.ListsService" ... />
そうあなたはWCFStormにロードするapp.configであなたはListsServiceのために欲しい:
<endpoint ... contract="ListsService" ... />
私が動くようにするには、以下のバインディングが必要でした。
<binding name="SI_PurchaseRequisition_ISBindingSSL">
<security mode="Transport">
<transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
</security>
</binding>
silverlightはサポートしていないので、wsHttpBindingは問題です。