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>
참고 문헌
답변
OP와 정확히 동일한 문제가있었습니다. 내 구성과 상황이 동일했습니다. 마지막으로 Visual Studio의 테스트 프로젝트에서 서비스 참조를 만들고 서비스가 작동하고 있음을 확인한 후 WCFStorm에서 문제로 축소했습니다. Storm에서는 “클라이언트 구성”이 아닌 “구성”설정 옵션을 클릭해야합니다. 클릭 한 후 나타나는 대화 상자에서 “보안”탭을 클릭하십시오. “인증 유형”이 “없음”으로 설정되어 있는지 확인하십시오 (기본값은 “Windows 인증”). 프레스토, 작동합니다! 필자는 항상 WCFStorm에서 메소드를 빌드 할 때 항상 메소드를 테스트하지만 SSL을 사용하여 이미 설정된 메소드에 연결하려고 시도한 적이 없습니다. 이것이 누군가를 돕기를 바랍니다!
답변
같은 문제에 부딪 쳤습니다.
<basicHttpsBinding>
<binding name="VerificationServicesPasswordBinding">
<security mode="Transport">
</security>
</binding>
<binding name="VerificationServicesPasswordBinding1" />
</basicHttpsBinding>
나는 기본적으로 모든 Http 발생을 Https로 대체했습니다. 원하는 경우 두 가지를 모두 추가 할 수 있습니다.