[C#] 제공된 URI 체계 ‘https’가 유효하지 않습니다. ‘http’가 필요합니다. 매개 변수 이름 : via

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> 


답변

주석에서 멋진 형식을 지정할 수 없기 때문에 이것을 답변으로 추가하십시오.
웹 서비스 클라이언트를 완전히 작성하고 코드로 바인딩하는 것을 제외하고는 동일한 문제가있었습니다.
이유는 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


답변

에서 변경

<security mode="None">

<security mode="Transport">

web.config 파일에. 이 변경으로 http 대신 https를 사용할 수 있습니다.


답변

Cassini (vs dev 서버) 또는 인증서가 설치된 IIS에서 이것을 실행하고 있습니까? 과거에는 dev 웹 서버에서 보안 엔드 포인트를 연결하려고 시도하는 데 문제가있었습니다.

과거에 나를 위해 일한 바인딩 구성은 다음과 같습니다. 대신을 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" />

또한 전송 보안을 사용하도록 클라이언트 구성을 변경하십시오.


답변

custom binding시나리오 에서 동일한 예외가있었습니다 . 이 방법을 사용하는 사람은 누구나 이것을 확인할 수 있습니다.

실제로 local WSDL 파일 에서 서비스 참조를 추가하고있었습니다 . 성공적으로 추가되었으며 필요한 사용자 정의 바인딩이 구성 파일에 추가되었습니다. 그러나 실제 서비스는 https였습니다. http가 아닙니다. 그래서 httpTransport elemet을로 변경했습니다 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

답변

OP와 정확히 동일한 문제가있었습니다. 내 구성과 상황이 동일했습니다. 마지막으로 Visual Studio의 테스트 프로젝트에서 서비스 참조를 만들고 서비스가 작동하고 있음을 확인한 후 WCFStorm에서 문제로 축소했습니다. Storm에서는 “클라이언트 구성”이 아닌 “구성”설정 옵션을 클릭해야합니다. 클릭 한 후 나타나는 대화 상자에서 “보안”탭을 클릭하십시오. “인증 유형”이 “없음”으로 설정되어 있는지 확인하십시오 (기본값은 “Windows 인증”). 프레스토, 작동합니다! 필자는 항상 WCFStorm에서 메소드를 빌드 할 때 항상 메소드를 테스트하지만 SSL을 사용하여 이미 설정된 메소드에 연결하려고 시도한 적이 없습니다. 이것이 누군가를 돕기를 바랍니다!


답변

같은 문제에 부딪 쳤습니다.

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

나는 기본적으로 모든 Http 발생을 Https로 대체했습니다. 원하는 경우 두 가지를 모두 추가 할 수 있습니다.