2012-03-28 2 views
4

실패라는 이름으로 우리는 우리가 해결할 수없는 WCF 바인딩 및 스트리밍 전송 모드와 흥미로운 문제가 있습니다WCF 바인딩 구성은 기본적으로에만 적용하지만

우리는 스트리밍 전송 모드로 구성된 WCF 끝점을 가지고 있습니다. 엔드 포인트는 기본 크기 (~ 65KB)보다 훨씬 큰 메시지를받습니다. 따라서 우리는 바인딩 태그의 maxReceivedMessageSize 속성에 더 큰 메시지 크기를 지정했습니다. "원격 : 우리가, 우리는 다음과 같은 오류가 발생 엔드 포인트를 짝과 태그를 결합 엔드 포인트 태그의 bindingConfiguration 속성과 이름 속성으로 바인딩 할 때

문제는 서버가 오류를 반환했습니다 : (400) 잘못된 요청 ".

는 즉시 우리가 제거 할 때 모두가 오류없이 작동 bindingConfiguration이름 속성.

<binding 
     name="BindingConfiguration" <---- and when this goes away 
    transferMode="Streamed" maxReceivedMessageSize="2147483647" > 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
        maxNameTableCharCount="2147483647" /> 
    </binding> 

그래서 그것은 단지 기본 (명시 적으로 명명 된 키없이) 바인딩으로 작동합니다

여기
<service name="Services.DocumentService" behaviorConfiguration="ServiceBehavior"> 
    <endpoint contract="ServiceContracts.IDocumentService" address="DocumentService" 
       binding="basicHttpBinding" name="basicHttpBinding" 
     bindingConfiguration="BindingConfiguration"  <---- when this goes away 
       behaviorConfiguration="ServiceEndpointBehavior"/> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8080/Documents/"/> 
     </baseAddresses> 
    </host> 
    </service> 

바인딩 구성입니다 : 여기

은 서비스의 정의 엔드 포인트입니다 . 이상하게도 우리는 서비스 호스트에서 바인딩 구성이 실제로 적용되었는지 (maxReceivedMessageSize가 올바르게 설정되었는지) 두 시나리오에서 확인할 수있었습니다. WCF의 버그 일 수 있습니까?

서비스가 자체 호스팅됩니다.

어떤 아이디어라도 감사하게 생각하니?

+0

당신은 "테스트"또는 뭔가 – Rajesh

+0

우리는 심지어 'XX', 'XXX', 'Z'로, 다른 이름을 시도라고 BindingConfiguration 이외의 다른 이름으로 시도 해 봤나 :-) – Honzajscz

+0

@Honzajscz 문제에 대한 해결책을 찾았습니까? 나는 정확히 같은 문제가 있으며 이름이 지정된 바인딩 구성에서 작동하지 않는 이유를 알 수 없습니다 ...다른 구성으로 호스트 할 다른 서비스가 있으면 더 이상 작동하지 않으므로 빈 문자열을 사용할 수 없습니다. 편집 : btw, 나는 streamed transferMode를 사용하고 있지 않다. – ken2k

답변

0

우리는 최근에 초기화 코드가 명시 적으로 기본 설정을 사용하여 web.config의 설정을 무시한다는 사실을 알아 냈습니다.

코드의 해당 부분을 제거했으며 web.config의 설정이 적용되었습니다.

바보 같은 오류입니다. , 자신의 답변

감사합니다 모두

+0

어떤 부분을 제거 했습니까? 또한 "basicHttpBinding"을 제거했지만 여전히 작동하지 않습니다 ... – John

+0

@John 우리는 C# 코드를 사용하여 서비스를 초기화했습니다. 초기화 C# 코드는 web.config의 설정을 무시하고 무시 설정을 무시했습니다. – Honzajscz

0

bindingConfiguration = "BindingConfiguration"을 제거하면 바인딩 구성의 값이 아닌 기본값이 사용됩니다. 클라이언트가 버퍼링 기대한다, 그래서 만약

transferMode="Streamed" 

기본적으로 전송 모드, 버퍼링 및 서버는 스트리밍이, 당신이 잘못된 요청 오류가 사용

의 차이입니다.

+0

'bindingConfiguration = "BindingConfiguration"'을 제거하면 실제로 작동하기 시작하고 우리는 원래의 65k보다 훨씬 큰 파일을 업로드 할 수 있습니다. 클라이언트는 스트리밍으로 설정됩니다. bindingConfiguration을 생략하면 이름없이 바인딩을 실제로 사용하는 것처럼 보입니다. – Honzajscz