2011-02-17 3 views
1

나는 벽을 치고 꽤 오랫동안 머리카락을 뽑아왔다. 기본적으로 ASP.NET 멤버쉽 및 권한 부여 공급자가있는 WCF 서비스를 만들어야하지만, 바이트 [] 배열이나 Stream 개체를 전송하여 Azure에 저장해야합니다. 서비스 자체는 Azure에서 호스팅됩니다.회원/권한이있는 Azure에서 WCF 서비스로 스트림 전송을 사용하려면 어떻게해야하나요?

문제는 WCF가 클라이언트 자격 증명을 교환하기 위해 메시지 계층 보안을 원한다는 것입니다. 그래서 나는 꽤 잘 작동 다음 설정했다 :

<system.serviceModel> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="DefaultServiceBehavior"> 
     <serviceMetadata httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" /> 
      <serviceCredentials> 
      <serviceCertificate x509FindType="FindBySubjectName" storeName="My" storeLocation="LocalMachine" findValue="SecureChannelCertificate" /> 
      <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> 
     </serviceCredentials> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <bindings> 
    <wsHttpBinding> 
     <binding name="SecureBinding" messageEncoding="Mtom"> 
     <security mode="Message"> 
      <message clientCredentialType="UserName" negotiateServiceCredential="true" establishSecurityContext="true" /> 
     </security> 
     </binding> 
    </wsHttpBinding> 
    </bindings> 
</system.serviceModel> 

그래서 다음 요구 사항이 변경을하고 지금은 WCF 서비스를 통해 푸른 할 파일을 밀어 요구하고있다. 내가 무엇을해도 WCF는 모든 종류의 오류로 저를 비명 지릅니다.

누구나 인증/권한 부여 및 스트리밍을 사용할 수 있도록 서비스를 구성하는 방법을 알고 있습니까?

감사합니다.

+0

오류를 게시 할 수 있습니까? –

답변

6

제공된 정보로는 문제를 판단하기에 충분하지 않지만 메시지, 내용 및 배열 길이와 같은 WCF 기본 메시지 크기 제한 때문에 오류가 발생하는 이유가 있다고 생각합니다.

WCF를 통해 큰 데이터를 전송할 때 이러한 설정의 기본값은 너무 낮습니다 (maxReceivedMessageSize의 경우 64K, maxStringContentLength의 경우 16K). 큰 데이터가 포함 된 메시지 나 바이트 배열을 처리 할 수 ​​있도록 늘려야합니다. readerQuotaswsHttpBinding/binding 요소를 사용하여 이러한 기본값을 변경할 수 있습니다.

메시지, 문자열 및 바이트 배열 전송을 최대 4MB까지 허용하는 구성 파일을 기반으로 한 샘플 설정입니다.

<system.serviceModel> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="DefaultServiceBehavior"> 
     <serviceMetadata httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" /> 
      <serviceCredentials> 
      <serviceCertificate x509FindType="FindBySubjectName" storeName="My" storeLocation="LocalMachine" findValue="SecureChannelCertificate" /> 
      <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> 
     </serviceCredentials> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <bindings> 
    <wsHttpBinding> 
     <binding name="SecureBinding" messageEncoding="Mtom" maxReceivedMessageSize="4194304"> 
<readerQuotas maxStringContentLength="4194304" maxArrayLength="4194304"/> 
     <security mode="Message"> 
      <message clientCredentialType="UserName" negotiateServiceCredential="true" establishSecurityContext="true" /> 
     </security> 
     </binding> 
    </wsHttpBinding> 
    </bindings> 
</system.serviceModel> 
+0

이봐, 고마워하는 사람 - 이거 정말 잘됐다! 예 :) :) :) :) – bleepzter