2011-09-24 8 views
3

WCF 서비스 프로젝트 및 단위 테스트 프로젝트가 포함 된 VS 2010 솔루션이 있습니다. 단위 테스트 프로젝트에는 WCF 서비스에 대한 서비스 참조가 있습니다.WCF 서비스 참조 지원 파일 업데이트되지 않음

WCF 서비스 프로젝트

의 Web.config 다른보다 기본 값으로 바인딩 속성의 수를 설정 :

의 Web.config : (특히 해당 MaxBufferSize주의 = "20000000")

<basicHttpBinding> 
    <binding name="basicHttpBindingConfig" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000"> 
     <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Ntlm"/> 
     </security> 
    </binding> 
</basicHttpBinding> 

this issue을 조사하는 동안, 나는 단위 테스트 프로젝트의 서비스 참조 지원 파일 내가 기대 값 (WCF 서비스의 web.config에서 구성 즉, 값)을 포함하지 않는 것을 깨닫게되었다 :

configuration.svcinfo : (특히 유의 가 MaxBufferSize = " 65536 ")

<binding hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" messageEncoding="Text" name="BasicHttpBinding_IBishopService" textEncoding="utf-8" transferMode="Buffered"> 
    <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192" /> 
    <security mode="None"> 
     <message algorithmSuite="Default" clientCredentialType="UserName" /> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
    </security> 
    </binding> 

삭제 및 재생성 서비스 참조 또는 파일을 재 - 생성하는 서비스 레퍼런스를 업데이트하지만 나는 여전히 같은 가치관으로 끝난다.

왜?

업데이트

여기에 올바른 동작입니다 클라이언트

<binding name="BasicHttpBinding_IMyService" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="200000000" maxBufferPoolSize="200000000" maxReceivedMessageSize="200000000" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="200000000" maxArrayLength="200000000" 
         maxBytesPerRead="200000000" maxNameTableCharCount="200000000" /> 
        <security mode="None"> 
         <transport clientCredentialType="None" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="UserName" algorithmSuite="Default" /> 
        </security> 
       </binding> 

답변

0

같은 문제가 있습니다. 반나절 후 해결 방법이 없습니다. 자동으로 생성 된 파일을 변경하는 것은 일반적으로 싫은 일입니다. 그래서 내 감정에 "더 좋은 방법이 있어야합니다."라고 말합니다.

업데이트 : 바인딩 구성에서 name 특성을 제거하여 문제가 해결되었습니다. 그래서 현재 웹.설정이

<basicHttpBinding> 
    <binding maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000"> 
    <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/> 
    <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Ntlm"/> 
    </security> 
    </binding> 
</basicHttpBinding> 

될 것이

<basicHttpBinding> 
    <binding name="basicHttpBindingConfig" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000"> 
    <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/> 
    <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Ntlm"/> 
    </security> 
    </binding> 
</basicHttpBinding> 

처럼 찾고 난 당신 만 클라이언트 측에서이에 필요가 있다고 생각합니다. name 속성을 제거하면 앱의 기본 basicHttpBinding 구성을 본질적으로 바꿀 수 있습니다. 이 솔루션에 대한 크레딧 here.

다른 업데이트 : 네임 스페이스를 포함하여 서비스 구성의 이름을 올바르게 지정하면 바인딩 구성이 선택됩니다. 그래서 그 대신

<service name="ServiceName"> 

의 당신은

<service name="My.Namespace.ServiceName"> 
+0

클라이언트의 app.config에서' 노드에서'bindingConfiguration' 속성을 제거하면 서비스 참조를 업데이트 할 때 일반적인 오류 메시지가 나타납니다. 내가 놓친 게 있니? –

+0

명명 된 바인딩을 찾을 수 없다는 오류가 발생하면 해당 바인딩을 선택하고 효과적으로 해당 구성을 사용하고 있음을 의미합니다. 클라이언트와 서버 바인딩 구성이 동일합니까? 두 가지 모두에 대한 서비스 구성으로 소식을 업데이트 할 수 있습니까? –

0

의 app.config입니다. 바인딩에 포함 된 일부 정보는 구성의 한쪽에만 한정되며 클라이언트와 서버 모두 완전히 다른 값을 사용할 수 있습니다. 또한이 값은 서비스 거부 공격에 대한 방어이기 때문에 서비스는 공개적으로 표시하지 않습니다.

이러한 값은 들어오는 메시지 처리에만 영향을 미치므로 서비스는 들어오는 요청을 처리하는 방법을 구성하고 클라이언트는 들어오는 응답을 처리하는 방법을 구성합니다. 요청과 응답은 서로 다른 특성과 구성을 가질 수 있습니다. 항상 KB 요청을 거의받지 않고 1MB 응답 만 반환하는 경우 1MB 요청을 허용하도록 서비스를 구성 할 필요가 없습니다.

btw. 이것은 일반적인 웹 서비스와 관련이없는 WCF 특정 기능이며이를 위해 WSDL에서이를 설명하는 표준화 된 방법이 없기 때문입니다.

+0

이 올바른 행동 인 경우, 그 값을 변경하는 올바른 방법은 무엇인가해야합니까? 내 기본 응용 프로그램에서는 적용되는 기본 (?) 값이 작동하지 않습니다. –

+0

필요한 경우 클라이언트의 값을 수정합니다. –

+0

이미 클라이언트의 app.config에서 설정을 수정했지만 생성 된 파일에도 반영되지 않으며 너무 작아서 설정과 관련된 오류가 발생합니다. App.config가 질문에 추가되었습니다. –

관련 문제