我正在使用WCF服务。我遇到的问题是它开始使用双内存。
我正在使用 HTTPS 绑定
<wsHttpBinding>
<binding name="secureHttpBinding" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="Transport" >
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
<endpoint address="https://localhost/test.svc"
binding="wsHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="IWcfContract"
name="SecureBasicHttpBinding_WcfContract">
以下是我用来上传的代码
using (Stream fileStream = File.OpenRead(logsZipFullPath))
{
// Call web server
UploadFileResponse response = _webServiceHelper.UploadFile(fileStream, currentDate, ".zip", string.Empty);
fileStream.Close();
}
这是我的模特
[MessageContract]
public class UploadFileRequest : IDisposable
{
[MessageBodyMember(Order = 1)]
public Stream FileByteStream;
[MessageHeader(MustUnderstand = true)]
public string FileDescription;
}
我的zip文件是80MB。
我遇到的问题是在服务开始时使用 26mb ,这很好。在第一次通话时,它会在通话完成后使用 136MB ,然后降至 26mb 。这也没关系。在第二次上传调用后,使用 346MB 开始 在服务电话后再次降至 26mb 。我的问题是,当文件只有 80MB 时,为什么使用346MB?我的GC和disponse已被正确调用。但是,这是正常行为还是我遗失了什么?
答案 0 :(得分:0)
终于找到了解决这个问题的方法。根据{{3}}
wsHttpBinding是完整的绑定,它支持大量的WS- * 功能和标准 - 它有更多的安全功能,你可以 使用会话连接,您可以使用可靠的消息传递 使用事务控制 - 只是更多的东西,但wsHttpBinding 也是一个很重的“,并为你的消息增加了很多开销 他们穿越网络
我认为这是内存使用率高的主要原因。我们的要求是使用HTTPS证书,我们可以将其与 basicHttpBinding 一起使用。所以我改变了我的设置
<basicHttpBinding>
<binding name="BasicHttpBinding_WcfContract" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true">
<readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="Transport"> <-- this is the main change
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>
注意:我将安全模式无更改为传输以支持https。
现在,一切都没有问题。 两种可能导致记忆问题的事情。