指定されたURIスキーム「https」は無効です。「http」が必要です。パラメータ名:via


281

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


4
ドイツ語では、エラーメッセージには「Das bereitgestellte URI-Schema "https" istungültig; erwartet wurde "http"。Parametername:via "」と表示されます。
Uwe Keim

回答:


240

次のように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> 

35
OPに対するこの回答をありがとうございます。私は同じ問題を抱えていて、<security>タグのモードをデフォルトの「なし」から「トランスポート」に変更すると修正されました。
オーティス

1
何らかの理由でIIS6によって拒否された<message>ブロックを除いて、これはうまくいきました。
Chris Chubb 2013

4
同じ構成をプロジェクトにコピーしましたが、効果はありません。追加するものを逃しましたか?

1
どうもありがとうございます。オンラインで見つかったいくつかの解決策を試しましたが、どれもうまくいきませんでした。これは完璧でした。
aspnetdeveloper 2017年

59

これを回答として追加します。コメントで高度な書式設定を行うことができないからです。
同じ問題がありましたが、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

どのようにしてWebサービスのクラスを作成しましたか?
カイヤック2017

できます!C#でも同じ問題が発生しました。貼り付けて問題を解決するだけです。
user3417479 2018

@kaiyaq-すべての標準的なものを使用して、開発のためにサービスに接続できます。VSにクラスを作成させ、それをDLLにコンパイルします。実行時に、すべての接続情報を含む構成ファイルをアップロードできません。
eidylon、

BasicHttpBindingはSystem.ServiceModelを使用して存在します。FYI将来の読者。
DLeh

38

から変更する

<security mode="None">

<security mode="Transport">

あなたのweb.configファイルで。この変更により、httpの代わりにhttpsを使用できるようになります


30

これをCassini(vs devサーバー)またはIISで証明書をインストールして実行していますか?過去に、開発用ウェブサーバーの安全なエンドポイントを接続しようとする際に問題がありました。

これは過去に私のために働いたバインディング構成です。の代わりに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" />

また、トランスポートセキュリティを有効にするようにクライアント構成を必ず変更してください。


1
自己署名証明書がインストールされたローカルIIS 7
isg

13
「また、トランスポートセキュリティを有効にするために、クライアント構成を必ず変更してください。」 - いいアドバイス。見過ごされがちで、WCFはエラーの手がかりを与えません。
ルークプレット

無効なnegotiateServiceCredentialおよびestablishedSecurityContext
Kiquenet

20

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>

参考文献

  1. httpとhttpsの両方にカスタムバインディングがあるWCF

19

OPとまったく同じ問題が発生しました。私の構成と状況は同じでした。Visual Studioのテストプロジェクトでサービス参照を作成し、サービスが機能していることを確認した後、最終的にWCFStormの問題に絞り込みました。Stormでは、「Config」設定オプションをクリックする必要があります(「Client Config」ではありません)。それをクリックした後、ポップアップダイアログの[セキュリティ]タブをクリックします。「認証タイプ」が「なし」に設定されていることを確認します(デフォルトは「Windows認証」です)。プレスト、動作します!私は自分のメソッドを構築するときに、常にWCFStormでテストしますが、SSLで既にセットアップされているメソッドに接続するためにそれを使用しようとしたことはありません。これが誰かを助けることを願っています!


これとまったく同じ問題がありましたが、「ユーザー名/パスワード認証」を使用して間違ったパスワードを使用していました。パスワードを変更する場合、サービスのURLをクリックし、ツールバーの[更新]ボタンをクリックして、サービスを有効にする必要があることがわかりました。
Ryan Shillington

12

同じ問題に遭遇しました、これが最後に私の解決策が判明した方法です:

        <basicHttpsBinding>
            <binding name="VerificationServicesPasswordBinding">
              <security mode="Transport">
              </security>
            </binding>
            <binding name="VerificationServicesPasswordBinding1" />
        </basicHttpsBinding>

基本的に、すべてのHttpをHttpsに置き換えました。必要に応じて、両方を追加してみてください。


5
basicHttpsBindingは4.5以降であることに注意してください。
Jagd

7

これをプログラムで行い、web.configで行わない場合:

new WebHttpBinding(WebHttpSecurityMode.Transport)

すごい。私は常に.exe.configファイルが嫌いで、代わりにコードですべてを行います。これは私の問題を解決しました。
nivs1978

4

設定ファイルをセカンダリファイルに分割して、コードやアプリなどを再コンパイルすることなく、さまざまなサーバー(dev / demo / productionなど)で設定を簡単に変更できることを覚えておくと便利です。たとえば、オンサイトエンジニアが実際に「実際の」ファイルに触れることなく、エンドポイントを変更します。

最初のステップは、バインディングセクションをWPF App.Configから独自のファイルに移動することです。

Behaviorsセクションは、httpとhttpsの両方を許可するように設定されています(両方が許可されている場合、アプリに影響はないようです)。

<serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />

そして、バインディングセクションを独自のファイルに移動します。

 <bindings configSource="Bindings.config" /> 

bindings.configファイルで、プロトコルに基づいてセキュリティを切り替えます

  <!-- None = http:// -->
  <!-- Transport = https:// -->
  <security mode="None" >

これで、現場のエンジニアは、Bindings.Configファイルと、各エンドポイントの実際のURLを格納するClient.Configを変更するだけで済みます。

このようにして、コードを変更せずにエンドポイントをhttpからhttpsに変更し、再び戻ってアプリをテストできます。

お役に立てれば。


2

OPで質問を要約するには:

すべてのメタデータを適切に取得できるWCFStormを使用して[WCFサービスに]接続していますが、実際のメソッドを呼び出すと次のようになります。

指定されたURIスキーム「https」は無効です。「http」が必要です。パラメータ名:via

WCFStormチュートリアルでは、IISとSSLの操作でこの問題に対処しています

彼らの解決策は私にとってうまくいきました:

  1. エラーを修正するには、wcfサービス構成と一致するクライアント構成を生成します。これを行う最も簡単な方法は、Visual Studioを使用することです。

    • Visual Studioを開き、サービス参照をサービスに追加します。VSはサービスと一致するapp.configファイルを生成します

    • app.configファイルを編集して、WCFStormで読み取れるようにします。クライアントApp.configファイルのロードを参照してください。endpoint / @ nameおよびendpoint / @ contract属性がwcfstormの値と一致することを確認してください。

  2. 変更したapp.configをWCFStormにロードします([Client Config toobar]ボタンを使用)。

  3. メソッドを呼び出します。今回はメソッドの呼び出しが失敗しなくなりました

アイテム(1)の最後の箇条書きは、VSがエンドポイントコントラクト属性に付加する名前空間プレフィックス削除することを意味し、デフォルトでは "ServiceReference1"です。

<endpoint ... contract="ServiceReference1.ListsService" ... />

したがって、ListsServiceに必要なWCFStormにロードするapp.configで次のようにします。

<endpoint ... contract="ListsService" ... />

2

私が動作するようにするには、次のバインディングが必要でした。

        <binding name="SI_PurchaseRequisition_ISBindingSSL">
          <security mode="Transport">
            <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
          </security>
        </binding>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.