외부 용 웹 팜에서 내부 용 WCF 서비스를 설정하려고합니다. (내부적으로 웹 팜이 없으며이 서비스가 장애 조치 및로드 균형 조정을 필요로합니다).방법? WCF customBinding over Https
요구 사항 :
- PerSession 이와 상태, 우리는 각각의 세션에 변수 데이터를 보존 할 수있는 서비스를 필요로하는.
- HTTPS. 인터넷 검색을 많이 읽은 후에 customBinding을 작성해야했지만, 올바른지 확실하지 않았습니다.
- 매개 변수 중 하나가 최대 5MB가 될 수있는 byte [] 배열이기 때문에 메시지 크기가 커집니다.
- 클라이언트 측 app.config를 수동으로 편집 할 필요가 없습니다. 즉, 서비스 참조를 추가하기 만하면 개발자가 필요하며 app.config를 간신히 변경하지 않고 객체 사용을 시작합니다.
참고 : 이전에이 서비스가 (wsHttpBinding을 사용하여) HTTP에서 올바르게 작동하도록했습니다. 나는 또한 HTTPS 하에서 작동 시켰지만 PerSession 상태를 지원하지 않았고 각 함수 호출에서 내부 변수 값을 잃어 버렸다.
나는 현재 테스트 장치에서이 오류를 받고 있어요 :
ServiceModel은 서비스 클라이언트 구성 섹션에서 계약 'AppMonitor.IAppMonitorWcfService'를 참조하는 기본 끝점 요소를 찾을 수 없습니다. 이는 응용 프로그램에 대한 구성 파일이 없거나이 계약에 일치하는 엔드 포인트 요소가 클라이언트 요소에 없기 때. 일 수 있습니다.
참고 :이 오류는 서비스 참조에서 직접 참조되는 WCF 서비스가있는 테스트 장치 EXE에서 발생합니다. 이것은 exe가 다른 객체를 참조하는 문제가 아니며, 그 객체는 내가 읽은 WCF 서비스를 참조합니다.
URL을 탐색 할 때 WSDL이 올바르게 표시됩니다. 나는의 app.config이있는 wsHttpBinding을 보여주는 이유는 확실하지 않다
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="CustomBinding_IAppMonitorWcfService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="true" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client />
</system.serviceModel>
</configuration>
:
<system.serviceModel>
<services>
<service name="AppMonitor.AppMonitorWcfService" behaviorConfiguration="ServiceBehavior">
<endpoint address="" binding="customBinding" bindingConfiguration="EnablePerSessionUnderHttps" contract="AppMonitor.IAppMonitorWcfService"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<customBinding>
<binding name="EnablePerSessionUnderHttps" maxReceivedMessageSize="5242880">
<reliableSession ordered="true"/>
<textMessageEncoding>
<readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpsTransport authenticationScheme="Anonymous" requireClientCertificate="false"/>
</binding>
</customBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
EXE의의 App.config (서비스 참조를 추가 할 때 자동 생성)의 Web.config
? 이게 customBinding일까요? 이 서비스는 수십 명의 개발자가 사용하기 때문에 app.config를 편집하고 싶지 않으며 서비스 참조를 추가 할 수 있기를 원합니다.
VS2008, .NET 3.51 사용. 서버가 IIS7, Windows Server 2008, 필요한 경우 확인할 수 있다고 생각합니다.
web.config에 주소가 있으므로 클라이언트 측 app.config에서 주소가 누락되었다고 가정합니다. 왜 그것이 누락 되었습니까? 내가 한 것은 동일한 URL을 입력하고 (WSDL 페이지를 탐색하고 볼 수 있음), Add Service Reference 옵션으로 서비스를 찾았습니다. 그런 다음 NameSpace를 입력하고 Goed를 클릭하면 그랬습니다. 이것은 내가 과거에 WCF를 한 방법입니다. 모든 아이디어가 app.config에 주소를 넣지 않은 이유는 무엇입니까? – AaronC
그래, 명백한 문제는 클라이언트 쪽 app.config에 태그 아래에 정보가 없다는 것입니다. 알고 있어야하는 이유는 "서비스 참조 추가"를 수행 할 때 이것이 자동으로 채워지지 않은 이유입니다. b) 어떻게 자동으로 채워지나요? c) 또는 web.config 바인딩이나 뭔가를 변경하여 자동으로 채울 수 있습니다. 서비스를 사용하는 개발자는이 서비스를 사용하기 위해 app.config 파일을 편집 할 필요가 없습니다. 서비스 참조 추가에 URL을 입력 한 다음 서비스를 사용하기 만하면됩니다. 당신의 도움을 주셔서 감사합니다! –
AaronC
참고 :이 기사에서 customBinding을 만들어야한다는 것을 알았습니다. http://stackoverflow.com/questions/4396961/why-wcf-instancecontextmode-persession-is-not-working-over-https. 또한 클라이언트 app.config에 채워지는 종단점 세부 정보가있는 문제가 바인딩 문제 (해결책이 제공되지 않음) 때문이라는 것도 읽었습니다. 대신 (또는 다른?) wsHttpBinding을 사용할 수 있으며 여전히 https를 통해 PerSession 컨텍스트가 있습니까? – AaronC