2010-01-13 3 views
2

WCF 서비스 인 APi를 빌드했습니다.WCF 서비스 사용자 지정 값 대신 기본값으로 바인딩하기

다음 내가이 엔드 포인트 태그의 "name"속성을 설정하여 지정한 바인딩을 사용하는 구성을 말하는

<bindings> 
    <wsHttpBinding> 
    <binding name="FxBinding" 
     maxBufferPoolSize="2147483647" 
     maxReceivedMessageSize="2147483647" 
     closeTimeout="00:20:00" 
     openTimeout="00:20:00" 
     receiveTimeout="00:20:00" 
     sendTimeout="00:20:00" 
     messageEncoding="Mtom"> 
       <readerQuotas 
     maxDepth="64" 
     maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" 
     maxBytesPerRead="4096" 
     maxNameTableCharCount="16384" /> 
     <security mode="None"></security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

: 서비스에 대한 Web.config에서 나는이처럼 보이는 bindong 정의를 지정

<services> 
    <service name="Dba.Admanager.Api.ListingServiceContract" behaviorConfiguration="Dba.Admanager.Api.ListingServiceContractBehavior"> 
    <endpoint address="" binding="wsHttpBinding" name="FxBinding" contract="Dba.Admanager.ApplicationController.Api.IListingServiceContract"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 

참조. VS2008에서 서비스에 대한 웹 참조를 만들 때 app.config가 생성됩니다. 이 app.config에서 사용되는 바인딩은 위에서 지정한 것이어야합니다. 하지만 app.config 파일의 기본 바인딩은 "maxArrayLength"에 예를 들어 있습니다.

<bindings> 
     <wsHttpBinding> 
      <binding name="FxBinding" 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="false" /> 
       <security mode="Message"> 
        <transport clientCredentialType="Windows" proxyCredentialType="None" 
         realm=""> 
         <extendedProtectionPolicy policyEnforcement="Never" /> 
        </transport> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
         algorithmSuite="Default" establishSecurityContext="true" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://l-aar-00424012.corp.ebay.com/Admanager.Api/ListingServiceContract.svc" 
      binding="wsHttpBinding" bindingConfiguration="FxBinding" contract="WCFListingServiceContract.IListingServiceContract" 
      name="FxBinding"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 

나는 클라이언트가 FxBinding 구성을 사용하고있는 것을 볼 수있다. 그러나 지구상의 모든 값은 왜 기본값인지 모르겠다. anobody가 바인딩 값을 커스터마이징하고 "클라이언트"부분에 반영하는 방법에 대한 단서를 제공 할 수 있습니까?

app.config에서 manualle 값을 변경하면 원하는 효과를 얻을 수 있지만 웹 참조가 업데이트 될 때마다 VS는 기본값으로 새 바인딩을 추가합니다.

답변

4

maxArrayLength과 같은 정보는 WSDL의 일부가 아니므로 클라이언트는이를 추론 할 수 없으며 기본값을 사용합니다.

2

Darin은 이미 언급했듯이 바인딩 매개 변수는 서비스와 클라이언트 간의 상호 운용 가능한 메타 데이터의 일부가 아니기 때문에 새 클라이언트 프록시를 만들 때 클라이언트가 자동으로 선택할 수 없습니다. - bindings.config<bindings> 안에 모든 것을 넣어 IE와 다음 서버 측 웹에서 참조

  • 서버에있는 별도의 설정 파일 참조에 바인딩 구성을 정의 :

    은 당신이 할 수있는 것은 이것이다 의 .config 또는의 app.config :

    <system.serviceModel> 
        <bindings configSource="bindings.config" /> 
    </system.serviceModel> 
    
  • 그런 다음 bindings.config 당신의 클라이언트 측에 복사하여의 app.config에이 같은 일을.

참고 : 네, 비주얼 스튜디오 불평 것 "configSource"가 정의 모든되지 않습니다 -하지만이 설정 파일에 대한 VS 인텔리 단지 결함입니다. 나를 믿어 라 - 그것이 효과적이다 - 나는 그것을 생산 시스템에서 매일 사용한다! .NET의 모든 구성 섹션에는 "configSource"속성이 있습니다!

이 방법을 사용하면 시스템에 대한 바인딩 구성을 포함하는 파일 하나를 만들고 서버 측과 클라이언트 측에서 사용할 수 있습니다.

+0

Thancs marc_s. 이것은 좋은 가치 정보이며 config evne을 더 읽기 쉽게 만듭니다. Plus : 두 구성을 동기화 상태로 유지하는 데 어려움을 덜어줍니다. – esbenr