У меня есть эта ошибка: «подписи вспомогательных токенов, которые не ожидаются».Исключение происходит потому, что запрос отправляется без подписи, но ответ подписан.Похоже, что .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