Skip to content

Commit 846ab26

Browse files
committed
Fix mtom message headers
1 parent ace7d54 commit 846ab26

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/System.ServiceModel.Http/src/System/ServiceModel/Channels/HttpChannelFactory.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Diagnostics.Contracts;
66
using System.Globalization;
77
using System.IdentityModel.Selectors;
8+
using System.Linq;
89
using System.Net;
910
using System.Net.Http;
1011
using System.Net.Http.Headers;
@@ -1030,6 +1031,15 @@ public async Task SendRequestAsync(Message message, TimeoutHelper timeoutHelper)
10301031
if (!suppressEntityBody)
10311032
{
10321033
httpRequestMessage.Content = MessageContent.Create(_factory, request, _timeoutHelper);
1034+
var contentType = httpRequestMessage.Content.Headers.ContentType;
1035+
if (contentType!= null &&
1036+
contentType.MediaType == "multipart/related" &&
1037+
contentType.Parameters.Contains(new NameValueHeaderValue("type", "\"application/xop+xml\"")))
1038+
{
1039+
// For MTOM messages, add a MIME version header
1040+
AddMimeVersion("1.0");
1041+
}
1042+
10331043
}
10341044

10351045
if (Fx.IsUap)
@@ -1095,6 +1105,11 @@ public async Task SendRequestAsync(Message message, TimeoutHelper timeoutHelper)
10951105
}
10961106
}
10971107

1108+
private void AddMimeVersion(string version)
1109+
{
1110+
_httpRequestMessage.Headers.Add(HttpChannelUtilities.MIMEVersionHeader, version);
1111+
}
1112+
10981113
private void Cleanup()
10991114
{
11001115
s_cancelCts(_httpSendCts);

src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/MtomMessageEncoder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,12 +423,12 @@ public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string
423423

424424
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
425425
{
426-
return WriteMessageInternal(message, maxMessageSize, bufferManager, messageOffset, GenerateStartInfoString(), _boundary, MtomStartUri, writeMessageHeaders: true);
426+
return WriteMessageInternal(message, maxMessageSize, bufferManager, messageOffset, GenerateStartInfoString(), _boundary, MtomStartUri, writeMessageHeaders: false);
427427
}
428428

429429
public override ValueTask<ArraySegment<byte>> WriteMessageAsync(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
430430
{
431-
return new ValueTask<ArraySegment<byte>>(WriteMessageInternal(message, maxMessageSize, bufferManager, messageOffset, GenerateStartInfoString(), _boundary, MtomStartUri, writeMessageHeaders: true));
431+
return new ValueTask<ArraySegment<byte>>(WriteMessageInternal(message, maxMessageSize, bufferManager, messageOffset, GenerateStartInfoString(), _boundary, MtomStartUri, writeMessageHeaders: false));
432432
}
433433

434434
private string GetContentType(out string boundary)
@@ -517,7 +517,7 @@ public override void WriteMessage(Message message, Stream stream)
517517

518518
public override ValueTask WriteMessageAsync(Message message, Stream stream)
519519
{
520-
return WriteMessageInternalAsync(message, stream, GenerateStartInfoString(), _boundary, MtomStartUri, writeMessageHeaders: true);
520+
return WriteMessageInternalAsync(message, stream, GenerateStartInfoString(), _boundary, MtomStartUri, writeMessageHeaders: false);
521521
}
522522

523523
public override IAsyncResult BeginWriteMessage(Message message, Stream stream, AsyncCallback callback, object state)

0 commit comments

Comments
 (0)