如何在自托管WCF服务上设置maxReceivedMessageSize?

时间:2014-01-20 14:10:00

标签: c# asp.net .net vb.net wcf

我遇到的问题是,我为自托管WCF服务提供的数据超出了它的处理能力。我在我的客户端上设置了maxReceivedMessageSize,但在这种情况下,客户端将数据传递给服务器,因此我需要在服务器上设置MaxReceivedMessageSize。我没有使用任何配置文件,我不知道如何在我当前的配置中设置它...

客户端:

   <bindings>
      <basicHttpBinding>
       <binding name="BasicHttpBinding_Iplutocomm"
                receiveTimeout="00:05:00" sendTimeout="00:05:00" maxReceivedMessageSize ="210242880">
          <readerQuotas maxStringContentLength="2147483647"  maxArrayLength="2147483647"/>
        </binding>
      </basicHttpBinding>

自助托管服务

Dim myServiceAddress As New Uri("http://" & LocalIpAddress & ":" & tcp_port & "/" & servicename)

myservicehost = New ServiceHost(GetType(plutocomm), myServiceAddress)

'Enable metadata publishing

Dim smb As New ServiceMetadataBehavior()
smb.HttpGetEnabled = True
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15
myservicehost.Description.Behaviors.Add(smb)

myservicehost.Open()

新的更改/更新

这样做会覆盖我假设框架设置的默认basichhtp绑定,因为我最初没有专门创建绑定吗?

我简而言之,在我的服务上运行的以下代码是否允许我当前的客户端配置“插入”新绑定?我现在仍然只有一个绑定sbefore,但我创建了一个绑定,取代了默认绑定?

    Dim myServiceAddress As New Uri("http://" & LocalIpAddress & ":" & tcp_port & "/" & servicename)

    myservicehost = New ServiceHost(GetType(plutocomm), myServiceAddress)


    '*******NEW CHANGES

    Dim BasicBinding As New BasicHttpBinding
    BasicBinding.MaxReceivedMessageSize = 2147483647

    myservicehost.AddServiceEndpoint(GetType(plutocomm), BasicBinding, myServiceAddress)

    '/*******NEW CHANGES

    ' Enable metadata publishing.
    Dim smb As New ServiceMetadataBehavior()
    smb.HttpGetEnabled = True
    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15
    myservicehost.Description.Behaviors.Add(smb)

    myservicehost.Open()

2 个答案:

答案 0 :(得分:0)

使用ServiceHost.AddServiceEndpoint(),传递您选择的绑定。

在你的情况下,这是设置了maxReceivedMessageSize的basicHttpBinding。

此方法有5次重载,因此您可以选择所需的重载。

答案 1 :(得分:0)

这样的事情:

Dim myBinding As New BasicHttpBinding() With { _
    Key .MaxReceivedMessageSize = 210242880 _
}
myservicehost.AddServiceEndpoint(GetType(plutocomm), myBinding, myServiceAddress)

更新

你的绑定需要是“连贯的”,它们不需要是相同的。(如果你的客户端配置有60秒的超时,30秒超时的服务器会起作用但是会不连贯,同样的消息也是如此大小)