пытается реализовать пользовательский кодер в WCF - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть эта ошибка: «подписи вспомогательных токенов, которые не ожидаются».Исключение происходит потому, что запрос отправляется без подписи, но ответ подписан.Похоже, что .net ожидает неподписанного ответа.

Я пытаюсь реализовать пользовательский кодировщик, используя Использование MTOM в пользовательском кодировщике WCF Мой код выглядит следующим образом:

   public static consultDocumentPortNameClient CreateDProxy(string url, string username, string password)
    {

        CustomBinding binding = new CustomBinding();


        var security = TransportSecurityBindingElement.CreateUserNameOverTransportBindingElement();

        security.IncludeTimestamp = false;
        security.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic256;
        security.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
        security.EnableUnsecuredResponse = true;
        security.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
        security.AllowInsecureTransport = true;
        security.KeyEntropyMode = SecurityKeyEntropyMode.ServerEntropy;  

        //WSMessageEncoding.Text
        var encoding = new MtomMessageEncodingBindingElement();
        encoding.MessageVersion = MessageVersion.Soap11;
        encoding.WriteEncoding = Encoding.UTF8;

        var transport = new HttpsTransportBindingElement();
        transport.MaxReceivedMessageSize = 2000000; // 2 megs
        transport.RequireClientCertificate = false;
        transport.AuthenticationScheme = System.Net.AuthenticationSchemes.Digest;

    ///***** this the portion of code where I put the 
    binding.Elements.Add(security);
        binding.Elements.Add(encoding);
        binding.Elements.Add(transport);
        binding.Elements.Add(ReadMessage(varxxx, varxxx, varxxx))

в упомянутой ссылке в блоге я вставляю это, что удаляет подпись:

public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
    //Convert the received buffer into a string
    byte[] incomingResponse = buffer.Array;
    incomingResponse = RemoveSignatures(incomingResponse);
    ........

, и этот класс включает следующий метод:

private byte[] RemoveSignatures(byte[] stream)
{
    string stream2 = Encoding.UTF8.GetString(stream);           
    stream2 = stream2.Replace("\0", "");

    Regex x = new Regex("(\\<SOAP-ENV:Header\\>)(.*?)(\\</SOAP-ENV:Header\\>)");            
    string repl = "";
    stream2 = x.Replace(stream2, "$1" + repl + "$3");
    byte[] streamNuevo = Encoding.ASCII.GetBytes(stream2);

    return streamNuevo;
}

гдея должен реализовать этот метод (--- ReadMessage (varxxx, varxxx, varxxx) ---) с соответствующими параметрами?

Я новичок с wcf

...