如何支持WSFederationHttpBinding流?(How do I support str

2019-09-16 09:25发布

我有一个用来上传大文件下载到服务器WCF服务。 我使用MTOM消息编码和我想使用流传输模式。 但是,我们使用的是wsFederationHttpBinding。 如何支持wsFederationHttpBinding流?

我的WCF服务的web.config代码如下,

<wsFederationHttpBinding>
 <binding  name="UploadserviceFederation"
                      messageEncoding="Mtom"
                  maxBufferPoolSize="2147483647"
                  maxReceivedMessageSize="2147483647" >
          <readerQuotas maxStringContentLength="2147483647"
                      maxDepth="2147483647"
                      maxBytesPerRead="2147483647"
                      maxArrayLength="2147483647"/>

          <security mode="TransportWithMessageCredential">
            <!-- Ping token type MUST be SAML 1.1, do not change -->
            <message 
              issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" negotiateServiceCredential="false">
              <!-- TODO: You must put the proper issuer URN of the Ping STS; normally this would be the Ping base URL -->
              <issuer address="https://my-issuer.com" binding="customBinding" bindingConfiguration="FileUploadSTSBinding" />
            </message>
          </security>
        </binding>

      </wsFederationHttpBinding>


<customBinding>
        <binding name="FileUploadSTSBinding">
          <security authenticationMode="UserNameOverTransport" requireDerivedKeys="false"
              keyEntropyMode="ServerEntropy" requireSecurityContextCancellation="false"
              requireSignatureConfirmation="false">
          </security>
          <httpsTransport maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" />
        </binding>
</customBinding>

Answer 1:

这是一个几年,所以我不知道如果这仍然会有所帮助,但我碰到这个职位后来试图找出同样的问题,所以它可能帮助别人。

事实证明,它simple..once你的舞蹈恰到好处实际上非常。

也许最简单的事情(也是我第一次尝试)是从WS2007FederationHttpBinding继承。 事实证明,它有一个GetTransport方法是虚拟的,所以你可以覆盖它,并与TransferMode设置为流返回HttpsTransport的实例:

public class FileUploadSTSBinding : WS2007FederationHttpBinding
{
    protected override TransportBindingElement GetTransport()
    {
        return new HttpsTransportBindingElement()
        {
            TransferMode = TransferMode.Streamed
        };
    }
}

但是,这样做透露别的东西:因为我的结合不再是一个公认的绑定类型,SvcUtil工具并没有把它当作WS2007FederationHttpBinding了,而是作为一个自定义绑定,从而导致客户端配置为堆叠产生的结合元件而不是使用由联邦结合提供的快捷键:

    <customBinding>
                <binding name="CustomBinding_ISdk">
                    <security defaultAlgorithmSuite="Default" authenticationMode="IssuedTokenOverTransport"
                        requireDerivedKeys="true" includeTimestamp="true" messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10">
                        <issuedTokenParameters keyType="BearerKey">
                            <additionalRequestParameters>
                                <trust:SecondaryParameters xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
                                    <trust:KeyType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
                                </trust:SecondaryParameters>
                            </additionalRequestParameters>
                        </issuedTokenParameters>
                        <localClientSettings detectReplays="false" />
                        <localServiceSettings detectReplays="false" />
                    </security>
                    <textMessageEncoding />
                    <httpsTransport />
                </binding>

..这说明了什么底层绑定元素实际上 ,它可以让你调整它们所有你喜欢。 而且,事实证明,他们真的没有从实际的结合是不同的,因为只有真正特别的部分是安全因素,但并没有太大变化。

希望帮助。



Answer 2:

你将不得不使流传输模式自定义,因为只有结合BasicHttpBindingNetTcpBindingNetNamedPipeBinding绑定暴露TransferMode财产。 请参阅此文章的例子。



文章来源: How do I support streaming in WSFederationHttpBinding?