2011-03-16 47 views
0

我有一个WCF操作是这样的,我怎样才能知道当一个WCF操作被称为

public bool SubmitDocument(byte[] document) 

这样的想法是,主叫方将连载的文件,并致电上述操作。然后它被放入我们的数据库。

我想了解WCF的内部工作原理,所以当有人调用上面的操作时,在调用实际操作之前,需要将所有byte []数据发送到服务器似乎是合乎逻辑的。

当数据开始上传到服务器时是否有'记录'的方法,并且在部分失败的情况下捕获错误?我遇到了大约4mb的部分文档发生故障的问题,而我的WCF服务甚至没有注册某人正在尝试调用该操作。

我增加了上传大小限制这样,

<wsHttpBinding> 
    <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
    <binding name="CarWebserviceBinding" maxReceivedMessageSize="6291456"> 
     <security mode="None"> 
     </security> 
     <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
     <readerQuotas maxArrayLength="6291456" /> 
    </binding> 
    </wsHttpBinding> 

问题总体是一个第三方调用以上(SubmitDocument)的WCF操作和文件从来没有它使我们的终端如果超过4MB。

+6

是。打开跟踪。 – 2011-03-16 00:03:56

+0

顺便说一句,WCF没有网络方法。它有操作。这是行业标准术语。 – 2011-03-16 00:27:21

+0

当然,好的,上面编辑过。 – peter 2011-03-16 01:14:01

回答

2

我发现这里的答案,

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/f6541134-2e08-4eb9-987b-2158fb99b403

所以有,我已经正确地处理类似这样的各种WCF限制,

<wsHttpBinding> 
    <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
    <binding name="CarWebserviceBinding" maxReceivedMessageSize="6291456"> 
    <security mode="None"> 
    </security> 
    <!-- The upload limit should be 5 Mb, rounding up to 6 Mb just to be sure --> 
    <readerQuotas maxArrayLength="6291456" /> 
    </binding> 
</wsHttpBinding> 

BUT我没有做的是这样的,

<system.web> 
    <httpRuntime maxRequestLength="16384" /> <!-- 16MB --> 
</system.web> 

对于任何进入的http请求,IIS都有大约4MB的默认限制。以上设置将覆盖该限制。

另一件要提的是,我已将此添加到我的web.config打开跟踪,

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> 
     <listeners> 
     <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\Traces.svclog" /> 
     </listeners> 
    </source> 
    </sources> 
</system.diagnostics> 

,并在错误日志打开了错误,

CommunicationException - Maximum request length exceeded 
+0

你说当你添加'maxRequestLength'时,你停止了401错误,当你再次拿出时,你又会得到401错误? – 2011-03-17 22:20:44

+0

是的。那么401的事情很难评论,因为这些错误日志来自不同的公司谁使用我们的WCF服务。即我看不到他们的代码,从而理解为什么它失败了。 – peter 2011-03-17 22:37:00

+0

但是我可以肯定的是,当一个人上传一个大小为4086kb的文档到一个网站(这个网站称为我们的WCF服务)时,它永远不会在没有设置的情况下出现在我们的末尾,并且设置出现在我们的末尾别担心。 – peter 2011-03-17 22:38:21

3

您超出了WCF消息的默认缓冲区大小。您可能需要了解TransferMode流式传输。有一个关于它的问题在这里WCF HttpTransport: streamed vs buffered TransferMode

+0

我已经增加了限制,但我可能做得不正确。我更新了我的问题。 – peter 2011-03-16 00:08:36

+0

peter对不起,我对wsHttpBinding完全不熟悉。看起来像启用跟踪可能是您最好的下一步。 – 2011-03-16 00:16:11

+0

谢谢。我会去做。 – peter 2011-03-16 00:22:18

相关问题