1

Sharepoint 2010에 대한 사용자 지정 WCF Rest 서비스를 구축 중입니다. 서비스의 주요 작업은 Sharepoint로 /에서 일부 파일을 다운로드하고 업로드하는 것입니다. 다운로드 예상대로 작동하지만, 64KB보다 내가 오류 다음 얻을 큰 파일을 업로드 할 때입니다 :Sharepoint 사용자 지정 WCF RestRevice가 maxReceivedMessageSize를 사용하지 않음

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element. 

스택 추적 :

System.ServiceModel.Channels.HttpInput.ThrowHttpProtocolException(String message, HttpStatusCode statusCode, String statusDescription) 
System.ServiceModel.Channels.HttpInput.ThrowMaxReceivedMessageSizeExceeded() 
System.ServiceModel.Channels.HttpInput.GetMessageBuffer() 
System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream) 
System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception& requestException) 
System.ServiceModel.Channels.HttpRequestContext.CreateMessage() 
System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context, ItemDequeuedCallback callback) 
System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result) 
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() 
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state) 
System.ServiceModel.PartialTrustHelpers.PartialTrustInvoke(ContextCallback callback, Object state) 
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequestWithFlow(Object state) 
System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke2() 
System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.WorkItem.Invoke() 
System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ProcessCallbacks() 
System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.CompletionCallback(Object state) 
System.ServiceModel.Channels.IOThreadScheduler.CriticalHelper.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
System.ServiceModel.Diagnostics.Utility.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 

은 다음 그래서 내 첫번째 추측은 사용자 정의 구성을 통해 최대 메시지 크기를 증가되면서 :

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Project.Poc.StorageServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="Project.Poc.IStorageService" behaviorConfiguration="Project.Poc.StorageServiceBehavior"> 
     <endpoint binding="webHttpBinding" bindingConfiguration="StreamedRequestWebBinding" contract="Project.Poc.IStorageService"/> 
     </service> 
    </services> 
    <bindings> 
     <webHttpBinding> 
     <binding name="StreamedRequestWebBinding" 
       sendTimeout="00:05:00" 
       openTimeout="00:05:00" 
       receiveTimeout="00:05:00" 
       maxReceivedMessageSize="2147483647" 
       maxBufferSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       transferMode="StreamedRequest"> 
      <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 
</configuration> 

이 문제를 적용한 후 내 WSP를 배포하고 IIS 재설정 오류가 발생했습니다. WCF 추적에서 위의 정보가있는 HTTP 400과 동일합니다. 그래서 어떻게 든 내 web.config 구성 WCF 서비스를 사용하지 않기 때문에 좋지 않아?

64KB보다 작은 파일 업로드는 예상대로 작동합니다. 내 Web.config의도이다 ISAPI 폴더도

namespace Project.Poc 
{ 
    [ServiceContract] 
    public interface IStorageService 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", UriTemplate = "/Download?path={path}")] 
     Stream DownloadFile(string path); 

     [OperationContract] 
     [WebInvoke(Method = "POST", UriTemplate = "/Upload?path={path}")] 
     void UploadFile(string path, Stream content); 
    } 
} 

그리고 StorageService.svc :

<%@ ServiceHost Language="C#" Debug="true" Service="Project.Poc.StorageService, Project.Poc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d2ed6a8d86479f52" CodeBehind="StorageService.svc.cs" Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 

내가 웹의 모든 다른 변화를 시도

또한이 내 IStorageService.cs 정의입니다 .config는 내가 찾은하지만 행운을 찾았습니다. 이 문제의 원인은 무엇일까요? 어떤 도움도 환영합니다.

또한 소스 코드의 다른 부분이 필요하면 알려주세요. 나는 내 질문을 업데이트 할 것이다.

미리 감사드립니다.

+0

web.config의 httpRunTime 요소를 사용하여 maxRequestLength를 늘리십시오. – Rajesh

+0

업로드 할 수 없습니다 .. – rjovic

+0

업로드하려는 파일 크기는 얼마입니까? 또한 WCF Rest 서비스에서 추적을 활성화하고 추적 파일을 확인하십시오. 가능한 경우 원시 요청을 검사하십시오. – Rajesh

답변

0

나는 클라이언트 설정을 검토 할 것 - 반드시 바인딩 구성이 동일한 속성

maxReceivedMessageSize="2147483647"을 가지고있을 수 있습니다. 또한

, 나는이 모두 도움이되지 않습니다 경우 바인딩 (클라이언트와 서비스 모두)

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 

에 추가 할 것 - 오류가 어디에서 오는지 을 찾아 SvcTraceViewer를 사용하려고 (클라이언트를 보낼 때, 서버, ...)

+0

서버에서 오류가 발생했습니다. 또한 WebRequest 클래스를 사용하여 HTTP 요청을 생성하기 때문에 클라이언트 측에서 아무 것도 할 수 없습니다 ... 아니면 뭔가 빠졌습니까? 당신의 접근 방식은 내가 맞다면 SOAP을위한 것입니다. 이 서비스는 나머지 서비스뿐 아니라 다른 플랫폼에서도 사용할 수 있습니다. NET – rjovic

+0

예, 놓쳤습니다 -이 답변을보십시오 : http://stackoverflow.com/questions/1439952/unable-to-set-maxreceivedmessagesize -through-web-config – evgenyl

관련 문제