diff --git a/System.ServiceModel.sln b/System.ServiceModel.sln
index 16c21a1eee1..351a9a3a0d5 100644
--- a/System.ServiceModel.sln
+++ b/System.ServiceModel.sln
@@ -23,6 +23,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binding.Custom.IntegrationT
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binding.Http.IntegrationTests", "src\System.Private.ServiceModel\tests\Scenarios\Binding\Http\Binding.Http.IntegrationTests.csproj", "{2789D52D-9C17-4FCE-B81C-41B65C3FAFF9}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binding.WebHttp.IntegrationTests", "src\System.Private.ServiceModel\tests\Scenarios\Binding\WebHttp\Binding.WebHttp.IntegrationTests.csproj", "{F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binding.Tcp.IntegrationTests", "src\System.Private.ServiceModel\tests\Scenarios\Binding\Tcp\Binding.Tcp.IntegrationTests.csproj", "{B38A2272-F260-4303-964C-ACDC9BADEB79}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client.ChannelLayer.IntegrationTests", "src\System.Private.ServiceModel\tests\Scenarios\Client\ChannelLayer\Client.ChannelLayer.IntegrationTests.csproj", "{CB612ECB-A863-46D2-90E2-61CC2C22C7D0}"
@@ -89,6 +91,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binding.UDS.IntegrationTest
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.NetNamedPipe.Tests", "src\System.ServiceModel.NetNamedPipe\tests\System.ServiceModel.NetNamedPipe.Tests.csproj", "{FD188537-21AF-48C5-84FF-F8758F4C42A8}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.Web", "src\System.ServiceModel.Web\src\System.ServiceModel.Web.csproj", "{B9669945-F041-4088-9949-20DC0AE9753D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.Web.Tests", "src\System.ServiceModel.Web\tests\System.ServiceModel.Web.Tests.csproj", "{76E6B222-8CC8-44F4-A1C6-862706CCE788}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.Http.Ref", "src\System.ServiceModel.Http\ref\System.ServiceModel.Http.Ref.csproj", "{34CCEAC9-43B1-4654-BF2F-0B40EC7AD016}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.NetTcp.Ref", "src\System.ServiceModel.NetTcp\ref\System.ServiceModel.NetTcp.Ref.csproj", "{81843CB2-E128-427B-9920-EEDBBBD4CB0B}"
@@ -243,6 +249,18 @@ Global
{2789D52D-9C17-4FCE-B81C-41B65C3FAFF9}.Release|x64.Build.0 = Release|Any CPU
{2789D52D-9C17-4FCE-B81C-41B65C3FAFF9}.Release|x86.ActiveCfg = Release|Any CPU
{2789D52D-9C17-4FCE-B81C-41B65C3FAFF9}.Release|x86.Build.0 = Release|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Debug|x64.Build.0 = Debug|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Debug|x86.Build.0 = Debug|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Release|x64.ActiveCfg = Release|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Release|x64.Build.0 = Release|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Release|x86.ActiveCfg = Release|Any CPU
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249}.Release|x86.Build.0 = Release|Any CPU
{B38A2272-F260-4303-964C-ACDC9BADEB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B38A2272-F260-4303-964C-ACDC9BADEB79}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B38A2272-F260-4303-964C-ACDC9BADEB79}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -615,6 +633,30 @@ Global
{FD188537-21AF-48C5-84FF-F8758F4C42A8}.Release|x64.Build.0 = Release|Any CPU
{FD188537-21AF-48C5-84FF-F8758F4C42A8}.Release|x86.ActiveCfg = Release|Any CPU
{FD188537-21AF-48C5-84FF-F8758F4C42A8}.Release|x86.Build.0 = Release|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Debug|x64.Build.0 = Debug|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Debug|x86.Build.0 = Debug|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Release|x64.ActiveCfg = Release|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Release|x64.Build.0 = Release|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Release|x86.ActiveCfg = Release|Any CPU
+ {B9669945-F041-4088-9949-20DC0AE9753D}.Release|x86.Build.0 = Release|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Debug|x64.Build.0 = Debug|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Debug|x86.Build.0 = Debug|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Release|x64.ActiveCfg = Release|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Release|x64.Build.0 = Release|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Release|x86.ActiveCfg = Release|Any CPU
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788}.Release|x86.Build.0 = Release|Any CPU
{34CCEAC9-43B1-4654-BF2F-0B40EC7AD016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34CCEAC9-43B1-4654-BF2F-0B40EC7AD016}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34CCEAC9-43B1-4654-BF2F-0B40EC7AD016}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -734,6 +776,7 @@ Global
{58918456-A2B2-431F-BB95-BAAD2818BFC7} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
{D878F354-E120-476A-A90A-9E601A7E7580} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
{2789D52D-9C17-4FCE-B81C-41B65C3FAFF9} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
+ {F0F5C0C0-AB1D-4A86-A0A9-3D13ACB9B249} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
{B38A2272-F260-4303-964C-ACDC9BADEB79} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
{CB612ECB-A863-46D2-90E2-61CC2C22C7D0} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
{76A75B01-C666-4953-924E-DCAC9C7AADF3} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
@@ -760,6 +803,7 @@ Global
{88918456-A2B2-431F-BB95-BAAD2818BFC7} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
{B7C7D4F1-DE4D-421B-9CE9-C7320A503D58} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
{FD188537-21AF-48C5-84FF-F8758F4C42A8} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
+ {76E6B222-8CC8-44F4-A1C6-862706CCE788} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
{0CB62138-1E7D-4D9D-B7BF-4FCB79BC8EAA} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
{7D7DACFC-D1DA-48C0-9BA1-C3A414780658} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
EndGlobalSection
diff --git a/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs b/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs
index f5f1f035095..20cf1cadeb7 100644
--- a/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs
+++ b/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs
@@ -390,5 +390,15 @@ public static bool Skip_CoreWCFService_FailedTest()
return !GetConditionValue(nameof(Skip_CoreWCFService_FailedTest),
ConditionalTestDetectors.IsRunWithCoreWCFService);
}
+
+ // Returns 'true' only when the test infrastructure is hosting services via
+ // CoreWCF (self-hosted). Used to gate outer-loop scenario tests whose
+ // service endpoint is only registered by the CoreWCF self-host project
+ // and is not yet deployed to the shared IIS bridge.
+ public static bool Run_With_CoreWCFService()
+ {
+ return GetConditionValue(nameof(Run_With_CoreWCFService),
+ ConditionalTestDetectors.IsRunWithCoreWCFService);
+ }
}
}
diff --git a/src/System.Private.ServiceModel/tests/Common/Scenarios/Endpoints.WebHttp.cs b/src/System.Private.ServiceModel/tests/Common/Scenarios/Endpoints.WebHttp.cs
new file mode 100644
index 00000000000..b6131efc9e5
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Common/Scenarios/Endpoints.WebHttp.cs
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// Endpoints addresses for WebHttp (REST) test services. Partial extension to
+// Endpoints (declared partial in tests/Common/Scenarios/Endpoints.cs).
+public static partial class Endpoints
+{
+ #region WebHttp Addresses
+ public static string HttpBaseAddress_WebHttp
+ => GetEndpointAddress("WebHttp.svc/");
+
+ public static string HttpBaseAddress_WebHttp_EchoGet
+ => GetEndpointAddress("WebHttp.svc/EchoWithGet");
+
+ public static string HttpBaseAddress_WebHttp_EchoGetJson
+ => GetEndpointAddress("WebHttp.svc/EchoWithGetJson");
+
+ public static string HttpBaseAddress_WebHttp_EchoPost
+ => GetEndpointAddress("WebHttp.svc/EchoWithPost");
+
+ public static string HttpBaseAddress_WebHttp_EchoPostJson
+ => GetEndpointAddress("WebHttp.svc/EchoWithPostJson");
+
+ public static string HttpBaseAddress_WebHttp_EchoGetPath
+ => GetEndpointAddress("WebHttp.svc/EchoWithGetPath");
+ #endregion
+}
diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/WebHttp/Binding.WebHttp.IntegrationTests.csproj b/src/System.Private.ServiceModel/tests/Scenarios/Binding/WebHttp/Binding.WebHttp.IntegrationTests.csproj
new file mode 100644
index 00000000000..69dec139133
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/WebHttp/Binding.WebHttp.IntegrationTests.csproj
@@ -0,0 +1,25 @@
+
+
+
+ $(ScenarioTestTargetFrameworks)
+ false
+ true
+ false
+ 9.0
+
+ $(NoWarn);CS0105;CS0108;CS0436;MSB3243
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/WebHttp/WebHttpBindingTests.cs b/src/System.Private.ServiceModel/tests/Scenarios/Binding/WebHttp/WebHttpBindingTests.cs
new file mode 100644
index 00000000000..e4e7e937b8a
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/WebHttp/WebHttpBindingTests.cs
@@ -0,0 +1,498 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.IO;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.Web;
+using Infrastructure.Common;
+using Xunit;
+
+// Mirror of the contract defined in
+// tools/IISHostedWcfService/App_code/testhosts/WebHttpTestServiceHost.cs
+// Declared here so the test project does not need a project reference
+// to IISHostedWcfService (which is folded into the SelfHostedCoreWcfService
+// host via wildcard and is therefore not consumable as a
+// library). The two declarations must stay in wire-format sync (same
+// [ServiceContract], same UriTemplate paths).
+[ServiceContract]
+public interface IWcfWebHttpService
+{
+ [OperationContract]
+ [WebGet(UriTemplate = "EchoWithGet?message={message}",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Xml)]
+ string EchoWithGet(string message);
+
+ [OperationContract]
+ [WebGet(UriTemplate = "EchoWithGetJson?message={message}",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Json)]
+ string EchoWithGetJson(string message);
+
+ [OperationContract]
+ [WebInvoke(Method = "POST", UriTemplate = "EchoWithPost",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Xml,
+ RequestFormat = WebMessageFormat.Xml)]
+ string EchoWithPost(string message);
+
+ [OperationContract]
+ [WebInvoke(Method = "POST", UriTemplate = "EchoWithPostJson",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Json,
+ RequestFormat = WebMessageFormat.Json)]
+ string EchoWithPostJson(string message);
+
+ [OperationContract]
+ [WebGet(UriTemplate = "EchoWithGetPath/{message}",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Xml)]
+ string EchoWithGetPath(string message);
+}
+
+// Separate raw / application/octet-stream contract, used only by the
+// self-contained loopback raw round-trip test. Kept local (not shared with the
+// CoreWCF host contract above) because the raw path is exercised purely against
+// an in-process HttpListener.
+[ServiceContract]
+public interface IWcfWebHttpRawService
+{
+ [OperationContract]
+ [WebInvoke(Method = "POST", UriTemplate = "EchoStream",
+ BodyStyle = WebMessageBodyStyle.Bare)]
+ Stream EchoStream(Stream stream);
+}
+
+public partial class Binding_WebHttp_WebHttpBindingTests : ConditionalWcfTest
+{
+ [WcfFact]
+ [OuterLoop]
+ [Condition(nameof(Run_With_CoreWCFService))]
+ public static void DefaultSettings_EchoWithGet_Xml_RoundTrips_String()
+ {
+ WebChannelFactory factory = null;
+ IWcfWebHttpService serviceProxy = null;
+ const string testString = "Hello";
+ try
+ {
+ // *** SETUP *** \\
+ WebHttpBinding binding = new WebHttpBinding();
+ factory = new WebChannelFactory(
+ binding,
+ new Uri(Endpoints.HttpBaseAddress_WebHttp));
+ serviceProxy = factory.CreateChannel();
+
+ // *** EXECUTE *** \\
+ string result = serviceProxy.EchoWithGet(testString);
+
+ // *** VALIDATE *** \\
+ Assert.Equal(testString, result);
+
+ // *** CLEANUP *** \\
+ ((ICommunicationObject)serviceProxy).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory);
+ }
+ }
+
+ [WcfFact]
+ [OuterLoop]
+ [Condition(nameof(Run_With_CoreWCFService))]
+ public static void DefaultSettings_EchoWithGetJson_Json_RoundTrips_String()
+ {
+ WebChannelFactory factory = null;
+ IWcfWebHttpService serviceProxy = null;
+ const string testString = "Hello-JSON";
+ try
+ {
+ WebHttpBinding binding = new WebHttpBinding();
+ factory = new WebChannelFactory(
+ binding,
+ new Uri(Endpoints.HttpBaseAddress_WebHttp));
+ serviceProxy = factory.CreateChannel();
+
+ string result = serviceProxy.EchoWithGetJson(testString);
+
+ Assert.Equal(testString, result);
+
+ ((ICommunicationObject)serviceProxy).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory);
+ }
+ }
+
+ [WcfFact]
+ [OuterLoop]
+ [Condition(nameof(Run_With_CoreWCFService))]
+ public static void DefaultSettings_EchoWithPost_Xml_RoundTrips_String()
+ {
+ WebChannelFactory factory = null;
+ IWcfWebHttpService serviceProxy = null;
+ const string testString = "Hello-POST";
+ try
+ {
+ WebHttpBinding binding = new WebHttpBinding();
+ factory = new WebChannelFactory(
+ binding,
+ new Uri(Endpoints.HttpBaseAddress_WebHttp));
+ serviceProxy = factory.CreateChannel();
+
+ string result = serviceProxy.EchoWithPost(testString);
+
+ Assert.Equal(testString, result);
+
+ ((ICommunicationObject)serviceProxy).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory);
+ }
+ }
+
+ [WcfFact]
+ [OuterLoop]
+ [Condition(nameof(Run_With_CoreWCFService))]
+ public static void DefaultSettings_EchoWithGetPath_PathVar_RoundTrips_String()
+ {
+ WebChannelFactory factory = null;
+ IWcfWebHttpService serviceProxy = null;
+ const string testString = "Hello-PATH";
+ try
+ {
+ WebHttpBinding binding = new WebHttpBinding();
+ factory = new WebChannelFactory(
+ binding,
+ new Uri(Endpoints.HttpBaseAddress_WebHttp));
+ serviceProxy = factory.CreateChannel();
+
+ string result = serviceProxy.EchoWithGetPath(testString);
+
+ Assert.Equal(testString, result);
+
+ ((ICommunicationObject)serviceProxy).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory);
+ }
+ }
+
+ // Test-only helper for the 3 WebHttpBinding_*_RoundTripsAgainstLocalHttpListener
+ // regression tests. Picks a random loopback port in the Windows dynamic /
+ // ephemeral range (49152-65535 per RFC 6335), then starts an HttpListener
+ // on it. Retries up to MaxPortRetries times to survive transient port
+ // collisions. Fails loudly via Assert.Fail if no port works within the
+ // budget, so the tests can NEVER silently skip on a busy-port machine
+ // and mask a regression (flagged by Gemini 3.1 Pro during multi-model
+ // code review of PR #5959).
+ private const int MaxPortRetries = 10;
+
+ private static (System.Net.HttpListener listener, string baseUrl) StartLoopbackHttpListener()
+ {
+ var random = new Random();
+ var errors = new System.Collections.Generic.List();
+ for (int attempt = 1; attempt <= MaxPortRetries; attempt++)
+ {
+ int port = random.Next(49152, 65536);
+ string url = "http://127.0.0.1:" + port + "/WebHttp.svc/";
+ var listener = new System.Net.HttpListener();
+ listener.Prefixes.Add(url);
+ try
+ {
+ listener.Start();
+ return (listener, url);
+ }
+ catch (System.Net.HttpListenerException ex)
+ {
+ errors.Add("attempt " + attempt + " port " + port +
+ ": " + ex.ErrorCode + "/" + ex.Message);
+ }
+ }
+ Assert.Fail(
+ "Unable to find a random port number after " + MaxPortRetries +
+ " attempts. Errors: " + string.Join("; ", errors));
+ return default; // unreachable
+ }
+
+ // Test 1 of 3 that use StartLoopbackHttpListener - see the helper for the
+ // rationale (random port + retry + fail-loud, per code-review of PR #5959).
+ [WcfFact]
+ public static void WebHttpBinding_RoundTripsAgainstLocalHttpListener()
+ {
+ var (listener, baseUrl) = StartLoopbackHttpListener();
+ string capturedUrl = null;
+ var done = new System.Threading.ManualResetEventSlim();
+
+ System.Threading.Tasks.Task.Run(() =>
+ {
+ try
+ {
+ var ctx = listener.GetContext();
+ capturedUrl = ctx.Request.Url.AbsoluteUri;
+ ctx.Response.ContentType = "application/xml; charset=utf-8";
+ byte[] body = System.Text.Encoding.UTF8.GetBytes(
+ "Hello-PATH");
+ ctx.Response.OutputStream.Write(body, 0, body.Length);
+ ctx.Response.OutputStream.Close();
+ }
+ catch { }
+ finally { done.Set(); }
+ });
+
+ WebHttpBinding binding = new WebHttpBinding();
+ var factory = new WebChannelFactory(binding, new Uri(baseUrl));
+ IWcfWebHttpService channel = factory.CreateChannel();
+ string result = null;
+ try
+ {
+ result = channel.EchoWithGetPath("Hello-PATH");
+ done.Wait(TimeSpan.FromSeconds(10));
+ }
+ finally
+ {
+ try { ((ICommunicationObject)channel).Close(); } catch { }
+ try { factory.Close(); } catch { }
+ try { listener.Stop(); } catch { }
+ }
+
+ Assert.Equal(baseUrl + "EchoWithGetPath/Hello-PATH", capturedUrl);
+ Assert.Equal("Hello-PATH", result);
+ }
+
+ // Raw / application/octet-stream pass-through round-trip. Exercises the
+ // ByteStream encoder wired into WebMessageEncoder (RawMessageEncoder) plus
+ // HttpStreamFormatter on both the request (Stream -> body) and reply
+ // (body -> Stream) sides. This is the client-side raw path enabled by
+ // porting ByteStreamMessageEncodingBindingElement into Primitives.
+ [WcfFact]
+ public static void WebHttpBinding_RawStream_RoundTripsAgainstLocalHttpListener()
+ {
+ var (listener, baseUrl) = StartLoopbackHttpListener();
+ byte[] captured = null;
+ var done = new System.Threading.ManualResetEventSlim();
+
+ System.Threading.Tasks.Task.Run(() =>
+ {
+ try
+ {
+ var ctx = listener.GetContext();
+ using (var ms = new MemoryStream())
+ {
+ ctx.Request.InputStream.CopyTo(ms);
+ captured = ms.ToArray();
+ }
+ ctx.Response.ContentType = "application/octet-stream";
+ ctx.Response.OutputStream.Write(captured, 0, captured.Length);
+ ctx.Response.OutputStream.Close();
+ }
+ catch { }
+ finally { done.Set(); }
+ });
+
+ byte[] payload = System.Text.Encoding.UTF8.GetBytes("raw-bytes-\u00e9\u00f1-42");
+ WebHttpBinding binding = new WebHttpBinding();
+ var factory = new WebChannelFactory(binding, new Uri(baseUrl));
+ IWcfWebHttpRawService channel = factory.CreateChannel();
+ byte[] roundTripped = null;
+ try
+ {
+ using (Stream reply = channel.EchoStream(new MemoryStream(payload)))
+ using (var ms = new MemoryStream())
+ {
+ reply.CopyTo(ms);
+ roundTripped = ms.ToArray();
+ }
+ done.Wait(TimeSpan.FromSeconds(10));
+ }
+ finally
+ {
+ try { ((ICommunicationObject)channel).Close(); } catch { }
+ try { factory.Close(); } catch { }
+ try { listener.Stop(); } catch { }
+ }
+
+ Assert.Equal(payload, captured);
+ Assert.Equal(payload, roundTripped);
+ }
+
+ // Regression test for the JSON reply-deserialization path: when an
+ // operation declares ResponseFormat=Json, the client must use the JSON
+ // formatter to read the body, not DataContractSerializer.
+ // Test 2 of 3 that use StartLoopbackHttpListener - see the helper for the
+ // rationale (random port + retry + fail-loud, per code-review of PR #5959).
+ [WcfFact]
+ public static void WebHttpBinding_JsonReply_RoundTripsAgainstLocalHttpListener()
+ {
+ var (listener, baseUrl) = StartLoopbackHttpListener();
+ var done = new System.Threading.ManualResetEventSlim();
+
+ System.Threading.Tasks.Task.Run(() =>
+ {
+ try
+ {
+ var ctx = listener.GetContext();
+ ctx.Response.ContentType = "application/json; charset=utf-8";
+ byte[] body = System.Text.Encoding.UTF8.GetBytes("\"Hello-JSON\"");
+ ctx.Response.OutputStream.Write(body, 0, body.Length);
+ ctx.Response.OutputStream.Close();
+ }
+ catch { }
+ finally { done.Set(); }
+ });
+
+ WebHttpBinding binding = new WebHttpBinding();
+ var factory = new WebChannelFactory(binding, new Uri(baseUrl));
+ IWcfWebHttpService channel = factory.CreateChannel();
+ string result = null;
+ try
+ {
+ result = channel.EchoWithGetJson("Hello-JSON");
+ done.Wait(TimeSpan.FromSeconds(10));
+ }
+ finally
+ {
+ try { ((ICommunicationObject)channel).Close(); } catch { }
+ try { factory.Close(); } catch { }
+ try { listener.Stop(); } catch { }
+ }
+
+ Assert.Equal("Hello-JSON", result);
+ }
+
+ // End-to-end regression test for AllowCookies: with AllowCookies=true,
+ // the client's underlying HttpMessageHandler should retain the cookie
+ // set by the server on the first response and echo it back on the
+ // second request. With AllowCookies=false (the default) the cookie
+ // is NOT echoed back. Runs against a local HttpListener so it needs
+ // no external service.
+ // Test 3 of 3 that use StartLoopbackHttpListener - see the helper for the
+ // rationale (random port + retry + fail-loud, per code-review of PR #5959).
+ [WcfFact]
+ public static void WebHttpBinding_AllowCookies_RoundTripsCookieHeader()
+ {
+ var (listener, baseUrl) = StartLoopbackHttpListener();
+ string secondRequestCookieHeader = null;
+ var done = new System.Threading.ManualResetEventSlim();
+
+ System.Threading.Tasks.Task.Run(() =>
+ {
+ try
+ {
+ // First request: set a cookie.
+ var ctx1 = listener.GetContext();
+ ctx1.Response.Headers.Add("Set-Cookie", "sid=abc123; Path=/");
+ ctx1.Response.ContentType = "application/xml; charset=utf-8";
+ byte[] body1 = System.Text.Encoding.UTF8.GetBytes(
+ "first");
+ ctx1.Response.OutputStream.Write(body1, 0, body1.Length);
+ ctx1.Response.OutputStream.Close();
+
+ // Second request: capture Cookie header.
+ var ctx2 = listener.GetContext();
+ secondRequestCookieHeader = ctx2.Request.Headers["Cookie"];
+ ctx2.Response.ContentType = "application/xml; charset=utf-8";
+ byte[] body2 = System.Text.Encoding.UTF8.GetBytes(
+ "second");
+ ctx2.Response.OutputStream.Write(body2, 0, body2.Length);
+ ctx2.Response.OutputStream.Close();
+ }
+ catch { }
+ finally { done.Set(); }
+ });
+
+ WebHttpBinding binding = new WebHttpBinding { AllowCookies = true };
+ var factory = new WebChannelFactory(binding, new Uri(baseUrl));
+ IWcfWebHttpService channel = factory.CreateChannel();
+ try
+ {
+ channel.EchoWithGetPath("first");
+ channel.EchoWithGetPath("second");
+ done.Wait(TimeSpan.FromSeconds(10));
+ }
+ finally
+ {
+ try { ((ICommunicationObject)channel).Close(); } catch { }
+ try { factory.Close(); } catch { }
+ try { listener.Stop(); } catch { }
+ }
+
+ Assert.NotNull(secondRequestCookieHeader);
+ Assert.Contains("sid=abc123", secondRequestCookieHeader);
+ }
+
+ // Regression test: when the caller opens an OperationContextScope and puts a
+ // custom HttpRequestMessageProperty on OutgoingMessageProperties (a common way
+ // to add per-call headers), the WebGet operation's HTTP method / SuppressEntityBody
+ // must survive. Before WebOperationContext was reshaped to expose OutgoingRequest,
+ // UriTemplateClientFormatter wrote Method/SuppressEntityBody onto the message
+ // property, which ServiceChannel then overwrote with the ambient property -
+ // reverting GET to the default POST. The formatter now routes through
+ // WebOperationContext.Current.OutgoingRequest so the ambient property carries them.
+ [WcfFact]
+ public static void WebHttpBinding_OperationContextScope_PreservesGetMethod()
+ {
+ var (listener, baseUrl) = StartLoopbackHttpListener();
+ string capturedMethod = null;
+ string capturedUrl = null;
+ var done = new System.Threading.ManualResetEventSlim();
+
+ System.Threading.Tasks.Task.Run(() =>
+ {
+ try
+ {
+ var ctx = listener.GetContext();
+ capturedMethod = ctx.Request.HttpMethod;
+ capturedUrl = ctx.Request.Url.AbsoluteUri;
+ ctx.Response.ContentType = "application/xml; charset=utf-8";
+ byte[] body = System.Text.Encoding.UTF8.GetBytes(
+ "Hello-PATH");
+ ctx.Response.OutputStream.Write(body, 0, body.Length);
+ ctx.Response.OutputStream.Close();
+ }
+ catch { }
+ finally { done.Set(); }
+ });
+
+ WebHttpBinding binding = new WebHttpBinding();
+ var factory = new WebChannelFactory(binding, new Uri(baseUrl));
+ IWcfWebHttpService channel = factory.CreateChannel();
+ try
+ {
+ using (new OperationContextScope((IClientChannel)channel))
+ {
+ // Simulate the caller adding a per-call custom header via an ambient
+ // HttpRequestMessageProperty on the OperationContext.
+ var custom = new HttpRequestMessageProperty();
+ custom.Headers["X-Custom-Header"] = "value";
+ OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = custom;
+
+ channel.EchoWithGetPath("Hello-PATH");
+ }
+ done.Wait(TimeSpan.FromSeconds(10));
+ }
+ finally
+ {
+ try { ((ICommunicationObject)channel).Close(); } catch { }
+ try { factory.Close(); } catch { }
+ try { listener.Stop(); } catch { }
+ }
+
+ // Would be "POST" (the HttpRequestMessageProperty default) if the ambient
+ // property had clobbered the formatter's method.
+ Assert.Equal("GET", capturedMethod);
+ Assert.Equal(baseUrl + "EchoWithGetPath/Hello-PATH", capturedUrl);
+ }
+}
diff --git a/src/System.Private.ServiceModel/tools/IISHostedWcfService/App_code/TestDefinitionHelper.cs b/src/System.Private.ServiceModel/tools/IISHostedWcfService/App_code/TestDefinitionHelper.cs
index a9b1f017fa7..5455973341a 100644
--- a/src/System.Private.ServiceModel/tools/IISHostedWcfService/App_code/TestDefinitionHelper.cs
+++ b/src/System.Private.ServiceModel/tools/IISHostedWcfService/App_code/TestDefinitionHelper.cs
@@ -237,7 +237,14 @@ internal static async Task StartHosts(bool useWebSocket)
if (!useWebSocket && (schema == ServiceSchema.WS || schema == ServiceSchema.WSS)) continue;
string basePath = serviceTestHostOptionsDict[serviceHostTypeName].endpointBasePath[schema];
- string endpointAddress = string.Format("{0}/{1}", basePath, endpoint.Address);
+ // When the endpoint Address is empty (e.g. for WebHttpBinding hosts
+ // that anchor URI templates at the base path), avoid appending a
+ // trailing slash. CoreWCF's WebHttp routing builds prefix matches
+ // off the registered URI and a trailing slash causes everything
+ // except the bare base address to 404.
+ string endpointAddress = string.IsNullOrEmpty(endpoint.Address)
+ ? basePath
+ : string.Format("{0}/{1}", basePath, endpoint.Address);
serviceBuilder.AddServiceEndpoint(serviceHost.ServiceType, endpoint.ContractType, endpoint.Binding, new Uri(endpointAddress, UriKind.RelativeOrAbsolute), null);
}
diff --git a/src/System.Private.ServiceModel/tools/IISHostedWcfService/App_code/testhosts/WebHttpTestServiceHost.cs b/src/System.Private.ServiceModel/tools/IISHostedWcfService/App_code/testhosts/WebHttpTestServiceHost.cs
new file mode 100644
index 00000000000..ae4dea64e6c
--- /dev/null
+++ b/src/System.Private.ServiceModel/tools/IISHostedWcfService/App_code/testhosts/WebHttpTestServiceHost.cs
@@ -0,0 +1,107 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#if NET
+using CoreWCF;
+using CoreWCF.Channels;
+using CoreWCF.Web;
+#else
+using System;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Web;
+#endif
+
+namespace WcfService
+{
+ // ---- Contract --------------------------------------------------------
+ // Shared between server (CoreWCF on .NET, full .NET FX on net4xx via IIS)
+ // and client (this repo's new System.ServiceModel.Web). The attribute
+ // parameter names match across CoreWCF.Web.WebGet/WebInvoke and
+ // System.ServiceModel.Web.WebGet/WebInvoke, so a single contract works
+ // for both.
+ [ServiceContract]
+ public interface IWcfWebHttpService
+ {
+ [OperationContract]
+ [WebGet(UriTemplate = "EchoWithGet?message={message}",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Xml)]
+ string EchoWithGet(string message);
+
+ [OperationContract]
+ [WebGet(UriTemplate = "EchoWithGetJson?message={message}",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Json)]
+ string EchoWithGetJson(string message);
+
+ [OperationContract]
+ [WebInvoke(Method = "POST", UriTemplate = "EchoWithPost",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Xml,
+ RequestFormat = WebMessageFormat.Xml)]
+ string EchoWithPost(string message);
+
+ [OperationContract]
+ [WebInvoke(Method = "POST", UriTemplate = "EchoWithPostJson",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Json,
+ RequestFormat = WebMessageFormat.Json)]
+ string EchoWithPostJson(string message);
+
+ [OperationContract]
+ [WebGet(UriTemplate = "EchoWithGetPath/{message}",
+ BodyStyle = WebMessageBodyStyle.Bare,
+ ResponseFormat = WebMessageFormat.Xml)]
+ string EchoWithGetPath(string message);
+ }
+
+ // ---- Implementation --------------------------------------------------
+ public class WcfWebHttpService : IWcfWebHttpService
+ {
+ public string EchoWithGet(string message) { return message; }
+ public string EchoWithGetJson(string message) { return message; }
+ public string EchoWithPost(string message) { return message; }
+ public string EchoWithPostJson(string message) { return message; }
+ public string EchoWithGetPath(string message) { return message; }
+ }
+
+ // ---- Test Host -------------------------------------------------------
+ //
+ // Registers a CoreWCF (or IIS .NET FX) REST endpoint at:
+ // HTTP -> http://:8081/WebHttp.svc/
+ //
+ // On the CoreWCF (#if NET) path, TestDefinitionHelper.StartHosts() already
+ // calls services.AddServiceModelWebServices(), so the WebHttpServiceBehavior
+ // in CoreWCF.WebHttp will automatically install a WebHttpBehavior on this
+ // endpoint when it sees the WebMessageEncodingBindingElement that the
+ // WebHttpBinding produces.
+ //
+ // On the .NET FX path we need to install WebHttpBehavior manually since
+ // TestServiceHostBase does not.
+ [TestServiceDefinition(BasePath = "WebHttp.svc", Schema = ServiceSchema.HTTP)]
+ public class WebHttpTestServiceHost : TestServiceHostBase
+ {
+ protected override string Address { get { return ""; } }
+
+ protected override Binding GetBinding() { return new WebHttpBinding(); }
+
+ public WebHttpTestServiceHost(params Uri[] baseAddresses)
+ : base(typeof(WcfWebHttpService), baseAddresses) { }
+
+#if !NET
+ protected override void ApplyConfiguration()
+ {
+ base.ApplyConfiguration();
+ foreach (var ep in Description.Endpoints)
+ {
+ if (ep.Binding is WebHttpBinding && ep.Behaviors.Find() == null)
+ {
+ ep.Behaviors.Add(new System.ServiceModel.Description.WebHttpBehavior());
+ }
+ }
+ }
+#endif
+ }
+}
diff --git a/src/System.ServiceModel.Http/src/Resources/Strings.resx b/src/System.ServiceModel.Http/src/Resources/Strings.resx
index 6ac5023c405..6007c6c1550 100644
--- a/src/System.ServiceModel.Http/src/Resources/Strings.resx
+++ b/src/System.ServiceModel.Http/src/Resources/Strings.resx
@@ -250,7 +250,7 @@
Extended protection is not supported on this platform. Please install the appropriate patch or change the ExtendedProtectionPolicy on the Binding or BindingElement to a value with a PolicyEnforcement value of "Never" or "WhenSupported".
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.The value '{1}' is not supported in this context for the binding security property '{0}'.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.cs.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.cs.xlf
index 3e5ed772ca5..6a4103fa3cf 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.cs.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.cs.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Typ ClientCredentialType {0} může být použit pouze na straně serveru, nikoli na straně klienta. Namísto toho použijte jednu z hodnot None, Basic, Client, Digest, Ntlm, Windows.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Typ ClientCredentialType {0} může být použit pouze na straně serveru, nikoli na straně klienta. Namísto toho použijte jednu z hodnot None, Basic, Client, Digest, Ntlm, Windows.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.de.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.de.xlf
index 96ae0eef208..979c79d03f7 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.de.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.de.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Der ClientCredentialType "{0}" kann nur auf dem Server und nicht auf dem Client verwendet werden. Verwenden Sie stattdessen einen der folgenden Werte: None, Basic, Client, Digest, Ntlm, Windows.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Der ClientCredentialType "{0}" kann nur auf dem Server und nicht auf dem Client verwendet werden. Verwenden Sie stattdessen einen der folgenden Werte: None, Basic, Client, Digest, Ntlm, Windows.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.es.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.es.xlf
index 3728c8dd124..c588433b723 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.es.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.es.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Solo se puede usar ClientCredentialType "{0}" en el lado del servidor y no en el del cliente. Use en su lugar los siguientes valores: "None, Basic, Client, Digest, Ntlm, Windows".
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Solo se puede usar ClientCredentialType "{0}" en el lado del servidor y no en el del cliente. Use en su lugar los siguientes valores: "None, Basic, Client, Digest, Ntlm, Windows".
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.fr.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.fr.xlf
index 5f48d297549..65ad7919fb2 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.fr.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.fr.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Le ClientCredentialType '{0}' peut uniquement être utilisé côté serveur, et non côté client. Utilisez une des valeurs suivantes à la place : 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Le ClientCredentialType '{0}' peut uniquement être utilisé côté serveur, et non côté client. Utilisez une des valeurs suivantes à la place : 'None, Basic, Client, Digest, Ntlm, Windows'.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.it.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.it.xlf
index 49076ebb27d..23ec4dc38a8 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.it.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.it.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- L'elemento ClientCredentialType '{0}' può essere usato solo per il server e non per il client. Usare uno dei valori seguenti: 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ L'elemento ClientCredentialType '{0}' può essere usato solo per il server e non per il client. Usare uno dei valori seguenti: 'None, Basic, Client, Digest, Ntlm, Windows'.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ja.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ja.xlf
index 56b1a2f0d70..d3ab69aed50 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ja.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ja.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' を使用できるのはサーバー側のみで、クライアント側では使用できません。'None'、'Basic'、'Client'、'Digest'、'Ntlm'、'Windows' のいずれかの値を代わりに使用してください。
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' を使用できるのはサーバー側のみで、クライアント側では使用できません。'None'、'Basic'、'Client'、'Digest'、'Ntlm'、'Windows' のいずれかの値を代わりに使用してください。
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ko.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ko.xlf
index 2c4bb87e9d6..275a16bf9bd 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ko.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ko.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}'은(는) 클라이언트 쪽이 아닌 서버 쪽에서만 사용할 수 있습니다. 대신 '없음, 기본, 클라이언트, 다이제스트, NTLM, Windows' 값 중 하나를 사용하세요.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}'은(는) 클라이언트 쪽이 아닌 서버 쪽에서만 사용할 수 있습니다. 대신 '없음, 기본, 클라이언트, 다이제스트, NTLM, Windows' 값 중 하나를 사용하세요.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pl.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pl.xlf
index 96297b597ba..2b10a78e1c1 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pl.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pl.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Właściwości ClientCredentialType o wartości „{0}” można użyć tylko po stronie serwera, a nie po stronie klienta. Zamiast niej użyj jednej z następujących wartości: „None, Basic, Client, Digest, Ntlm, Windows”.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Właściwości ClientCredentialType o wartości „{0}” można użyć tylko po stronie serwera, a nie po stronie klienta. Zamiast niej użyj jednej z następujących wartości: „None, Basic, Client, Digest, Ntlm, Windows”.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pt-BR.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pt-BR.xlf
index 9d046cd6329..bac755d8aeb 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pt-BR.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.pt-BR.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' somente pode ser usado no lado do servidor, não no lado do cliente. Use um dos seguintes valores: 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' somente pode ser usado no lado do servidor, não no lado do cliente. Use um dos seguintes valores: 'None, Basic, Client, Digest, Ntlm, Windows'.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ru.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ru.xlf
index 66ddad72aca..9e7d23ff0bd 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ru.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.ru.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Тип ClientCredentialType "{0}" может использоваться на стороне сервера, но не клиента. Используйте вместо этого одно из следующих значений: None, Basic, Client, Digest, Ntlm, Windows.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Тип ClientCredentialType "{0}" может использоваться на стороне сервера, но не клиента. Используйте вместо этого одно из следующих значений: None, Basic, Client, Digest, Ntlm, Windows.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.tr.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.tr.xlf
index fcb5d5a876f..37462c934b5 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.tr.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.tr.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' yalnızca sunucu tarafında kullanılabilir, istemci tarafında kullanılamaz. Lütfen şu değerlerden birini kullanın: 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' yalnızca sunucu tarafında kullanılabilir, istemci tarafında kullanılamaz. Lütfen şu değerlerden birini kullanın: 'None, Basic, Client, Digest, Ntlm, Windows'.
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hans.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hans.xlf
index 3cf60175219..9cbf4182e48 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hans.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hans.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType“{0}”只能在服务器端使用,而不能在客户端使用。请改用以下值之一: None、Basic、Client、Digest、Ntlm、Windows。
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType“{0}”只能在服务器端使用,而不能在客户端使用。请改用以下值之一: None、Basic、Client、Digest、Ntlm、Windows。
diff --git a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hant.xlf b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hant.xlf
index 71206117018..c6cbb20da1a 100644
--- a/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hant.xlf
+++ b/src/System.ServiceModel.Http/src/Resources/xlf/Strings.zh-Hant.xlf
@@ -113,8 +113,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' 只能在伺服器端使用,而非用戶端。請使用下列其中一個值來取代 'None, Basic, Client, Digest, Ntlm, Windows'。
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' 只能在伺服器端使用,而非用戶端。請使用下列其中一個值來取代 'None, Basic, Client, Digest, Ntlm, Windows'。
diff --git a/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.netstandard.cs b/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.netstandard.cs
index 04d7bc87ee3..b25cd1dd6cc 100644
--- a/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.netstandard.cs
+++ b/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.netstandard.cs
@@ -946,6 +946,24 @@ public BinaryMessageEncodingBindingElement() { }
public override System.ServiceModel.Channels.MessageEncoderFactory CreateMessageEncoderFactory() { return default; }
public override T GetProperty(System.ServiceModel.Channels.BindingContext context) { return default; }
}
+ public static partial class ByteStreamMessage
+ {
+ public static System.ServiceModel.Channels.Message CreateMessage(System.ArraySegment buffer) { return default; }
+ public static System.ServiceModel.Channels.Message CreateMessage(System.ArraySegment buffer, System.ServiceModel.Channels.BufferManager bufferManager) { return default; }
+ public static System.ServiceModel.Channels.Message CreateMessage(System.IO.Stream stream) { return default; }
+ }
+ public sealed partial class ByteStreamMessageEncodingBindingElement : System.ServiceModel.Channels.MessageEncodingBindingElement
+ {
+ public ByteStreamMessageEncodingBindingElement() { }
+ public ByteStreamMessageEncodingBindingElement(System.Xml.XmlDictionaryReaderQuotas quota) { }
+ public override System.ServiceModel.Channels.MessageVersion MessageVersion { get { return default; } set { } }
+ public System.Xml.XmlDictionaryReaderQuotas ReaderQuotas { get { return default; } set { } }
+ public override System.ServiceModel.Channels.IChannelFactory BuildChannelFactory(System.ServiceModel.Channels.BindingContext context) { return default; }
+ public override bool CanBuildChannelFactory(System.ServiceModel.Channels.BindingContext context) { return default; }
+ public override System.ServiceModel.Channels.BindingElement Clone() { return default; }
+ public override System.ServiceModel.Channels.MessageEncoderFactory CreateMessageEncoderFactory() { return default; }
+ public override T GetProperty(System.ServiceModel.Channels.BindingContext context) { return default; }
+ }
public abstract partial class Binding : System.ServiceModel.IDefaultCommunicationTimeouts
{
protected Binding() { }
diff --git a/src/System.ServiceModel.Primitives/src/Resources/Strings.resx b/src/System.ServiceModel.Primitives/src/Resources/Strings.resx
index 216300e5e7a..6f6794daafb 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/Strings.resx
+++ b/src/System.ServiceModel.Primitives/src/Resources/Strings.resx
@@ -910,7 +910,7 @@
Extended protection is not supported on this platform. Please install the appropriate patch or change the ExtendedProtectionPolicy on the Binding or BindingElement to a value with a PolicyEnforcement value of "Never" or "WhenSupported".
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.The transport configured on this binding does not appear to support the CompressionFormat specified ({0}) on the message encoder. To resolve this issue, set the CompressionFormat on the {1} to '{2}' or use a different transport.
@@ -3054,4 +3054,40 @@
Cannot resolve KeyInfo for unwrapping key: KeyInfo '{0}', available tokens '{1}'.
+
+ Specified argument was not in the set of valid values.
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+ Argument property '{0}' should not be null.
+
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+ WriteStartElement has already been called on this encoder.
+
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+
+ The XmlReader is closed.
+
+
+ Start element '{0}' expected. Found '{1}'.
+
+
+ No matching start tag for end element.
+
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.cs.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.cs.xlf
index 9656942af8e..b89d0f9983b 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.cs.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.cs.xlf
@@ -117,6 +117,21 @@
Argument musí být neprázdný řetězec.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Asynchronní ukončení bylo voláno pro nesprávný kanál.
@@ -292,6 +307,26 @@
Element vazby zabezpečení pro zabezpečení samozavádění nebyl v {0} určen.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.Funkce RM Destination odmítla požadavek na vytvoření stabilní relace. {0} Kanál nelze otevřít.
@@ -1152,6 +1187,11 @@
Při zpětném volání uživatele došlo k výjimce. Podle zásobníku výjimky a informací o vnitřní výjimce určete, které zpětné volání selhalo.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.Záhlaví zprávy s názvem {0} a oborem názvů {1} se v sadě srozumitelných záhlaví nenachází.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Typ ClientCredentialType {0} může být použit pouze na straně serveru, nikoli na straně klienta. Namísto toho použijte jednu z hodnot None, Basic, Client, Digest, Ntlm, Windows.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Typ ClientCredentialType {0} může být použit pouze na straně serveru, nikoli na straně klienta. Namísto toho použijte jednu z hodnot None, Basic, Client, Digest, Ntlm, Windows.
@@ -4862,11 +4902,31 @@
Při čtení dat XML byla překročena kvóta maximální délky obsahu řetězce ({0}). Tuto kvótu lze zvýšit změnou vlastnosti MaxStringContentLength u objektu XmlDictionaryReaderQuotas, který se používá při vytváření čtecí funkce XML.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.Funkce XmlWriter je zavřena.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.{0} je neplatný typ XmlNodeType.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.de.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.de.xlf
index 3e62a6f1fc3..40cb31d66cd 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.de.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.de.xlf
@@ -117,6 +117,21 @@
Das Argument darf keine leere Zeichenfolge sein.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Async End wurde auf dem falschen Kanal aufgerufen.
@@ -292,6 +307,26 @@
Das Sicherheitsbindungselement für die Bootstrapsicherheit wurde auf "{0}" nicht angegeben.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.Die Anforderung zum Erstellen einer zuverlässigen Sitzung wurde vom RM-Ziel zurückgewiesen. {0} Der Kanal konnte nicht geöffnet werden.
@@ -1152,6 +1187,11 @@
Ein Benutzerrückruf hat eine Ausnahme ausgelöst. Prüfen Sie den Ausnahmestapel und die innere Ausnahme, um den Rückruf zu ermitteln, bei dem ein Fehler aufgetreten ist.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.Der Nachrichtenheader mit dem Namen "{0}" und dem Namespace "{1}" ist nicht im Satz der bekannten Header vorhanden.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Der ClientCredentialType "{0}" kann nur auf dem Server und nicht auf dem Client verwendet werden. Verwenden Sie stattdessen einen der folgenden Werte: None, Basic, Client, Digest, Ntlm, Windows.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Der ClientCredentialType "{0}" kann nur auf dem Server und nicht auf dem Client verwendet werden. Verwenden Sie stattdessen einen der folgenden Werte: None, Basic, Client, Digest, Ntlm, Windows.
@@ -4862,11 +4902,31 @@
Das Kontingent für die maximale Länge von Zeichenfolgeninhalt ({0}) wurde beim Lesen von XML-Daten überschritten. Dieses Kontingent kann durch Ändern der MaxStringContentLength-Eigenschaft des beim Erstellen des XML-Lesers verwendeten XmlDictionaryReaderQuotas-Objekts erhöht werden.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.Der XmlWriter wurde geschlossen.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType."{0}" ist ein ungültiger XmlNodeType.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.es.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.es.xlf
index 21df1384234..e68dc7aab8d 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.es.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.es.xlf
@@ -117,6 +117,21 @@
El argumento debe ser una cadena no vacía.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Se llamó a Async End en un canal erróneo.
@@ -292,6 +307,26 @@
No se especificó el elemento de enlace de seguridad para la seguridad de arranque en '{0}'.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.El destino RM rechazó la solicitud de crear una sesión confiable. {0} No se pudo abrir el canal.
@@ -1152,6 +1187,11 @@
La devolución de llamada de un usuario inició una excepción. Compruebe la pila de la excepción y la excepción interna para averiguar la devolución de llamada donde se produjo el error.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.El encabezado de mensaje con el nombre "{0}" y el espacio de nombres "{1}" no está presente en el conjunto de encabezados entendidos.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Solo se puede usar ClientCredentialType "{0}" en el lado del servidor y no en el del cliente. Use en su lugar los siguientes valores: "None, Basic, Client, Digest, Ntlm, Windows".
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Solo se puede usar ClientCredentialType "{0}" en el lado del servidor y no en el del cliente. Use en su lugar los siguientes valores: "None, Basic, Client, Digest, Ntlm, Windows".
@@ -4862,11 +4902,31 @@
Se superó la cuota de longitud del contenido de cadena ({0}) al leer los datos XML. Esta cuota se puede aumentar cambiando la propiedad MaxStringContentLength en el objeto XmlDictionaryReaderQuotas que se usa para crear el lector XML.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter está cerrado.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType."{0}" es un XmlNodeType no válido.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.fr.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.fr.xlf
index fb424c7785f..227f4794a15 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.fr.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.fr.xlf
@@ -117,6 +117,21 @@
L'argument doit être une chaîne non vide.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Async End a appelé sur un canal incorrect.
@@ -292,6 +307,26 @@
L'élément de liaison de sécurité pour la sécurité du démarrage n'a pas été spécifié sur '{0}'.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.La demande de création d'une session fiable a été refusée par la destination RM. {0} Le canal n'a pas pu être ouvert.
@@ -1152,6 +1187,11 @@
Un rappel d'utilisateur a généré une exception. Vérifiez la pile d'exception et l'exception interne pour identifier le rappel non réussi.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.L'en-tête de message dont le nom est '{0}' et l'espace de noms '{1}' n'est pas présent dans l'ensemble des en-têtes compris.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Le ClientCredentialType '{0}' peut uniquement être utilisé côté serveur, et non côté client. Utilisez une des valeurs suivantes à la place : 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Le ClientCredentialType '{0}' peut uniquement être utilisé côté serveur, et non côté client. Utilisez une des valeurs suivantes à la place : 'None, Basic, Client, Digest, Ntlm, Windows'.
@@ -4862,11 +4902,31 @@
Dépassement du quota maximal pour la longueur du contenu de chaîne ({0}) durant la lecture de données XML. Vous pouvez augmenter ce quota en changeant la propriété MaxStringContentLength sur l'objet XmlDictionaryReaderQuotas utilisé pendant la création du lecteur XML.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter est fermé.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.'{0}' est un XmlNodeType non valide.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.it.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.it.xlf
index 04a0482e4d3..d8b20d7c2f1 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.it.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.it.xlf
@@ -117,6 +117,21 @@
L'argomento deve essere una stringa non vuota.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Async End è stato chiamato sul canale errato.
@@ -292,6 +307,26 @@
L'elemento associazione di sicurezza per la sicurezza bootstrap non è stato specificato su '{0}'.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.La richiesta di creare una sessione affidabile è stata rifiutata dalla destinazione RM. {0} Impossibile aprire il canale.
@@ -1152,6 +1187,11 @@
Un callback utente ha generato un'eccezione. Controllare lo stack dell'eccezione e l'eccezione interna per determinare il callback interessato dal problema.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.L'intestazione del messaggio denominato '{0}' con spazio dei nomi '{1}' non è presente nel set di intestazioni riconosciute.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- L'elemento ClientCredentialType '{0}' può essere usato solo per il server e non per il client. Usare uno dei valori seguenti: 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ L'elemento ClientCredentialType '{0}' può essere usato solo per il server e non per il client. Usare uno dei valori seguenti: 'None, Basic, Client, Digest, Ntlm, Windows'.
@@ -4862,11 +4902,31 @@
Durante la lettura dei dati XML è stata superata la quota per la lunghezza massima delle stringhe ({0}). Per incrementare questa quota, modificare la proprietà MaxStringContentLength dell'oggetto XmlDictionaryReaderQuotas usato durante la creazione del lettore XML.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.L'elemento XmlWriter è chiuso.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.'{0}' è un elemento XmlNodeType non valido.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ja.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ja.xlf
index 7bf5480362e..4c1ded23b35 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ja.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ja.xlf
@@ -117,6 +117,21 @@
引数には空でない文字列を指定する必要があります。
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.非同期 End が間違ったチャネルで呼び出されました。
@@ -292,6 +307,26 @@
ブートストラップ セキュリティのセキュリティ バインド要素が '{0}' で指定されませんでした。
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.信頼できるセッションを作成するための要求は RM Destination によって拒否されました。{0} チャネルを開くことができませんでした。
@@ -1152,6 +1187,11 @@
ユーザー コールバックが例外をスローしました。例外スタックや内部例外を確認して、失敗したコールバックを特定してください。
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.名前が '{0}'、名前空間が '{1}' のメッセージ ヘッダーが、一連の解読されたヘッダーにありません。
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' を使用できるのはサーバー側のみで、クライアント側では使用できません。'None'、'Basic'、'Client'、'Digest'、'Ntlm'、'Windows' のいずれかの値を代わりに使用してください。
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' を使用できるのはサーバー側のみで、クライアント側では使用できません。'None'、'Basic'、'Client'、'Digest'、'Ntlm'、'Windows' のいずれかの値を代わりに使用してください。
@@ -4862,11 +4902,31 @@
XML データの読み取り中に、最大文字列コンテンツ長のクォータ ({0}) を超えました。このクォータを増やすには、XML リーダーの作成時に使用される XmlDictionaryReaderQuotas オブジェクトの MaxStringContentLength プロパティを変更してください。
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter は閉じられています。
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.'{0}' は、XmlNodeType としては無効です。
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ko.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ko.xlf
index 024993b7d09..e1728233382 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ko.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ko.xlf
@@ -117,6 +117,21 @@
인수는 비어 있지 않은 문자열이어야 합니다.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Async End가 잘못된 채널에서 호출되었습니다.
@@ -292,6 +307,26 @@
부트스트랩 보안을 위한 보안 바인딩 요소가 '{0}'에 지정되지 않았습니다.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.신뢰할 수 있는 세션을 만들라는 요청이 RM 대상에 의해 거부되었습니다. {0} 채널을 열 수 없습니다.
@@ -1152,6 +1187,11 @@
사용자 콜백에서 예외가 발생했습니다. 예외 스택 및 내부 예외를 점검하여 오류가 있는 콜백을 확인하세요.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.이름 '{0}' 및 네임스페이스 '{1}'을(를) 가진 메시지 헤더가 인식된 헤더 집합에 없습니다.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}'은(는) 클라이언트 쪽이 아닌 서버 쪽에서만 사용할 수 있습니다. 대신 '없음, 기본, 클라이언트, 다이제스트, NTLM, Windows' 값 중 하나를 사용하세요.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}'은(는) 클라이언트 쪽이 아닌 서버 쪽에서만 사용할 수 있습니다. 대신 '없음, 기본, 클라이언트, 다이제스트, NTLM, Windows' 값 중 하나를 사용하세요.
@@ -4862,11 +4902,31 @@
XML 데이터를 읽는 동안 최대 문자열 콘텐츠 길이 할당량({0})을 초과했습니다. XML 판독기를 만들 때 사용되는 XmlDictionaryReaderQuotas 개체에서 MaxStringContentLength 속성을 변경하여 이 할당량을 늘릴 수 있습니다.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter가 닫혀 있습니다.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.'{0}'은(는) 잘못된 XmlNodeType입니다.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pl.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pl.xlf
index f0e43de7532..a96e123e639 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pl.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pl.xlf
@@ -117,6 +117,21 @@
Argument musi być ciągiem niepustym.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Metoda Async End wywołana dla niewłaściwego kanału.
@@ -292,6 +307,26 @@
Element powiązania zabezpieczeń dla zabezpieczeń ładowania początkowego nie został określony w „{0}”.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.Żądanie utworzenia niezawodnej sesji zostało odrzucone przez punkt końcowy RM Destination. {0} Nie można otworzyć kanału.
@@ -1152,6 +1187,11 @@
Wywołanie zwrotne użytkownika zgłosiło wyjątek. Sprawdź stos wyjątków i wewnętrzny wyjątek w celu określenia wywołania zwrotnego, które zakończyło się niepowodzeniem.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.Nagłówek komunikatu z nazwą „{0}” i przestrzenią nazw „{1}” nie należy do zbioru rozpoznawanych nagłówków.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Właściwości ClientCredentialType o wartości „{0}” można użyć tylko po stronie serwera, a nie po stronie klienta. Zamiast niej użyj jednej z następujących wartości: „None, Basic, Client, Digest, Ntlm, Windows”.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Właściwości ClientCredentialType o wartości „{0}” można użyć tylko po stronie serwera, a nie po stronie klienta. Zamiast niej użyj jednej z następujących wartości: „None, Basic, Client, Digest, Ntlm, Windows”.
@@ -4862,11 +4902,31 @@
Podczas odczytywania danych XML został przekroczony maksymalny przydział długości zawartości ciągu ({0}). Wartość tę można zwiększyć, zmieniając właściwość MaxStringContentLength obiektu XmlDictionaryReaderQuotas użytego podczas tworzenia modułu odczytującego XML.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.Element XmlWriter jest zamknięty.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.Element „{0}” jest nieprawidłowym typem XmlNodeType.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pt-BR.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pt-BR.xlf
index 81006e9d0db..d1820afec60 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pt-BR.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.pt-BR.xlf
@@ -117,6 +117,21 @@
O argumento deve ser uma cadeia de caracteres não vazia.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Final Assíncrono chamado em canal incorreto.
@@ -292,6 +307,26 @@
O elemento de associação de segurança para segurança de inicialização não foi especificado em '{0}'.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.A solicitação para criar uma sessão confiável foi recusada pelo Destino RM. {0} Não foi possível abrir o canal.
@@ -1152,6 +1187,11 @@
O retorno de chamada de usuário gerou uma exceção. Verifique a pilha de exceção e a exceção interna para determinar o retorno de chamada com falha.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.O cabeçalho da mensagem com nome '{0}' e namespace '{1}' não está presente no conjunto de cabeçalhos compreendidos.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' somente pode ser usado no lado do servidor, não no lado do cliente. Use um dos seguintes valores: 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' somente pode ser usado no lado do servidor, não no lado do cliente. Use um dos seguintes valores: 'None, Basic, Client, Digest, Ntlm, Windows'.
@@ -4862,11 +4902,31 @@
A cota máxima do comprimento do conteúdo da cadeia de caracteres ({0}) foi excedida durante a leitura dos dados XML. Essa cota pode ser aumentada com a alteração da propriedade MaxStringContentLength no objeto XmlDictionaryReaderQuotas usado na criação do leitor de XML.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.O XmlWriter está fechado.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.'{0}' é uma expressão XmlNodeType inválida.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ru.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ru.xlf
index 11640ff72f9..c798de733db 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ru.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.ru.xlf
@@ -117,6 +117,21 @@
Аргумент должен быть непустой строкой.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Асинхронный метод End вызван на неверном канале.
@@ -292,6 +307,26 @@
Элемент привязки безопасности для безопасности загрузки не указан в "{0}".
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.Запрос на создание надежного сеанса отклонен пунктом назначения надежного обмена сообщениями. {0} Не удалось открыть канал.
@@ -1152,6 +1187,11 @@
Ответный вызов вызвал исключение. Проверьте стек исключений и внутреннее исключение, чтобы установить факт сбоя обратного вызова.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.Заголовок сообщения с именем "{0}" и пространством имен "{1}" отсутствует в наборе изученных заголовков.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- Тип ClientCredentialType "{0}" может использоваться на стороне сервера, но не клиента. Используйте вместо этого одно из следующих значений: None, Basic, Client, Digest, Ntlm, Windows.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ Тип ClientCredentialType "{0}" может использоваться на стороне сервера, но не клиента. Используйте вместо этого одно из следующих значений: None, Basic, Client, Digest, Ntlm, Windows.
@@ -4862,11 +4902,31 @@
Превышена квота максимальной длины строки ({0}) при чтении данных XML. Эту квоту можно увеличить, изменив свойство MaxStringContentLength объекта XmlDictionaryReaderQuotas, используемого при создании модуля чтения XML.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter закрыт.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType."{0}" является недопустимым XmlNodeType.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.tr.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.tr.xlf
index a18c12a45d1..aa6da358e47 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.tr.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.tr.xlf
@@ -117,6 +117,21 @@
Bağımsız değişken boş olmayan bir dize olmalıdır.
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.Async End yanlış kanalda çağrıldı.
@@ -292,6 +307,26 @@
Önyükleme güvenliği için güvenlik bağlama öğesi '{0}' üstünde belirtilmedi.
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.Güvenilir bir oturum oluşturma isteği, RM Destination tarafından reddedildi. {0} Kanal açılamadı.
@@ -1152,6 +1187,11 @@
Kullanıcı geri çağırması özel bir durum oluşturdu. Özel durum yığınını ve iç özel durumu denetleyerek başarısız olan geri çağırmayı belirleyin.
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.'{0}' adlı ve '{1}' ad alanına sahip ileti üst bilgisi, anlaşılan üst bilgi kümesinde yok.
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' yalnızca sunucu tarafında kullanılabilir, istemci tarafında kullanılamaz. Lütfen şu değerlerden birini kullanın: 'None, Basic, Client, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' yalnızca sunucu tarafında kullanılabilir, istemci tarafında kullanılamaz. Lütfen şu değerlerden birini kullanın: 'None, Basic, Client, Digest, Ntlm, Windows'.
@@ -4862,11 +4902,31 @@
XML verileri okunurken, dize içerik uzunluğu kotası üst sınırı ({0}) aşıldı. Bu kota, XML okuyucusu oluşturulurken kullanılan XmlDictionaryReaderQuotas nesnesindeki MaxStringContentLength özelliği değiştirilerek artırılabilir.
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter kapalı.
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.'{0}', geçersiz bir XmlNodeType.
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hans.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hans.xlf
index 2b4e6e090fd..4e549da341f 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hans.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hans.xlf
@@ -117,6 +117,21 @@
参数必须为非空字符串。
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.在错误的通道上调用了 Async End。
@@ -292,6 +307,26 @@
“{0}”中未指定引导安全性的安全性绑定元素。
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.创建可靠会话的请求已经被 RM Destination 拒绝。{0} 无法打开通道。
@@ -1152,6 +1187,11 @@
用户回调引发异常。请检查异常堆栈和内部异常,以确定失败的回调。
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.具有名称“{0}”和命名空间“{1}”的消息标头未位于已识别的标头集中。
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType“{0}”只能在服务器端使用,而不能在客户端使用。请改用以下值之一: None、Basic、Client、Digest、Ntlm、Windows。
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType“{0}”只能在服务器端使用,而不能在客户端使用。请改用以下值之一: None、Basic、Client、Digest、Ntlm、Windows。
@@ -4862,11 +4902,31 @@
读取 XML 数据时超过了最大字符串内容长度配额({0})。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter 已关闭。
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.“{0}”是无效的 XmlNodeType。
diff --git a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hant.xlf b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hant.xlf
index ba755efeae0..60f4a7b5bdd 100644
--- a/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hant.xlf
+++ b/src/System.ServiceModel.Primitives/src/Resources/xlf/Strings.zh-Hant.xlf
@@ -117,6 +117,21 @@
引數必須是非空白字串。
+
+ Specified argument was not in the set of valid values.
+ Specified argument was not in the set of valid values.
+
+
+
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+ Specified argument was out of the range of valid values. The value must be at least {0}.
+
+
+
+ Argument property '{0}' should not be null.
+ Argument property '{0}' should not be null.
+
+ Async End called on wrong channel.在錯誤的通道呼叫 Async End。
@@ -292,6 +307,26 @@
'{0}' 上未指定啟動安裝安全性之安全性繫結元素。
+
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+ The ByteStreamMessageEncoder does not support the MessageVersion '{0}'.
+
+
+
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+ The GetBody method for type '{0}' is not supported. Please call GetBody with a type 'Stream' or 'byte[]' instead.
+
+
+
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+ The reader is not positioned within the byte stream. The reader must be positioned within the element '{0}'.
+
+
+
+ WriteStartElement has already been called on this encoder.
+ WriteStartElement has already been called on this encoder.
+
+ The request to create a reliable session has been refused by the RM Destination. {0} The channel could not be opened.RM 目的地已拒絕建立可靠工作階段的要求。{0} 無法開啟通道。
@@ -1152,6 +1187,11 @@
使用者回呼擲回例外狀況。請檢查例外狀況堆疊及內部例外狀況,以判斷失敗的回呼。
+
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+ The GetBody method for 'byte[]' is not supported because the message contains a Stream.
+
+ The message header with name '{0}' and namespace '{1}' is not present in the set of understood headers.在已知的標頭集中沒有名稱為 '{0}' 且命名空間為 '{1}' 的訊息標頭。
@@ -1203,8 +1243,8 @@
- ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Client, Digest, Ntlm, Windows'.
- ClientCredentialType '{0}' 只能在伺服器端使用,而非用戶端。請使用下列其中一個值來取代 'None, Basic, Client, Digest, Ntlm, Windows'。
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' 只能在伺服器端使用,而非用戶端。請使用下列其中一個值來取代 'None, Basic, Client, Digest, Ntlm, Windows'。
@@ -4862,11 +4902,31 @@
讀取 XML 資料時已經超過最大字串內容長度配額 ({0})。在建立 XML 讀取器時變更 XmlDictionaryReaderQuotas 物件上使用的 MaxStringContentLength 屬性,便可以增加此配額。
+
+ The XmlReader is closed.
+ The XmlReader is closed.
+
+
+
+ Start element '{0}' expected. Found '{1}'.
+ Start element '{0}' expected. Found '{1}'.
+
+
+
+ No matching start tag for end element.
+ No matching start tag for end element.
+
+ The XmlWriter is closed.XmlWriter 已關閉。
+
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+ WriteState '{0}' not valid. Caller must write start element before serializing in contentOnly mode.
+
+ '{0}' is an invalid XmlNodeType.'{0}' 是無效的 XmlNodeType。
diff --git a/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj b/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj
index 72f157b96ab..44d90989bd6 100644
--- a/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj
+++ b/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj
@@ -25,6 +25,7 @@
+
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamBufferedMessageData.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamBufferedMessageData.cs
new file mode 100644
index 00000000000..f96777b65f2
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamBufferedMessageData.cs
@@ -0,0 +1,97 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.IO;
+using System.Runtime;
+
+namespace System.ServiceModel.Channels
+{
+ internal class ByteStreamBufferedMessageData
+ {
+ private ArraySegment _buffer;
+ private BufferManager _bufferManager;
+ private int _refCount;
+
+ public ByteStreamBufferedMessageData(ArraySegment buffer)
+ : this(buffer, null)
+ {
+ }
+
+ public ByteStreamBufferedMessageData(ArraySegment buffer, BufferManager bufferManager)
+ {
+ if (buffer.Array == null)
+ {
+ throw Fx.Exception.ArgumentNull(SRP.Format(SRP.ArgumentPropertyShouldNotBeNullError, "buffer.Array"));
+ }
+
+ _buffer = buffer;
+ _bufferManager = bufferManager;
+ _refCount = 0;
+ }
+
+ private bool IsClosed => _refCount < 0;
+
+ public ArraySegment Buffer
+ {
+ get
+ {
+ ThrowIfClosed();
+ return _buffer;
+ }
+ }
+
+ public void Open()
+ {
+ ThrowIfClosed();
+ _refCount++;
+ }
+
+ public void Close()
+ {
+ if (!IsClosed)
+ {
+ if (--_refCount <= 0)
+ {
+ if (_bufferManager != null && _buffer.Array != null)
+ {
+ _bufferManager.ReturnBuffer(_buffer.Array);
+ }
+
+ _bufferManager = null;
+ _buffer = default;
+ _refCount = int.MinValue;
+ }
+ }
+ }
+
+ public Stream ToStream() => new ByteStreamBufferedMessageDataStream(this);
+
+ private void ThrowIfClosed()
+ {
+ if (IsClosed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, this));
+ }
+ }
+
+ internal class ByteStreamBufferedMessageDataStream : MemoryStream
+ {
+ private readonly ByteStreamBufferedMessageData _byteStreamBufferedMessageData;
+
+ public ByteStreamBufferedMessageDataStream(ByteStreamBufferedMessageData byteStreamBufferedMessageData)
+ : base(byteStreamBufferedMessageData.Buffer.Array, byteStreamBufferedMessageData.Buffer.Offset, byteStreamBufferedMessageData.Buffer.Count, false)
+ {
+ _byteStreamBufferedMessageData = byteStreamBufferedMessageData;
+ _byteStreamBufferedMessageData.Open(); //increment the refCount
+ }
+
+ public override void Close()
+ {
+ _byteStreamBufferedMessageData.Close();
+ base.Close();
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessage.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessage.cs
new file mode 100644
index 00000000000..107f67ba29e
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessage.cs
@@ -0,0 +1,460 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.IO;
+using System.Runtime;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ public static class ByteStreamMessage
+ {
+ public static Message CreateMessage(Stream stream)
+ {
+ if (stream == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(stream));
+ }
+
+ return CreateMessage(stream, XmlDictionaryReaderQuotas.Max, true);
+ }
+
+ public static Message CreateMessage(ArraySegment buffer)
+ {
+ return CreateMessage(buffer, null);
+ }
+
+ public static Message CreateMessage(ArraySegment buffer, BufferManager bufferManager)
+ {
+ if (buffer.Array == null)
+ {
+ throw Fx.Exception.ArgumentNull("buffer.Array", SRP.Format(SRP.ArgumentPropertyShouldNotBeNullError, "buffer.Array"));
+ }
+
+ ByteStreamBufferedMessageData data = new ByteStreamBufferedMessageData(buffer, bufferManager);
+
+ // moveBodyReaderToContent is true, for consistency with the other implementations of Message (including the Message base class itself)
+ return CreateMessage(data, XmlDictionaryReaderQuotas.Max, true);
+ }
+
+ internal static Message CreateMessage(Stream stream, XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ {
+ return new InternalByteStreamMessage(stream, quotas, moveBodyReaderToContent);
+ }
+
+ internal static Message CreateMessage(ByteStreamBufferedMessageData bufferedMessageData, XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ {
+ return new InternalByteStreamMessage(bufferedMessageData, quotas, moveBodyReaderToContent);
+ }
+
+ internal static bool IsInternalByteStreamMessage(Message message)
+ {
+ Fx.Assert(message != null, "message should not be null");
+ return message is InternalByteStreamMessage;
+ }
+
+ internal class InternalByteStreamMessage : Message
+ {
+ private BodyWriter _bodyWriter;
+ private readonly MessageHeaders _headers;
+ private readonly MessageProperties _properties;
+ private XmlByteStreamReader _reader;
+ private bool _moveBodyReaderToContent;
+
+ public InternalByteStreamMessage(ByteStreamBufferedMessageData bufferedMessageData, XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ {
+ // Assign both writer and reader here so that we can CreateBufferedCopy without the need to
+ // abstract between a streamed or buffered message. We're protected here by the state on Message
+ // preventing both a read/write.
+
+ quotas = ByteStreamMessageUtility.EnsureQuotas(quotas);
+
+ _bodyWriter = new ByteStreamBufferedBodyWriter(bufferedMessageData);
+ _headers = new MessageHeaders(MessageVersion.None);
+ _properties = new MessageProperties();
+ _reader = new XmlBufferedByteStreamReader(bufferedMessageData, quotas);
+ _moveBodyReaderToContent = moveBodyReaderToContent;
+ }
+
+ public InternalByteStreamMessage(Stream stream, XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ {
+ // Assign both writer and reader here so that we can CreateBufferedCopy without the need to
+ // abstract between a streamed or buffered message. We're protected here by the state on Message
+ // preventing both a read/write on the same stream.
+
+ quotas = ByteStreamMessageUtility.EnsureQuotas(quotas);
+
+ _bodyWriter = StreamedBodyWriter.Create(stream);
+ _headers = new MessageHeaders(MessageVersion.None);
+ _properties = new MessageProperties();
+ _reader = XmlStreamedByteStreamReader.Create(stream, quotas);
+ _moveBodyReaderToContent = moveBodyReaderToContent;
+ }
+
+ private InternalByteStreamMessage(ByteStreamBufferedMessageData messageData, MessageHeaders headers, MessageProperties properties, XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ {
+ _headers = new MessageHeaders(headers);
+ _properties = new MessageProperties(properties);
+ _bodyWriter = new ByteStreamBufferedBodyWriter(messageData);
+ _reader = new XmlBufferedByteStreamReader(messageData, quotas);
+ _moveBodyReaderToContent = moveBodyReaderToContent;
+ }
+
+ public override MessageHeaders Headers
+ {
+ get
+ {
+ if (IsDisposed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, "message"));
+ }
+
+ return _headers;
+ }
+ }
+
+ public override bool IsEmpty
+ {
+ get
+ {
+ if (IsDisposed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, "message"));
+ }
+
+ return false;
+ }
+ }
+
+ public override bool IsFault
+ {
+ get
+ {
+ if (IsDisposed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, "message"));
+ }
+
+ return false;
+ }
+ }
+
+ public override MessageProperties Properties
+ {
+ get
+ {
+ if (IsDisposed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, "message"));
+ }
+
+ return _properties;
+ }
+ }
+
+ public override MessageVersion Version
+ {
+ get
+ {
+ if (IsDisposed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, "message"));
+ }
+
+ return MessageVersion.None;
+ }
+ }
+
+ protected override void OnBodyToString(XmlDictionaryWriter writer)
+ {
+ if (_bodyWriter.IsBuffered)
+ {
+ _bodyWriter.WriteBodyContents(writer);
+ }
+ else
+ {
+ writer.WriteString(SRP.MessageBodyIsStream);
+ }
+ }
+
+ protected override void OnClose()
+ {
+ Exception ex = null;
+ try
+ {
+ base.OnClose();
+ }
+ catch (Exception e)
+ {
+ if (Fx.IsFatal(e))
+ {
+ throw;
+ }
+ ex = e;
+ }
+
+ try
+ {
+ if (_properties != null)
+ {
+ _properties.Dispose();
+ }
+ }
+ catch (Exception e)
+ {
+ if (Fx.IsFatal(e))
+ {
+ throw;
+ }
+ if (ex == null)
+ {
+ ex = e;
+ }
+ }
+
+ try
+ {
+ if (_reader != null)
+ {
+ _reader.Close();
+ }
+ }
+ catch (Exception e)
+ {
+ if (Fx.IsFatal(e))
+ {
+ throw;
+ }
+ if (ex == null)
+ {
+ ex = e;
+ }
+ }
+
+ if (ex != null)
+ {
+ throw Fx.Exception.AsError(ex);
+ }
+
+ _bodyWriter = null;
+ }
+
+ protected override MessageBuffer OnCreateBufferedCopy(int maxBufferSize)
+ {
+ ByteStreamBufferedBodyWriter bufferedBodyWriter;
+ if (_bodyWriter.IsBuffered)
+ {
+ // Can hand this off in buffered case without making a new one.
+ bufferedBodyWriter = (ByteStreamBufferedBodyWriter)_bodyWriter;
+ }
+ else
+ {
+ bufferedBodyWriter = (ByteStreamBufferedBodyWriter)_bodyWriter.CreateBufferedCopy(maxBufferSize);
+ }
+
+ // Protected by Message state to be called only once.
+ _bodyWriter = null;
+ return new ByteStreamMessageBuffer(bufferedBodyWriter.MessageData, _headers, _properties, _reader.Quotas, _moveBodyReaderToContent);
+ }
+
+ protected override T OnGetBody(XmlDictionaryReader reader)
+ {
+ Fx.Assert(reader is XmlByteStreamReader, "reader should be XmlByteStreamReader");
+ if (IsDisposed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, "message"));
+ }
+
+ Type typeT = typeof(T);
+ if (typeof(Stream) == typeT)
+ {
+ Stream stream = (reader as XmlByteStreamReader).ToStream();
+ reader.Close();
+ return (T)(object)stream;
+ }
+ else if (typeof(byte[]) == typeT)
+ {
+ byte[] buffer = (reader as XmlByteStreamReader).ToByteArray();
+ reader.Close();
+ return (T)(object)buffer;
+ }
+
+ throw Fx.Exception.AsError(
+ new NotSupportedException(SRP.Format(SRP.ByteStreamMessageGetTypeNotSupported, typeT.FullName)));
+ }
+
+ protected override XmlDictionaryReader OnGetReaderAtBodyContents()
+ {
+ XmlDictionaryReader r = _reader;
+ _reader = null;
+
+ if ((r != null) && _moveBodyReaderToContent)
+ {
+ r.MoveToContent();
+ }
+
+ return r;
+ }
+
+ protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
+ {
+ _bodyWriter.WriteBodyContents(writer);
+ }
+
+ internal class ByteStreamBufferedBodyWriter : BodyWriter
+ {
+ public ByteStreamBufferedBodyWriter(ByteStreamBufferedMessageData bufferedMessageData)
+ : base(true)
+ {
+ MessageData = bufferedMessageData;
+ }
+
+ internal ByteStreamBufferedMessageData MessageData { get; }
+
+ protected override BodyWriter OnCreateBufferedCopy(int maxBufferSize)
+ {
+ // Never called because when copying a Buffered message, we simply hand off the existing BodyWriter
+ // to the new message.
+ Fx.Assert(false, "This is never called");
+ return null;
+ }
+
+ protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
+ {
+ writer.WriteStartElement(ByteStreamMessageUtility.StreamElementName, string.Empty);
+ writer.WriteBase64(MessageData.Buffer.Array, MessageData.Buffer.Offset, MessageData.Buffer.Count);
+ writer.WriteEndElement();
+ }
+ }
+
+ internal abstract class StreamedBodyWriter : BodyWriter
+ {
+ private StreamedBodyWriter()
+ : base(false)
+ {
+ }
+
+ public static StreamedBodyWriter Create(Stream stream) => new StreamBasedStreamedBodyWriter(stream);
+
+ // OnCreateBufferedCopy / OnWriteBodyContents can only be called once - protected by state on Message (either copied or written once)
+ protected override BodyWriter OnCreateBufferedCopy(int maxBufferSize)
+ {
+ using (BufferManagerOutputStream bufferedStream = new BufferManagerOutputStream(SRP.MaxReceivedMessageSizeExceeded, maxBufferSize))
+ {
+ using (XmlDictionaryWriter writer = new XmlByteStreamWriter(bufferedStream, true))
+ {
+ OnWriteBodyContents(writer);
+ writer.Flush();
+ byte[] bytesArray = bufferedStream.ToArray(out int size);
+ ByteStreamBufferedMessageData bufferedMessageData = new ByteStreamBufferedMessageData(new ArraySegment(bytesArray, 0, size));
+ return new ByteStreamBufferedBodyWriter(bufferedMessageData);
+ }
+ }
+ }
+
+ // OnCreateBufferedCopy / OnWriteBodyContents can only be called once - protected by state on Message (either copied or written once)
+ protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
+ {
+ writer.WriteStartElement(ByteStreamMessageUtility.StreamElementName, string.Empty);
+ writer.WriteValue(new ByteStreamStreamProvider(GetStream()));
+ writer.WriteEndElement();
+ }
+
+ protected abstract Stream GetStream();
+
+ internal class ByteStreamStreamProvider : IStreamProvider
+ {
+ private readonly Stream _stream;
+
+ internal ByteStreamStreamProvider(Stream stream)
+ {
+ _stream = stream;
+ }
+
+ public Stream GetStream() => _stream;
+
+ public void ReleaseStream(Stream stream)
+ {
+ //Noop
+ }
+ }
+
+ internal class StreamBasedStreamedBodyWriter : StreamedBodyWriter
+ {
+ private readonly Stream _stream;
+
+ public StreamBasedStreamedBodyWriter(Stream stream)
+ {
+ _stream = stream;
+ }
+
+ protected override Stream GetStream() => _stream;
+ }
+ }
+
+ internal class ByteStreamMessageBuffer : MessageBuffer
+ {
+ private bool _closed;
+ private MessageHeaders _headers;
+ private ByteStreamBufferedMessageData _messageData;
+ private MessageProperties _properties;
+ private XmlDictionaryReaderQuotas _quotas;
+ private bool _moveBodyReaderToContent;
+
+ public ByteStreamMessageBuffer(ByteStreamBufferedMessageData messageData, MessageHeaders headers, MessageProperties properties, XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ : base()
+ {
+ _messageData = messageData;
+ _headers = new MessageHeaders(headers);
+ _properties = new MessageProperties(properties);
+ _quotas = new XmlDictionaryReaderQuotas();
+ quotas.CopyTo(_quotas);
+ _moveBodyReaderToContent = moveBodyReaderToContent;
+
+ _messageData.Open();
+ }
+
+ public override int BufferSize => _messageData.Buffer.Count;
+
+ private object ThisLock { get; } = new object();
+
+ public override void Close()
+ {
+ lock (ThisLock)
+ {
+ if (!_closed)
+ {
+ _closed = true;
+ _headers = null;
+
+ if (_properties != null)
+ {
+ _properties.Dispose();
+ _properties = null;
+ }
+
+ _messageData.Close();
+ _messageData = null;
+ _quotas = null;
+ }
+ }
+ }
+
+ public override Message CreateMessage()
+ {
+ lock (ThisLock)
+ {
+ if (_closed)
+ {
+ throw Fx.Exception.ObjectDisposed(SRP.Format(SRP.ObjectDisposed, "message"));
+ }
+
+ return new InternalByteStreamMessage(_messageData, _headers, _properties, _quotas, _moveBodyReaderToContent);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncoder.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncoder.cs
new file mode 100644
index 00000000000..1ede0b24719
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncoder.cs
@@ -0,0 +1,168 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.IO;
+using System.Runtime;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ internal class ByteStreamMessageEncoder : MessageEncoder
+ {
+ private readonly string _maxSentMessageSizeExceededResourceString;
+ private readonly XmlDictionaryReaderQuotas _quotas;
+ private readonly XmlDictionaryReaderQuotas _bufferedReadReaderQuotas;
+
+ // Specifies if this encoder produces Messages that provide a body reader (with the
+ // Message.GetReaderAtBodyContents() method) positioned on content.
+ private readonly bool _moveBodyReaderToContent;
+
+ public ByteStreamMessageEncoder(XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ {
+ _quotas = new XmlDictionaryReaderQuotas();
+ quotas.CopyTo(_quotas);
+
+ _bufferedReadReaderQuotas = EncoderHelpers.GetBufferedReadQuotas(_quotas);
+
+ _maxSentMessageSizeExceededResourceString = SRP.MaxSentMessageSizeExceeded;
+ _moveBodyReaderToContent = moveBodyReaderToContent;
+ }
+
+ public override string ContentType => null;
+
+ public override string MediaType => null;
+
+ public override MessageVersion MessageVersion => MessageVersion.None;
+
+ public override bool IsContentTypeSupported(string contentType) => true;
+
+ public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
+ {
+ if (stream == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(stream));
+ }
+
+ Message message = ByteStreamMessage.CreateMessage(stream, _quotas, _moveBodyReaderToContent);
+ message.Properties.Encoder = this;
+
+ return message;
+ }
+
+ public override ValueTask ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType)
+ {
+ return new ValueTask(ReadMessage(stream, maxSizeOfHeaders, contentType));
+ }
+
+ public override Message ReadMessage(ArraySegment buffer, BufferManager bufferManager, string contentType)
+ {
+ if (buffer.Array == null)
+ {
+ throw Fx.Exception.ArgumentNull("buffer.Array");
+ }
+
+ if (bufferManager == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(bufferManager));
+ }
+
+ ByteStreamBufferedMessageData messageData = new ByteStreamBufferedMessageData(buffer, bufferManager);
+
+ Message message = ByteStreamMessage.CreateMessage(messageData, _bufferedReadReaderQuotas, _moveBodyReaderToContent);
+ message.Properties.Encoder = this;
+
+ return message;
+ }
+
+ public override void WriteMessage(Message message, Stream stream)
+ {
+ if (message == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(message));
+ }
+
+ if (stream == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(stream));
+ }
+
+ ThrowIfMismatchedMessageVersion(message);
+ message.Properties.Encoder = this;
+
+ using (XmlDictionaryWriter writer = new XmlByteStreamWriter(stream, false))
+ {
+ message.WriteMessage(writer);
+ writer.Flush();
+ }
+ }
+
+ public override async ValueTask WriteMessageAsync(Message message, Stream stream)
+ {
+ if (message == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(message));
+ }
+
+ if (stream == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(stream));
+ }
+
+ ThrowIfMismatchedMessageVersion(message);
+ message.Properties.Encoder = this;
+
+ using (XmlDictionaryWriter writer = new XmlByteStreamWriter(stream, false))
+ {
+ await message.WriteMessageAsync(writer);
+ await writer.FlushAsync();
+ }
+ }
+
+ public override ArraySegment WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
+ {
+ if (message == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(message));
+ }
+
+ if (bufferManager == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(bufferManager));
+ }
+
+ if (maxMessageSize < 0)
+ {
+ throw Fx.Exception.ArgumentOutOfRange(nameof(maxMessageSize), maxMessageSize, SRP.Format(SRP.ArgumentOutOfMinRange, 0));
+ }
+
+ if (messageOffset < 0)
+ {
+ throw Fx.Exception.ArgumentOutOfRange(nameof(messageOffset), messageOffset, SRP.Format(SRP.ArgumentOutOfMinRange, 0));
+ }
+
+ ThrowIfMismatchedMessageVersion(message);
+ message.Properties.Encoder = this;
+
+ ArraySegment messageBuffer;
+
+ using (BufferManagerOutputStream stream = new BufferManagerOutputStream(_maxSentMessageSizeExceededResourceString, 0, maxMessageSize, bufferManager))
+ {
+ stream.Skip(messageOffset);
+ using (XmlDictionaryWriter writer = new XmlByteStreamWriter(stream, true))
+ {
+ message.WriteMessage(writer);
+ writer.Flush();
+ byte[] bytes = stream.ToArray(out int size);
+ messageBuffer = new ArraySegment(bytes, messageOffset, size - messageOffset);
+ }
+ }
+
+ return messageBuffer;
+ }
+
+ public override string ToString() => ByteStreamMessageUtility.EncoderName;
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncoderFactory.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncoderFactory.cs
new file mode 100644
index 00000000000..7dd2a25d250
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncoderFactory.cs
@@ -0,0 +1,23 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ internal class ByteStreamMessageEncoderFactory : MessageEncoderFactory
+ {
+ private readonly ByteStreamMessageEncoder _encoder;
+
+ public ByteStreamMessageEncoderFactory(XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
+ {
+ _encoder = new ByteStreamMessageEncoder(quotas, moveBodyReaderToContent);
+ }
+
+ public override MessageEncoder Encoder => _encoder;
+
+ public override MessageVersion MessageVersion => _encoder.MessageVersion;
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncodingBindingElement.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncodingBindingElement.cs
new file mode 100644
index 00000000000..d7a6f4afa06
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageEncodingBindingElement.cs
@@ -0,0 +1,99 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.Runtime;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ public sealed class ByteStreamMessageEncodingBindingElement : MessageEncodingBindingElement
+ {
+ private readonly XmlDictionaryReaderQuotas _readerQuotas;
+ private bool _moveBodyReaderToContent;
+
+ public ByteStreamMessageEncodingBindingElement() : this((XmlDictionaryReaderQuotas)null)
+ {
+ }
+
+ public ByteStreamMessageEncodingBindingElement(XmlDictionaryReaderQuotas quota)
+ {
+ _readerQuotas = new XmlDictionaryReaderQuotas();
+ if (quota != null)
+ {
+ quota.CopyTo(_readerQuotas);
+ }
+ }
+
+ private ByteStreamMessageEncodingBindingElement(ByteStreamMessageEncodingBindingElement byteStreamEncoderBindingElement)
+ : this(byteStreamEncoderBindingElement._readerQuotas)
+ {
+ }
+
+ public override MessageVersion MessageVersion
+ {
+ get
+ {
+ return MessageVersion.None;
+ }
+ set
+ {
+ if (value != MessageVersion.None)
+ {
+ throw Fx.Exception.Argument(nameof(MessageVersion), SRP.Format(SRP.ByteStreamMessageEncoderMessageVersionNotSupported, value));
+ }
+ }
+ }
+
+ public XmlDictionaryReaderQuotas ReaderQuotas
+ {
+ get
+ {
+ return _readerQuotas;
+ }
+ set
+ {
+ if (value == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(ReaderQuotas));
+ }
+
+ value.CopyTo(_readerQuotas);
+ }
+ }
+
+ public override bool CanBuildChannelFactory(BindingContext context)
+ {
+ return InternalCanBuildChannelFactory(context);
+ }
+
+ public override IChannelFactory BuildChannelFactory(BindingContext context)
+ {
+ return InternalBuildChannelFactory(context);
+ }
+
+ public override T GetProperty(BindingContext context)
+ {
+ if (context == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(context));
+ }
+
+ // When this encoder is nested inside the WebMessageEncoder (the WebHttpBinding raw path), the
+ // body reader must be positioned on content. The WebMessageEncoder signals this by querying for
+ // its own encoder type. Match by name to avoid a reference to System.ServiceModel.Web.
+ if (typeof(T).FullName == "System.ServiceModel.Channels.WebMessageEncoderFactory+WebMessageEncoder")
+ {
+ _moveBodyReaderToContent = true;
+ return null;
+ }
+
+ return base.GetProperty(context);
+ }
+
+ public override MessageEncoderFactory CreateMessageEncoderFactory() => new ByteStreamMessageEncoderFactory(_readerQuotas, _moveBodyReaderToContent);
+
+ public override BindingElement Clone() => new ByteStreamMessageEncodingBindingElement(this);
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageUtility.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageUtility.cs
new file mode 100644
index 00000000000..f3c4c24349f
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/ByteStreamMessageUtility.cs
@@ -0,0 +1,52 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.Runtime;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ internal static class ByteStreamMessageUtility
+ {
+ public const string StreamElementName = "Binary";
+ public const string XmlNamespace = "http://www.w3.org/XML/1998/namespace";
+ public const string XmlNamespaceNamespace = "http://www.w3.org/2000/xmlns/";
+
+ // used when doing message tracing
+ internal const string EncoderName = "ByteStreamMessageEncoder";
+
+ internal static void EnsureByteBoundaries(byte[] buffer, int index, int count, bool isRead)
+ {
+ if (buffer == null)
+ {
+ throw Fx.Exception.ArgumentNull(nameof(buffer));
+ }
+
+ if (index < 0)
+ {
+ throw Fx.Exception.ArgumentOutOfRange(nameof(index), index, SRP.Format(SRP.ArgumentOutOfMinRange, 0));
+ }
+
+ // we explicitly allow the case for index = 0, buffer.Length = 0 and count = 0 when it is write
+ // Note that we rely on the last check of count > buffer.Length - index to cover count > 0 && index == buffer.Length case
+ if (index > buffer.Length || (isRead && index == buffer.Length))
+ {
+ throw Fx.Exception.ArgumentOutOfRange(nameof(index), index, SRP.Format(SRP.OffsetExceedsBufferSize, buffer.Length));
+ }
+
+ if (count < 0)
+ {
+ throw Fx.Exception.ArgumentOutOfRange(nameof(count), count, SRP.Format(SRP.ArgumentOutOfMinRange, 0));
+ }
+
+ if (count > buffer.Length - index)
+ {
+ throw Fx.Exception.ArgumentOutOfRange(nameof(count), count, SRP.Format(SRP.SizeExceedsRemainingBufferSpace, buffer.Length - index));
+ }
+ }
+
+ internal static XmlDictionaryReaderQuotas EnsureQuotas(XmlDictionaryReaderQuotas quotas) => quotas ?? EncoderDefaults.ReaderQuotas;
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlBufferedByteStreamReader.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlBufferedByteStreamReader.cs
new file mode 100644
index 00000000000..bdecd6ffb35
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlBufferedByteStreamReader.cs
@@ -0,0 +1,84 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.IO;
+using System.Runtime;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ internal class XmlBufferedByteStreamReader : XmlByteStreamReader
+ {
+ private ByteStreamBufferedMessageData _bufferedMessageData;
+ private int _offset;
+
+ public XmlBufferedByteStreamReader(ByteStreamBufferedMessageData bufferedMessageData, XmlDictionaryReaderQuotas quotas) : base(quotas)
+ {
+ Fx.Assert(bufferedMessageData != null, "bufferedMessageData is null");
+ _bufferedMessageData = bufferedMessageData;
+ _bufferedMessageData.Open();
+
+ _offset = bufferedMessageData.Buffer.Offset;
+ }
+
+ protected override void OnClose()
+ {
+ _bufferedMessageData.Close();
+ _bufferedMessageData = null;
+ _offset = 0;
+ base.OnClose();
+ }
+
+ public override int ReadContentAsBase64(byte[] buffer, int index, int count)
+ {
+ EnsureInContent();
+ ByteStreamMessageUtility.EnsureByteBoundaries(buffer, index, count, true);
+
+ if (count == 0)
+ {
+ return 0;
+ }
+
+ int bytesToCopy = Math.Min(_bufferedMessageData.Buffer.Count - _offset, count);
+
+ if (bytesToCopy == 0)
+ {
+ _position = ReaderPosition.EndElement;
+ return 0;
+ }
+
+ Buffer.BlockCopy(_bufferedMessageData.Buffer.Array, _offset, buffer, index, bytesToCopy);
+ _offset += bytesToCopy;
+
+ return bytesToCopy;
+ }
+
+ protected override byte[] OnToByteArray()
+ {
+ int bytesToCopy = _bufferedMessageData.Buffer.Count;
+ byte[] buffer = new byte[bytesToCopy];
+ Buffer.BlockCopy(_bufferedMessageData.Buffer.Array, _bufferedMessageData.Buffer.Offset, buffer, 0, bytesToCopy);
+ return buffer;
+ }
+
+ protected override Stream OnToStream()
+ {
+ return _bufferedMessageData.ToStream();
+ }
+
+ public override bool TryGetBase64ContentLength(out int length)
+ {
+ if (!IsClosed)
+ {
+ // in ByteStream encoder, we're not concerned about individual xml nodes
+ // therefore we can just return the entire segment of the buffer we're using in this reader.
+ length = _bufferedMessageData.Buffer.Count;
+ return true;
+ }
+ length = -1;
+ return false;
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlByteStreamReader.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlByteStreamReader.cs
new file mode 100644
index 00000000000..b71261458cc
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlByteStreamReader.cs
@@ -0,0 +1,292 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.IO;
+using System.Runtime;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ internal abstract class XmlByteStreamReader : XmlDictionaryReader
+ {
+ private string _base64StringValue;
+ private NameTable _nameTable;
+ private bool _readBase64AsString;
+
+ protected ReaderPosition _position;
+ protected XmlDictionaryReaderQuotas _quotas;
+
+ protected XmlByteStreamReader(XmlDictionaryReaderQuotas quotas)
+ {
+ _quotas = quotas;
+ _position = ReaderPosition.None;
+ }
+
+ public override int AttributeCount => 0;
+
+ public override string BaseURI => string.Empty;
+
+ public override bool CanCanonicalize => false;
+
+ public override bool CanReadBinaryContent => true;
+
+ public override bool CanReadValueChunk => false;
+
+ public override bool CanResolveEntity => false;
+
+ public override int Depth => _position == ReaderPosition.Content ? 1 : 0;
+
+ public override bool EOF => _position == ReaderPosition.EOF;
+
+ public override bool HasAttributes => false;
+
+ public override bool HasValue => _position == ReaderPosition.Content;
+
+ public override bool IsDefault => false;
+
+ public override bool IsEmptyElement => false;
+
+ public override string LocalName => _position == ReaderPosition.StartElement ? ByteStreamMessageUtility.StreamElementName : null;
+
+ public override void MoveToStartElement()
+ {
+ base.MoveToStartElement();
+ _position = ReaderPosition.StartElement;
+ }
+
+ public override XmlNameTable NameTable
+ {
+ get
+ {
+ if (_nameTable == null)
+ {
+ _nameTable = new NameTable();
+ _nameTable.Add(ByteStreamMessageUtility.StreamElementName);
+ }
+
+ return _nameTable;
+ }
+ }
+
+ public override string NamespaceURI => string.Empty;
+
+ public override XmlNodeType NodeType
+ {
+ get
+ {
+ switch (_position)
+ {
+ case ReaderPosition.StartElement:
+ return XmlNodeType.Element;
+ case ReaderPosition.Content:
+ return XmlNodeType.Text;
+ case ReaderPosition.EndElement:
+ return XmlNodeType.EndElement;
+ default:
+ // and StreamPosition.EOF
+ return XmlNodeType.None;
+ }
+ }
+ }
+
+ public override string Prefix => string.Empty;
+
+ public override XmlDictionaryReaderQuotas Quotas => _quotas;
+
+ public override ReadState ReadState
+ {
+ get
+ {
+ switch (_position)
+ {
+ case ReaderPosition.None:
+ return ReadState.Initial;
+ case ReaderPosition.StartElement:
+ case ReaderPosition.Content:
+ case ReaderPosition.EndElement:
+ return ReadState.Interactive;
+ case ReaderPosition.EOF:
+ return ReadState.Closed;
+ default:
+ Fx.Assert("Unknown ReadState hit in XmlByteStreamReader");
+ return ReadState.Error;
+ }
+ }
+ }
+
+ public override string Value
+ {
+ get
+ {
+ switch (_position)
+ {
+ case ReaderPosition.Content:
+ if (!_readBase64AsString)
+ {
+ _base64StringValue = Convert.ToBase64String(ReadContentAsBase64());
+ _readBase64AsString = true;
+ }
+ return _base64StringValue;
+
+ default:
+ return string.Empty;
+ }
+ }
+ }
+
+ public override void Close()
+ {
+ if (!IsClosed)
+ {
+ try
+ {
+ OnClose();
+ }
+ finally
+ {
+ _position = ReaderPosition.EOF;
+ IsClosed = true;
+ }
+ }
+ }
+
+ protected bool IsClosed { get; private set; }
+
+ protected virtual void OnClose()
+ {
+ }
+
+ public override string GetAttribute(int i) => throw Fx.Exception.ArgumentOutOfRange(nameof(i), i, SRP.ArgumentNotInSetOfValidValues);
+
+ public override string GetAttribute(string name, string namespaceURI) => null;
+
+ public override string GetAttribute(string name) => null;
+
+ public override string LookupNamespace(string prefix)
+ {
+ if (prefix == string.Empty)
+ {
+ return string.Empty;
+ }
+ else if (prefix == "xml")
+ {
+ return ByteStreamMessageUtility.XmlNamespace;
+ }
+ else if (prefix == "xmlns")
+ {
+ return ByteStreamMessageUtility.XmlNamespaceNamespace;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public override bool MoveToAttribute(string name, string ns) => false;
+
+ public override bool MoveToAttribute(string name) => false;
+
+ public override bool MoveToElement()
+ {
+ if (_position == ReaderPosition.None)
+ {
+ _position = ReaderPosition.StartElement;
+ return true;
+ }
+
+ return false;
+ }
+
+ public override bool MoveToFirstAttribute() => false;
+
+ public override bool MoveToNextAttribute() => false;
+
+ public override bool Read()
+ {
+ switch (_position)
+ {
+ case ReaderPosition.None:
+ _position = ReaderPosition.StartElement;
+ return true;
+ case ReaderPosition.StartElement:
+ _position = ReaderPosition.Content;
+ return true;
+ case ReaderPosition.Content:
+ _position = ReaderPosition.EndElement;
+ return true;
+ case ReaderPosition.EndElement:
+ _position = ReaderPosition.EOF;
+ return false;
+ case ReaderPosition.EOF:
+ return false;
+ default:
+ // we should never get here
+ // it means we managed to get into some unknown position in the stream
+ Fx.Assert(false, "Unknown read position in XmlByteStreamReader");
+ return false;
+ }
+ }
+
+ public override bool ReadAttributeValue() => false;
+
+ public override abstract int ReadContentAsBase64(byte[] buffer, int index, int count);
+
+ public override int ReadContentAsBinHex(byte[] buffer, int index, int count) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void ResolveEntity() => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public byte[] ToByteArray()
+ {
+ if (IsClosed)
+ {
+ throw Fx.Exception.AsError(
+ new ObjectDisposedException(SRP.XmlReaderClosed));
+ }
+
+ return OnToByteArray();
+ }
+
+ protected abstract byte[] OnToByteArray();
+
+ public Stream ToStream()
+ {
+ if (IsClosed)
+ {
+ throw Fx.Exception.AsError(
+ new ObjectDisposedException(SRP.XmlReaderClosed));
+ }
+
+ return OnToStream();
+ }
+
+ protected abstract Stream OnToStream();
+
+ protected void EnsureInContent()
+ {
+ // This method is only being called from XmlByteStreamReader.ReadContentAsBase64.
+ // We don't block if the position is None or StartElement since we want our XmlByteStreamReader
+ // to be a little bit smarter when people just to access the content of the ByteStreamMessage.
+ if (_position == ReaderPosition.EndElement
+ || _position == ReaderPosition.EOF)
+ {
+ throw Fx.Exception.AsError(
+ new InvalidOperationException(SRP.Format(SRP.ByteStreamReaderNotInByteStream, ByteStreamMessageUtility.StreamElementName)));
+ }
+ else
+ {
+ _position = ReaderPosition.Content;
+ }
+ }
+
+ protected enum ReaderPosition
+ {
+ None,
+ StartElement,
+ Content,
+ EndElement,
+ EOF
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlByteStreamWriter.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlByteStreamWriter.cs
new file mode 100644
index 00000000000..7b03b926c3b
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlByteStreamWriter.cs
@@ -0,0 +1,252 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.IO;
+using System.Runtime;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ internal sealed class XmlByteStreamWriter : XmlDictionaryWriter
+ {
+ private readonly bool _ownsStream;
+ private ByteStreamWriterState _state;
+ private Stream _stream;
+ private XmlWriterSettings _settings;
+
+ public XmlByteStreamWriter(Stream stream, bool ownsStream)
+ {
+ Fx.Assert(stream != null, "stream is null");
+
+ _stream = stream;
+ _ownsStream = ownsStream;
+ _state = ByteStreamWriterState.Start;
+ }
+
+ public override WriteState WriteState => ByteStreamWriterStateToWriteState(_state);
+
+ public override XmlWriterSettings Settings
+ {
+ get
+ {
+ if (_settings == null)
+ {
+ XmlWriterSettings newSettings = new XmlWriterSettings()
+ {
+ Async = true
+ };
+
+ Interlocked.CompareExchange(ref _settings, newSettings, null);
+ }
+
+ return _settings;
+ }
+ }
+
+ public override void Close()
+ {
+ if (_state != ByteStreamWriterState.Closed)
+ {
+ try
+ {
+ if (_ownsStream)
+ {
+ _stream.Close();
+ }
+ _stream = null;
+ }
+ finally
+ {
+ _state = ByteStreamWriterState.Closed;
+ }
+ }
+ }
+
+ private void EnsureWriteBase64State(byte[] buffer, int index, int count)
+ {
+ ThrowIfClosed();
+ ByteStreamMessageUtility.EnsureByteBoundaries(buffer, index, count, false);
+
+ if (_state != ByteStreamWriterState.Content && _state != ByteStreamWriterState.StartElement)
+ {
+ throw Fx.Exception.AsError(
+ new InvalidOperationException(SRP.Format(SRP.XmlWriterMustBeInElement, ByteStreamWriterStateToWriteState(_state))));
+ }
+ }
+
+ public override void Flush()
+ {
+ ThrowIfClosed();
+ _stream.Flush();
+ }
+
+ public override Task FlushAsync()
+ {
+ ThrowIfClosed();
+ return _stream.FlushAsync();
+ }
+
+ private void InternalWriteEndElement()
+ {
+ ThrowIfClosed();
+ if (_state != ByteStreamWriterState.StartElement && _state != ByteStreamWriterState.Content)
+ {
+ throw Fx.Exception.AsError(
+ new InvalidOperationException(SRP.XmlUnexpectedEndElement));
+ }
+
+ _state = ByteStreamWriterState.EndElement;
+ }
+
+ public override string LookupPrefix(string ns)
+ {
+ if (ns == string.Empty)
+ {
+ return string.Empty;
+ }
+ else if (ns == ByteStreamMessageUtility.XmlNamespace)
+ {
+ return "xml";
+ }
+ else if (ns == ByteStreamMessageUtility.XmlNamespaceNamespace)
+ {
+ return "xmlns";
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public override void WriteBase64(byte[] buffer, int index, int count)
+ {
+ EnsureWriteBase64State(buffer, index, count);
+ _stream.Write(buffer, index, count);
+ _state = ByteStreamWriterState.Content;
+ }
+
+ public override async Task WriteBase64Async(byte[] buffer, int index, int count)
+ {
+ EnsureWriteBase64State(buffer, index, count);
+ await _stream.WriteAsync(buffer, index, count);
+ _state = ByteStreamWriterState.Content;
+ }
+
+ public override void WriteCData(string text) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteCharEntity(char ch) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteChars(char[] buffer, int index, int count) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteComment(string text) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteDocType(string name, string pubid, string sysid, string subset) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteEndAttribute() => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteEndDocument()
+ {
+ }
+
+ public override void WriteEndElement()
+ {
+ InternalWriteEndElement();
+ }
+
+ public override void WriteEntityRef(string name) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteFullEndElement()
+ {
+ InternalWriteEndElement();
+ }
+
+ public override void WriteProcessingInstruction(string name, string text) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteRaw(string data) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteRaw(char[] buffer, int index, int count) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteStartAttribute(string prefix, string localName, string ns) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteStartDocument(bool standalone)
+ {
+ ThrowIfClosed();
+ }
+
+ public override void WriteStartDocument()
+ {
+ ThrowIfClosed();
+ }
+
+ public override void WriteStartElement(string prefix, string localName, string ns)
+ {
+ ThrowIfClosed();
+ if (_state != ByteStreamWriterState.Start)
+ {
+ throw Fx.Exception.AsError(
+ new InvalidOperationException(SRP.ByteStreamWriteStartElementAlreadyCalled));
+ }
+
+ if (!string.IsNullOrEmpty(prefix) || !string.IsNullOrEmpty(ns) || localName != ByteStreamMessageUtility.StreamElementName)
+ {
+ throw Fx.Exception.AsError(
+ new XmlException(SRP.Format(SRP.XmlStartElementNameExpected, ByteStreamMessageUtility.StreamElementName, localName)));
+ }
+
+ _state = ByteStreamWriterState.StartElement;
+ }
+
+ public override void WriteString(string text)
+ {
+ // no state checks here - WriteBase64 will take care of this.
+ byte[] buffer = Convert.FromBase64String(text);
+ WriteBase64(buffer, 0, buffer.Length);
+ }
+
+ public override void WriteSurrogateCharEntity(char lowChar, char highChar) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ public override void WriteWhitespace(string ws) => throw Fx.Exception.AsError(new NotSupportedException());
+
+ private void ThrowIfClosed()
+ {
+ if (_state == ByteStreamWriterState.Closed)
+ {
+ throw Fx.Exception.AsError(
+ new InvalidOperationException(SRP.XmlWriterClosed));
+ }
+ }
+
+ private static WriteState ByteStreamWriterStateToWriteState(ByteStreamWriterState byteStreamWriterState)
+ {
+ // Converts the internal ByteStreamWriterState to an Xml WriteState
+ switch (byteStreamWriterState)
+ {
+ case ByteStreamWriterState.Start:
+ return WriteState.Start;
+ case ByteStreamWriterState.StartElement:
+ return WriteState.Element;
+ case ByteStreamWriterState.Content:
+ return WriteState.Content;
+ case ByteStreamWriterState.EndElement:
+ return WriteState.Element;
+ case ByteStreamWriterState.Closed:
+ return WriteState.Closed;
+ default:
+ return WriteState.Error;
+ }
+ }
+
+ private enum ByteStreamWriterState
+ {
+ Start,
+ StartElement,
+ Content,
+ EndElement,
+ Closed
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlStreamedByteStreamReader.cs b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlStreamedByteStreamReader.cs
new file mode 100644
index 00000000000..95af099aeca
--- /dev/null
+++ b/src/System.ServiceModel.Primitives/src/System/ServiceModel/Channels/XmlStreamedByteStreamReader.cs
@@ -0,0 +1,85 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+
+using System.IO;
+using System.Runtime;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ internal sealed class XmlStreamedByteStreamReader : XmlByteStreamReader
+ {
+ private Stream _stream;
+
+ private XmlStreamedByteStreamReader(Stream stream, XmlDictionaryReaderQuotas quotas)
+ : base(quotas)
+ {
+ Fx.Assert(stream != null, "The 'stream' parameter should not be null.");
+
+ _stream = stream;
+ }
+
+ public static XmlStreamedByteStreamReader Create(Stream stream, XmlDictionaryReaderQuotas quotas) => new XmlStreamedByteStreamReader(stream, quotas);
+
+ protected override void OnClose()
+ {
+ _stream = null;
+ base.OnClose();
+ }
+
+ public override int ReadContentAsBase64(byte[] buffer, int index, int count)
+ {
+ EnsureInContent();
+ ByteStreamMessageUtility.EnsureByteBoundaries(buffer, index, count, true);
+
+ if (count == 0)
+ {
+ return 0;
+ }
+
+ int numBytesRead = _stream.Read(buffer, index, count);
+ if (numBytesRead == 0)
+ {
+ _position = ReaderPosition.EndElement;
+ }
+
+ return numBytesRead;
+ }
+
+ protected override byte[] OnToByteArray()
+ {
+ throw Fx.Exception.AsError(
+ new InvalidOperationException(SRP.GetByteArrayFromStreamContentNotAllowed));
+ }
+
+ protected override Stream OnToStream()
+ {
+ Stream result = _stream;
+
+ Fx.Assert(result != null, "The inner stream is null. Please check if the reader is closed or the ToStream method was already called before.");
+
+ _stream = null;
+ return result;
+ }
+
+ public override bool TryGetBase64ContentLength(out int length)
+ {
+ // in ByteStream encoder, we're not concerned about individual xml nodes
+ // therefore we can just return the entire length of the stream
+ if (!IsClosed && _stream != null && _stream.CanSeek)
+ {
+ long streamLength = _stream.Length;
+ if (streamLength <= int.MaxValue)
+ {
+ length = (int)streamLength;
+ return true;
+ }
+ }
+
+ length = -1;
+ return false;
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/Resources/Strings.resx b/src/System.ServiceModel.Web/src/Resources/Strings.resx
new file mode 100644
index 00000000000..33dcec8e6d1
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/Strings.resx
@@ -0,0 +1,558 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Object is read-only.
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+ The value must be in the range [{0}, {1}].
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+ The message body is a Stream and cannot be re-read.
+
+
+ The message body is missing or empty.
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+ The MessageBuffer has been closed and can no longer be used.
+
+
+ The message has been closed and can no longer be used.
+
+
+ Unknown MessageVersion.
+
+
+ Unknown WebContentFormat '{0}'.
+
+
+ The value supplied must be non-negative.
+
+
+ The value supplied must be greater than zero.
+
+
+ WebBodyFormatMessageProperty(Format={0})
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+ The XmlBuffer's quota has been exceeded.
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+ The size quota for this stream ({0}) has been exceeded.
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+ A registration already exists for URI '{0}'.
+
+
+ Cannot process contentType.
+
+
+ Unrecognized charSet '{0}' in contentType.
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+ This message formatter cannot be used to process response messages.
+
+
+ This message formatter cannot be used to process request messages.
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+ Endpoint not found.
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+ Method not allowed.
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+ Request Error
+
+
+ Service
+
+
+ The server encountered an error processing the request. See server logs for more details.
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+ The {0} object has been disposed.
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+ Could not find operation name in the message properties.
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+ Read is not supported on this stream.
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+ ReplyAlreadySent
+
+
+ The requestContext has been aborted.
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+ Seek is not supported on this stream.
+
+
+ The formatter '{0}' does not support serializing replies.
+
+
+ The formatter '{0}' does not support serializing requests.
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+ IAsyncResult not provided or of wrong type.
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+ Type '{0}' is not supported by '{1}'.
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+ The '{0}' method is not supported by the stream.
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.cs.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.cs.xlf
new file mode 100644
index 00000000000..5202e677bf0
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.cs.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.de.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.de.xlf
new file mode 100644
index 00000000000..2e14c5f62e0
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.de.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.es.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.es.xlf
new file mode 100644
index 00000000000..a05d82fff5a
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.es.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.fr.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.fr.xlf
new file mode 100644
index 00000000000..0d8b959d3ca
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.fr.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.it.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.it.xlf
new file mode 100644
index 00000000000..34d16e09b79
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.it.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ja.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ja.xlf
new file mode 100644
index 00000000000..480244f2367
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ja.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ko.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ko.xlf
new file mode 100644
index 00000000000..b5ed372cbdb
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ko.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.pl.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.pl.xlf
new file mode 100644
index 00000000000..f1924820845
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.pl.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.pt-BR.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.pt-BR.xlf
new file mode 100644
index 00000000000..609d9213100
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.pt-BR.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ru.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ru.xlf
new file mode 100644
index 00000000000..a1c2f133797
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.ru.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.tr.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.tr.xlf
new file mode 100644
index 00000000000..9db6faa80b8
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.tr.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.zh-Hans.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.zh-Hans.xlf
new file mode 100644
index 00000000000..301239ddc8a
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.zh-Hans.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/Resources/xlf/Strings.zh-Hant.xlf b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.zh-Hant.xlf
new file mode 100644
index 00000000000..6e833ad8f8f
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/Resources/xlf/Strings.zh-Hant.xlf
@@ -0,0 +1,827 @@
+
+
+
+
+
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+ Operation '{0}' in contract '{1}' has multiple request body parameters, one of which is a Stream. When the Stream is a parameter, there can be no other parameters in the body.
+
+
+
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+ Operation '{0}' of contract '{1}' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.
+
+
+
+ Bind parameters cannot be null or empty for path variable '{0}'.
+ Bind parameters cannot be null or empty for path variable '{0}'.
+
+
+
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+ This buffer cannot be returned to the buffer manager because it is the wrong size.
+
+
+
+ The size quota for this stream ({0}) has been exceeded.
+ The size quota for this stream ({0}) has been exceeded.
+
+
+
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+ Unable to deserialize XML body with root name '{0}' and root namespace '{1}' (for operation '{2}' and contract ('{3}', '{4}')) using {5}. Ensure that the type corresponding to the XML is added to the known types collection of the service.
+
+
+
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+ Type '{0}' of operation '{1}' and contract ('{2}', '{3}') could not be serialized. Ensure that the type can be serialized using {4} and add the type to the known types collection of the service if required.
+
+
+
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+ Certificate-based client authentication is not supported in TransportCredentialOnly security mode. Select the Transport security mode.
+
+
+
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+ Conditional retrieval (If-Modified-Since, If-None-Match) is only supported for HTTP GET and HEAD requests.
+
+
+
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+ Conditional update (If-Match, If-Unmodified-Since) is only supported for HTTP PUT, POST, and DELETE requests.
+
+
+
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+ {0} is not a valid encoding string for System.Text.Encoding.GetEncoding(string).
+
+
+
+ Cross domain javascript callback is not supported in authenticated services.
+ Cross domain javascript callback is not supported in authenticated services.
+
+
+
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+ CrossDomainScriptAccessEnabled cannot be used in Clients.
+
+
+
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+ WebContentFormat.Default cannot be set on a WebBodyFormatMessageProperty; use Xml, Json, or Raw instead.
+
+
+
+ A registration already exists for URI '{0}'.
+ A registration already exists for URI '{0}'.
+
+
+
+ Cannot process contentType.
+ Cannot process contentType.
+
+
+
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+ The envelope version of the outgoing message ({0}) does not match the envelope version of the encoder ({1}).
+
+
+
+ Unrecognized charSet '{0}' in contentType.
+ Unrecognized charSet '{0}' in contentType.
+
+
+
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+ The ServiceEndpoint's Address is null. Address must be an absolute uri.
+
+
+
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+ The WebContentTypeMapper threw an exception while attempting to map the content type. See the inner exception for details.
+
+
+
+ This message formatter cannot be used to process response messages.
+ This message formatter cannot be used to process response messages.
+
+
+
+ This message formatter cannot be used to process request messages.
+ This message formatter cannot be used to process request messages.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has body parameter '{2}'. GET operations cannot have a body. Either make the parameter '{2}' a UriTemplate parameter, or switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+ Operation '{0}' in contract '{1}' uses GET, but also has a parameter of MessageContract type '{2}'. GET operations cannot have a body. To use a MessageContract parameter type, switch from WebGetAttribute to WebInvokeAttribute.
+
+
+
+ Endpoint not found.
+ Endpoint not found.
+
+
+
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Endpoint not found. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+ BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}
+
+
+
+ Method not allowed.
+ Method not allowed.
+
+
+
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>Method not allowed. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+ <p>There is no operation listening for <a href="{0}">{0}</a>, but there is an operation listening for <a href="{1}">{1}</a>, so you are being redirected there.</p>
+
+
+
+ Request Error
+ Request Error
+
+
+
+ Service
+ Service
+
+
+
+ The server encountered an error processing the request. See server logs for more details.
+ The server encountered an error processing the request. See server logs for more details.
+
+
+
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+ The server encountered an error processing the request. The exception message is '{0}'. See server logs for more details. The exception stack trace is:
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service. The exception message is '{1}'. See server logs for more details. The exception stack trace is: </p>
+
+
+
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+ <p>The server encountered an error processing the request. Please see the <a rel="help-page" href="{0}">service help page</a> for constructing valid requests to the service.</p>
+
+
+
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+ ClientCredentialType '{0}' can only be used on the server side, not the client side. Please use one of the following values instead 'None, Basic, Certificate, Digest, Ntlm, Windows'.
+
+
+
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+ HTTP context property '{0}' is missing from the incoming message. This typically means the message did not arrive over the WebHttpBinding transport.
+
+
+
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+ A message was dispatched to the UnhandledDispatchOperation, but was invoked without a Message as input. This error might be caused by a behavior that provided a bad IDispatchMessageFormatter for the EndpointDispatcher's DispatchRuntime's UnhandledDispatchOperation's Formatter.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') contains an unrecognized http body format value '{3}'. The expected body format value is '{4}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ Incoming message for operation '{0}' contains an unrecognized http body format value '{1}'. The expected body format value is '{2}'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+ Operation '{0}' in contract '{1}' has a MessageContract parameter (of type '{2}') without a wrapper name and with more than one body element. MessageContract parameters without a wrapper element are supported only if they have zero or one body element.
+
+
+
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+ Operation '{0}' in contract '{1}' uses a MessageContract that has SOAP headers. SOAP headers are not supported by the None MessageVersion.
+
+
+
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+ Operation '{0}' (in contract '{1}' with namespace '{2}') specifies the http body format to be JSON but the serialization mechanism for the operation is not DataContract. JSON format is only supported with DataContract serialization. If you have an XmlSerializerFormatAttribute on the operation consider replacing it with DataContractFormatAttribute.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'null'. Found value '{0}'.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+ OperationFormatter encountered an invalid Message body. Expected to find an attribute with name 'type' and value 'object'. Found value '{0}'.
+
+
+
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+ WebMessageEncodingBindingElement only supports MessageVersion.None.
+
+
+
+ The value must be in the range [{0}, {1}].
+ The value must be in the range [{0}, {1}].
+
+
+
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ Cannot claim lock within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+ Operation '{0}' of contract '{1}' specifies MessageContract type '{2}' which has IsWrapped as false but has multiple request body parameters. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the IsWrapped property on the MessageContractAttribute to true.
+
+
+
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+ In the endpoint at '{0}', in order to use '{1}', the '{2}' of the binding must have ManualAddressing set to true.
+
+
+
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+ The maximum message size quota for incoming messages ({0}) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
+
+
+
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+ The maximum message size quota for outgoing messages ({0}) has been exceeded.
+
+
+
+ The message body is a Stream and cannot be re-read.
+ The message body is a Stream and cannot be re-read.
+
+
+
+ The message body is missing or empty.
+ The message body is missing or empty.
+
+
+
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+ The XmlReader used to read the message body is in an invalid read state '{0}'.
+
+
+
+ The MessageBuffer has been closed and can no longer be used.
+ The MessageBuffer has been closed and can no longer be used.
+
+
+
+ The message has been closed and can no longer be used.
+ The message has been closed and can no longer be used.
+
+
+
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message for operation '{0}' (contract '{1}' with namespace '{2}') does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+ Message does not contain the http body format property. The encoder expects the http format property to be '{0}'.
+
+
+
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+ Incoming message does not contain a WebBodyFormatMessageProperty. This can be because a WebContentTypeMapper or a WebMessageEncodingBindingElement has not been configured on the binding. See the documentation of WebContentTypeMapper and WebMessageEncodingBindingElement for more details.
+
+
+
+ The text encoding '{0}' used in the text message format is not supported.
+ The text encoding '{0}' used in the text message format is not supported.
+
+
+
+ Unknown MessageVersion.
+ Unknown MessageVersion.
+
+
+
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+ In contract '{0}', there are multiple operations with Method '{2}' and a UriTemplate that is equivalent to '{1}'. Each operation requires a unique combination of UriTemplate and Method to unambiguously dispatch messages. Use WebGetAttribute or WebInvokeAttribute to alter the UriTemplate and Method values of an operation.
+
+
+
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+ Operation '{0}' in contract '{1}' has both WebGetAttribute and WebInvokeAttribute; only one can be present.
+
+
+
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+ Operation '{0}' in contract '{1}' has a Stream return value and also has out or ref parameters. When Stream is the return value of the operation, it cannot have ref or out parameters.
+
+
+
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+ Parameter '{0}' of operation '{1}' in contract '{2}' is a Stream, and is also a ref or out parameter. Stream cannot be a ref or out parameter.
+
+
+
+ The {0} object has been disposed.
+ The {0} object has been disposed.
+
+
+
+ Object is read-only.
+ Object is read-only.
+
+
+
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+ WebGetAttribute/WebInvokeAttribute supports setting the BodyStyle property to Bare only with DataContract and XmlSerializer serializable types. Operation '{0}' does not specify serialization using any of these formats. Add a DataContractFormatAttribute or XmlSerializerFormatAttribute to this operation to specify one of these serialization formats.
+
+
+
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+ Operation '{0}' of contract '{1}' specifies at least one response body parameter that is not a return value of the operation. Only the return value is allowed when the BodyStyle property of WebGetAttribute/WebInvokeAttribute is set to Bare. Either remove the extra response body parameters or set the BodyStyle property to Wrapped.
+
+
+
+ The operation '{0}' does not support '{1}' as a response format.
+ The operation '{0}' does not support '{1}' as a response format.
+
+
+
+ Could not find operation name in the message properties.
+ Could not find operation name in the message properties.
+
+
+
+ This operation is supported only when the operation selector is of type '{0}'.
+ This operation is supported only when the operation selector is of type '{0}'.
+
+
+
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+ Parameter type '{0}' of operation '{1}' (contract '{2}' with namespace '{3}') is not of type Stream. Ensure that the parameter is of type Stream or derives from Stream.
+
+
+
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+ This operation formatter can only be used for deserializing requests; serializing replies is not supported since query strings are not used to represent parameters in replies.
+
+
+
+ Read is not supported on this stream.
+ Read is not supported on this stream.
+
+
+
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+ The channel received an unexpected fault input message while closing. The fault reason given is: '{0}'
+
+
+
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected fault input message with Action = '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+ The channel received an unexpected input message with Action '{0}' while closing. You should only close your channel when you are not expecting any more input messages.
+
+
+
+ ReplyAlreadySent
+ ReplyAlreadySent
+
+
+
+ The requestContext has been aborted.
+ The requestContext has been aborted.
+
+
+
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+ Operation '{0}', belonging to contract ('{1}', '{2}') has an XmlSerializerFormatAttribute configured with OperationUse Encoded or OperationStyle Rpc. OperationUse Encoded and OperationStyle Rpc are not supported for web bindings. Configure the endpoint with a SOAP binding (like WSHttpBinding) in order to use these options.
+
+
+
+ IAsyncResult not provided or of wrong type.
+ IAsyncResult not provided or of wrong type.
+
+
+
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+ OperationFormatter encountered an invalid Message body. Expected to find node type 'Element' with name '{0}' and namespace '{1}'. Found node type '{2}' with name '{3}' and namespace '{4}'
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. Please see InnerException for more details.
+
+
+
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to deserialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+ There was an error while trying to serialize parameter {0}:{1}. The InnerException message was '{2}'. Please see InnerException for more details.
+
+
+
+ Seek is not supported on this stream.
+ Seek is not supported on this stream.
+
+
+
+ The formatter '{0}' does not support serializing replies.
+ The formatter '{0}' does not support serializing replies.
+
+
+
+ The formatter '{0}' does not support serializing requests.
+ The formatter '{0}' does not support serializing requests.
+
+
+
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+ Unable to find the endpoint behavior WebHttpBehavior for endpoint address '{0}'. This is possibly caused by not calling ServiceModelWebServiceCollectionExtensions.AddServiceModelWebServices(IServiceCollection services).
+
+
+
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+ '{0}' does not allow the use of Streams with the MessageContract programming model. The service '{1}' defines an operation '{2}' that uses the MessageContract type '{3}'. '{3}' contains MessageBodyMember '{4}' of type Stream.
+
+
+
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+ The task timed out after {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+ Argument {0} must be a non-negative timeout value. Provided value was {1}.
+
+
+
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+ Argument {0} must be a positive timeout value. Provided value was {1}.
+
+
+
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+ Cannot serialize parameter of type '{0}' (for operation '{1}', contract '{2}') because it is not the exact type '{3}' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute.
+
+
+
+ Type '{0}' is not supported by '{1}'.
+ Type '{0}' is not supported by '{1}'.
+
+
+
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+ The additional default value with key '{0}' is invalid because the UriTemplate '{1}' does not contain a variable with that name.
+
+
+
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+ The base address must be an absolute URI with a scheme of http or https and no query or fragment.
+
+
+
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+ UriTemplate.BindByName was called with an empty key in the parameters collection.
+
+
+
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+ UriTemplate '{0}' has no variables; UriTemplate.BindByPosition cannot be called with {1} value(s).
+
+
+
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+ UriTemplate '{0}' has {1} path variable(s) and {2} query variable(s) but was passed {3} value(s).
+
+
+
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+ The key '{0}' appears as both a literal segment and as a name in the name-value collection passed to UriTemplate.BindByName.
+
+
+
+ Cannot look up compound segment results before a successful Match has been performed.
+ Cannot look up compound segment results before a successful Match has been performed.
+
+
+
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+ UriTemplate '{0}' has a compound path segment '{1}' that contains the variable '{2}' for which a default value was specified. Variables in compound segments cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+ UriTemplate '{0}' has an additional default value for variable '{1}', but that variable appears inside a compound segment and cannot have a default value.
+
+
+
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+ UriTemplate '{0}' has a query value variable '{1}' with default value '{2}'. Query variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+ UriTemplate '{0}' has an additional default value for query variable '{1}'. Query variables cannot have default values.
+
+
+
+ The Defaults dictionary on the UriTemplate is immutable.
+ The Defaults dictionary on the UriTemplate is immutable.
+
+
+
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+ UriTemplate '{0}' contains compound path segment '{1}' with two adjacent variables. Adjacent variables in compound segments are not supported.
+
+
+
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+ UriTemplate '{0}' has variable '{1}' with default value '{2}'. The default value of a path variable cannot be null, empty, or contain a path separator.
+
+
+
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+ The segment or query part '{0}' has an invalid format. Variable names must be enclosed in matching braces.
+
+
+
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+ UriTemplate '{0}' has invalid variable declaration '{1}'.
+
+
+
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+ UriTemplate '{0}' has invalid usage of wildcard '{1}'. Wildcards are only allowed as the last path segment and cannot be combined with other characters in the same segment.
+
+
+
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+ UriTemplate '{0}' has an additional default value for variable '{1}' that is null. Nullable defaults are only allowed when declared inline in the template.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by variable '{2}' which is not nullable. All path variables after a nullable variable must also be nullable.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+ UriTemplate '{0}' has nullable default for variable '{1}' but that variable is followed by literal segment '{2}'. Path variables with nullable defaults cannot be followed by literal segments.
+
+
+
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+ UriTemplate '{0}' has nullable default for variable '{1}'. Path variables with nullable defaults cannot be followed by a wildcard segment.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a Message parameter. Message and UriTemplate parameters are incompatible.
+
+
+
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+ Operation '{0}' in contract '{1}' uses UriTemplate parameters, but also uses a MessageContract parameter. MessageContract and UriTemplate parameters are incompatible.
+
+
+
+ UriTemplate '{0}' has a query string that ends in '&'.
+ UriTemplate '{0}' has a query string that ends in '&'.
+
+
+
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+ UriTemplate '{0}' has a query value that is a compound (mixed literal and variable) expression. Query values must be either pure literals or pure variables.
+
+
+
+ UriTemplate '{0}' has a query parameter with an empty name.
+ UriTemplate '{0}' has a query parameter with an empty name.
+
+
+
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+ UriTemplate '{0}' has a query parameter with a variable name. Query parameter names must be literals.
+
+
+
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+ UriTemplate '{0}' has multiple query parameters with the same name. Query parameter names must be unique within a template.
+
+
+
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has wildcard variable '{1}' with default value '{2}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+ UriTemplate '{0}' has additional default value for wildcard variable '{1}'. Wildcard variables cannot have default values.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings. Conflicting templates: '{0}'.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+ The UriTemplateTable's BaseAddress must be set before this operation can be performed.
+
+
+
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+ The BaseAddress of the UriTemplateTable cannot be changed after the table has been made read-only.
+
+
+
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+ UriTemplateTable contains duplicate templates: '{0}' and '{1}'.
+
+
+
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+ The KeyValuePairs collection of the UriTemplateTable cannot be empty.
+
+
+
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+ '{0}' is not a valid UriTemplate string for use as a key in a UriTemplateTable.
+
+
+
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+ The URI matched multiple UriTemplates in this UriTemplateTable. Use Match() instead of MatchSingle() to get all results.
+
+
+
+ The base address of the UriTemplateTable must be an absolute URI.
+ The base address of the UriTemplateTable must be an absolute URI.
+
+
+
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+ A UriTemplate key in the UriTemplateTable's KeyValuePairs collection cannot be null.
+
+
+
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+ UriTemplateTable contains templates with ambiguous query strings: '{0}'.
+
+
+
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+ UriTemplate '{0}' has multiple variables with the name '{1}'. Variable names must be unique within a template.
+
+
+
+ Unknown WebContentFormat '{0}'.
+ Unknown WebContentFormat '{0}'.
+
+
+
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+ The incoming message has an unexpected message format '{0}'. The expected message formats for the operation are {1}. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
+
+
+
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+ Operation '{0}' in contract '{1}' has a UriTemplate that expects a parameter named '{2}', but there is no input parameter with that name on the operation.
+
+
+
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+ Operation '{0}' in contract '{1}' has a path variable named '{2}' which does not have type 'string'. Variables for UriTemplate path segments must have type 'string'.
+
+
+
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+ Operation '{0}' in contract '{1}' has a query variable named '{2}' of type '{3}', but type '{3}' is not convertible by '{4}'. Variables for UriTemplate query values must have types that can be converted by '{4}'.
+
+
+
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+ Operation '{0}' in contract '{1}' has multiple parameters named '{2}' that vary only in uppercase versus lowercase. The parameter names must be distinct.
+
+
+
+ The value supplied must be non-negative.
+ The value supplied must be non-negative.
+
+
+
+ The value supplied must be greater than zero.
+ The value supplied must be greater than zero.
+
+
+
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with the None MessageVersion. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+ The endpoint at '{0}' does not have a Binding with Scheme 'http' or 'https'. '{1}' is only intended for use with WebHttpBinding or similar bindings.
+
+
+
+ Weak entity tags (W/"...") are not supported in this context.
+ Weak entity tags (W/"...") are not supported in this context.
+
+
+
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a behavior of type '{1}'. The endpoint is initialized with the proper behavior and it should not be removed or replaced.
+
+
+
+ WebBodyFormatMessageProperty(Format={0})
+ WebBodyFormatMessageProperty(Format={0})
+
+
+
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+ The standard endpoint of type '{0}' does not have a binding of type '{1}'. The endpoint is initialized with the proper binding and it should not be removed or replaced.
+
+
+
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+ Raw (application/octet-stream pass-through) content is not yet supported by the WebHttpBinding client. Use Xml or Json instead, or convert your payload to a typed parameter.
+
+
+
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+ WebHttpDispatchOperationSelector is server-side and is not supported in the client-only port of System.ServiceModel.Web. Construct a UriTemplate manually from the [WebGet]/[WebInvoke] attribute on your contract instead.
+
+
+
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+ The endpoint address '{0}' has message headers and is being used with a binding that's configured for message version None. Either change the endpoint address to not contain message headers or change the binding to be one that supports SOAP (for example, WSHttpBinding).
+
+
+
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+ The HTTP method '{0}' of the incoming request (with URI '{1}') is not allowed.
+
+
+
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+ The incoming HTTP request's URI '{0}' does not match any service operation.
+
+
+
+ The XmlBuffer's quota has been exceeded.
+ The XmlBuffer's quota has been exceeded.
+
+
+
+ New types cannot be registered with serializer manager after the service has been opened.
+ New types cannot be registered with serializer manager after the service has been opened.
+
+
+
+ The '{0}' method is not supported by the stream.
+ The '{0}' method is not supported by the stream.
+
+
+
+ The get accessor of the '{0}' property is not supported by the stream.
+ The get accessor of the '{0}' property is not supported by the stream.
+
+
+
+ The set accessor of the '{0}' property is not supported by the stream.
+ The set accessor of the '{0}' property is not supported by the stream.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.Web/src/System.ServiceModel.Web.csproj b/src/System.ServiceModel.Web/src/System.ServiceModel.Web.csproj
new file mode 100644
index 00000000000..6ad2f99e6a4
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System.ServiceModel.Web.csproj
@@ -0,0 +1,39 @@
+
+
+ $(WcfAssemblyVersion)
+ Microsoft
+ System.ServiceModel.Web
+ true
+ true
+ $(Ship_WcfPackages)
+ $(DotNetVersion)
+ System.ServiceModel
+
+ false
+ true
+
+ $(NoWarn);CS0105;CS0108;CS0436
+
+
+
+
+
+
+
+
+
+
+ true
+ FxResources.$(AssemblyName).SR
+ false
+ System.SR
+
+
+
diff --git a/src/System.ServiceModel.Web/src/System/Collections/ObjectModel/FreezableCollection.cs b/src/System.ServiceModel.Web/src/System/Collections/ObjectModel/FreezableCollection.cs
new file mode 100644
index 00000000000..96045ee9cc0
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/Collections/ObjectModel/FreezableCollection.cs
@@ -0,0 +1,70 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+
+namespace System.Collections.ObjectModel
+{
+ internal class FreezableCollection : Collection, ICollection
+ {
+ public FreezableCollection()
+ : base()
+ {
+ }
+
+ public FreezableCollection(IList list)
+ : base(list)
+ {
+ }
+
+ public bool IsFrozen { get; private set; }
+
+ bool ICollection.IsReadOnly
+ {
+ get
+ {
+ return IsFrozen;
+ }
+ }
+
+ public void Freeze()
+ {
+ IsFrozen = true;
+ }
+
+ protected override void ClearItems()
+ {
+ ThrowIfFrozen();
+ base.ClearItems();
+ }
+
+ protected override void InsertItem(int index, T item)
+ {
+ ThrowIfFrozen();
+ base.InsertItem(index, item);
+ }
+
+ protected override void RemoveItem(int index)
+ {
+ ThrowIfFrozen();
+ base.RemoveItem(index);
+ }
+
+ protected override void SetItem(int index, T item)
+ {
+ ThrowIfFrozen();
+ base.SetItem(index, item);
+ }
+
+ private void ThrowIfFrozen()
+ {
+ if (IsFrozen)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.ObjectIsReadOnly));
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/ContentEncoding.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/ContentEncoding.cs
new file mode 100644
index 00000000000..9f01c8943de
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/ContentEncoding.cs
@@ -0,0 +1,14 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Text;
+
+namespace System.ServiceModel.Channels
+{
+ internal class ContentEncoding
+ {
+ public string contentType;
+ public Encoding encoding;
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/ContentTypeHelpers.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/ContentTypeHelpers.cs
new file mode 100644
index 00000000000..0b1a423dad9
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/ContentTypeHelpers.cs
@@ -0,0 +1,58 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Text;
+
+namespace System.ServiceModel.Channels
+{
+ // Helpers for matching content-type headers to encodings.
+ // Mirrors CoreWCF.Runtime.ContentTypeHelpers (client subset).
+ internal static class ContentTypeHelpers
+ {
+ public static Encoding[] GetSupportedEncodings()
+ {
+ Encoding[] supported = TextEncoderDefaults.SupportedEncodings;
+ Encoding[] copy = new Encoding[supported.Length];
+ Array.Copy(supported, copy, supported.Length);
+ return copy;
+ }
+
+ public static Encoding GetEncodingFromContentType(string contentType, ContentEncoding[] contentEncodingMap)
+ {
+ if (contentType == null)
+ {
+ return null;
+ }
+
+ for (int i = 0; i < contentEncodingMap.Length; i++)
+ {
+ if (contentType.Equals(contentEncodingMap[i].contentType, StringComparison.OrdinalIgnoreCase))
+ {
+ return contentEncodingMap[i].encoding;
+ }
+ }
+
+ // Fall back to parsing the charset parameter if present.
+ try
+ {
+ System.Net.Http.Headers.MediaTypeHeaderValue parsed =
+ System.Net.Http.Headers.MediaTypeHeaderValue.Parse(contentType);
+ string charset = parsed.CharSet;
+ if (!string.IsNullOrEmpty(charset))
+ {
+ if (TextEncoderDefaults.TryGetEncoding(charset, out Encoding encoding))
+ {
+ return encoding;
+ }
+ }
+ }
+ catch (FormatException)
+ {
+ // Malformed content-type: caller will surface the error.
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/JsonGlobals.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/JsonGlobals.cs
new file mode 100644
index 00000000000..2cf84d0c8a2
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/JsonGlobals.cs
@@ -0,0 +1,30 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace System.ServiceModel.Channels
+{
+ // Minimal subset of JsonGlobals constants used by the Web HTTP encoder factories.
+ // Mirrors CoreWCF.Runtime.JsonGlobals.
+ internal static class JsonGlobals
+ {
+ public const string ApplicationJsonMediaType = "application/json";
+ public const string TextJsonMediaType = "text/json";
+
+ // XML dictionary string constants used by DataContractJsonSerializer-emitted XML.
+ public const string RootString = "root";
+ public const string ItemString = "item";
+ public const string TypeString = "type";
+ public const string ObjectString = "object";
+ public const string DString = "d";
+ public const string NullString = "null";
+
+ // Pre-created dictionary strings.
+ public static readonly System.Xml.XmlDictionaryString RootDictionaryString =
+ new System.Xml.XmlDictionary().Add(RootString);
+ public static readonly System.Xml.XmlDictionaryString ItemDictionaryString =
+ new System.Xml.XmlDictionary().Add(ItemString);
+ public static readonly System.Xml.XmlDictionaryString DDictionaryString =
+ new System.Xml.XmlDictionary().Add(DString);
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/JsonMessageEncoderFactory.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/JsonMessageEncoderFactory.cs
new file mode 100644
index 00000000000..2ac1264357c
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/JsonMessageEncoderFactory.cs
@@ -0,0 +1,530 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.IO;
+using System.Runtime;
+using System.Runtime.Serialization.Json;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using Microsoft.Extensions.ObjectPool;
+
+namespace System.ServiceModel.Channels
+{
+ internal class JsonMessageEncoderFactory : MessageEncoderFactory
+ {
+ private static readonly ContentEncoding[] s_applicationJsonContentEncoding = GetContentEncodingMap(JsonGlobals.ApplicationJsonMediaType);
+ private readonly JsonMessageEncoder _messageEncoder;
+
+ public JsonMessageEncoderFactory(Encoding writeEncoding, int maxReadPoolSize, int maxWritePoolSize, XmlDictionaryReaderQuotas quotas, bool crossDomainScriptAccessEnabled)
+ {
+ _messageEncoder = new JsonMessageEncoder(writeEncoding, maxReadPoolSize, maxWritePoolSize, quotas, crossDomainScriptAccessEnabled);
+ }
+
+ public override MessageEncoder Encoder => _messageEncoder;
+
+ public override MessageVersion MessageVersion => _messageEncoder.MessageVersion;
+
+ internal static string GetContentType(WebMessageEncodingBindingElement encodingElement)
+ {
+ if (encodingElement == null)
+ {
+ return WebMessageEncoderFactory.GetContentType(JsonGlobals.ApplicationJsonMediaType, TextEncoderDefaults.Encoding);
+ }
+ else
+ {
+ return WebMessageEncoderFactory.GetContentType(JsonGlobals.ApplicationJsonMediaType, encodingElement.WriteEncoding);
+ }
+ }
+
+ private static ContentEncoding[] GetContentEncodingMap(string mediaType)
+ {
+ Encoding[] readEncodings = ContentTypeHelpers.GetSupportedEncodings();
+ ContentEncoding[] map = new ContentEncoding[readEncodings.Length];
+ for (int i = 0; i < readEncodings.Length; i++)
+ {
+ ContentEncoding contentEncoding = new ContentEncoding();
+ contentEncoding.contentType = WebMessageEncoderFactory.GetContentType(mediaType, readEncodings[i]);
+ contentEncoding.encoding = readEncodings[i];
+ map[i] = contentEncoding;
+ }
+
+ return map;
+ }
+
+ internal class JsonMessageEncoder : MessageEncoder
+ {
+ private const int MaxPooledXmlReadersPerMessage = 2;
+
+ // Double-checked locking pattern requires volatile for read/write synchronization
+ private volatile SynchronizedPool _bufferedReaderPool;
+ private volatile SynchronizedPool _bufferedWriterPool;
+ private readonly int _maxReadPoolSize;
+ private readonly int _maxWritePoolSize;
+ private readonly OnXmlDictionaryReaderClose _onStreamedReaderClose;
+ private readonly XmlDictionaryReaderQuotas _readerQuotas;
+ private readonly XmlDictionaryReaderQuotas _bufferedReadReaderQuotas;
+
+ // Double-checked locking pattern requires volatile for read/write synchronization
+ private volatile SynchronizedPool _recycledStatePool;
+ private volatile SynchronizedPool _streamedReaderPool;
+ private volatile SynchronizedPool _streamedWriterPool;
+ private readonly Encoding _writeEncoding;
+
+ public JsonMessageEncoder(Encoding writeEncoding, int maxReadPoolSize, int maxWritePoolSize, XmlDictionaryReaderQuotas quotas, bool crossDomainScriptAccessEnabled)
+ {
+ if (writeEncoding == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(writeEncoding));
+ }
+
+ ThisLock = new object();
+
+ TextEncoderDefaults.ValidateEncoding(writeEncoding);
+ _writeEncoding = writeEncoding;
+
+ _maxReadPoolSize = maxReadPoolSize;
+ _maxWritePoolSize = maxWritePoolSize;
+
+ _readerQuotas = new XmlDictionaryReaderQuotas();
+ _onStreamedReaderClose = new OnXmlDictionaryReaderClose(ReturnStreamedReader);
+ quotas.CopyTo(_readerQuotas);
+
+ _bufferedReadReaderQuotas = EncoderHelpers.GetBufferedReadQuotas(_readerQuotas);
+
+ ContentType = WebMessageEncoderFactory.GetContentType(JsonGlobals.ApplicationJsonMediaType, writeEncoding);
+ }
+
+ public override string ContentType { get; }
+
+ public override string MediaType => JsonGlobals.ApplicationJsonMediaType;
+
+ public override MessageVersion MessageVersion => MessageVersion.None;
+
+ private SynchronizedPool RecycledStatePool
+ {
+ get
+ {
+ if (_recycledStatePool == null)
+ {
+ lock (ThisLock)
+ {
+ if (_recycledStatePool == null)
+ {
+ _recycledStatePool = new SynchronizedPool(_maxReadPoolSize);
+ }
+ }
+ }
+
+ return _recycledStatePool;
+ }
+ }
+
+ private object ThisLock { get; }
+
+ public override bool IsContentTypeSupported(string contentType)
+ {
+ if (contentType == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(contentType));
+ }
+
+ return IsJsonContentType(contentType);
+ }
+
+ public override Message ReadMessage(ArraySegment buffer, BufferManager bufferManager, string contentType)
+ {
+ if (bufferManager == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(bufferManager)));
+ }
+
+ //if (WebTD.JsonMessageDecodingStartIsEnabled())
+ //{
+ // WebTD.JsonMessageDecodingStart();
+ //}
+
+ Message message;
+
+ JsonBufferedMessageData messageData = TakeBufferedReader();
+ messageData.Encoding = ContentTypeHelpers.GetEncodingFromContentType(contentType, JsonMessageEncoderFactory.s_applicationJsonContentEncoding);
+ messageData.Open(buffer, bufferManager);
+ RecycledMessageState messageState = messageData.TakeMessageState();
+ if (messageState == null)
+ {
+ messageState = new RecycledMessageState();
+ }
+ message = new BufferedMessage(messageData, messageState);
+
+ message.Properties.Encoder = this;
+
+ //if (SMTD.MessageReadByEncoderIsEnabled() && buffer != null)
+ //{
+ // SMTD.MessageReadByEncoder(
+ // EventTraceActivityHelper.TryExtractActivity(message, true),
+ // buffer.Count,
+ // this);
+ //}
+
+ //if (MessageLogger.LogMessagesAtTransportLevel)
+ //{
+ // MessageLogger.LogMessage(ref message, MessageLoggingSource.TransportReceive);
+ //}
+
+ return message;
+ }
+
+ public override ValueTask ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType)
+ {
+ if (stream == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(stream)));
+ }
+
+ XmlReader reader = TakeStreamedReader(stream, ContentTypeHelpers.GetEncodingFromContentType(contentType, JsonMessageEncoderFactory.s_applicationJsonContentEncoding));
+ Message message = Message.CreateMessage(reader, maxSizeOfHeaders, MessageVersion.None);
+ message.Properties.Encoder = this;
+ return new ValueTask(message);
+ }
+
+ public override ArraySegment WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
+ {
+ if (message == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(message)));
+ }
+
+ if (bufferManager == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(bufferManager)), message);
+ }
+
+ if (maxMessageSize < 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(maxMessageSize), maxMessageSize,
+ SR.Format(SR.ValueMustBeNonNegative)), message);
+ }
+
+ if (messageOffset < 0 || messageOffset > maxMessageSize)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(messageOffset), messageOffset,
+ SR.Format(SR.JsonValueMustBeInRange, 0, maxMessageSize)), message);
+ }
+
+ //EventTraceActivity eventTraceActivity = null;
+ //if (WebTD.JsonMessageEncodingStartIsEnabled())
+ //{
+ // eventTraceActivity = EventTraceActivityHelper.TryExtractActivity(message);
+ // WebTD.JsonMessageEncodingStart(eventTraceActivity);
+ //}
+
+ ThrowIfMismatchedMessageVersion(message);
+ message.Properties.Encoder = this;
+ JsonBufferedMessageWriter messageWriter = TakeBufferedWriter();
+
+ ArraySegment messageData = messageWriter.WriteMessage(message, bufferManager, messageOffset, maxMessageSize);
+ ReturnMessageWriter(messageWriter);
+
+ //if (SMTD.MessageWrittenByEncoderIsEnabled() && messageData != null)
+ //{
+ // SMTD.MessageWrittenByEncoder(
+ // eventTraceActivity ?? EventTraceActivityHelper.TryExtractActivity(message),
+ // messageData.Count,
+ // this);
+ //}
+
+ //if (MessageLogger.LogMessagesAtTransportLevel)
+ //{
+ // XmlDictionaryReader xmlDictionaryReader = JsonReaderWriterFactory.CreateJsonReader(
+ // messageData.Array, messageData.Offset, messageData.Count, null, XmlDictionaryReaderQuotas.Max, null);
+ // MessageLogger.LogMessage(ref message, xmlDictionaryReader, MessageLoggingSource.TransportSend);
+ //}
+
+ return messageData;
+ }
+
+ public override ValueTask WriteMessageAsync(Message message, Stream stream)
+ {
+ if (message == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(message)));
+ }
+
+ if (stream == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(stream)), message);
+ }
+
+ ThrowIfMismatchedMessageVersion(message);
+
+ //EventTraceActivity eventTraceActivity = null;
+ //if (WebTD.JsonMessageEncodingStartIsEnabled())
+ //{
+ // eventTraceActivity = EventTraceActivityHelper.TryExtractActivity(message);
+ // WebTD.JsonMessageEncodingStart(eventTraceActivity);
+ //}
+
+ message.Properties.Encoder = this;
+ XmlDictionaryWriter xmlWriter = TakeStreamedWriter(stream);
+
+ xmlWriter.WriteStartDocument();
+ message.WriteMessage(xmlWriter);
+ xmlWriter.WriteEndDocument();
+ xmlWriter.Flush();
+ ReturnStreamedWriter(xmlWriter);
+
+ //if (SMTD.StreamedMessageWrittenByEncoderIsEnabled())
+ //{
+ // SMTD.StreamedMessageWrittenByEncoder(
+ // eventTraceActivity ?? EventTraceActivityHelper.TryExtractActivity(message));
+ //}
+
+ //if (MessageLogger.LogMessagesAtTransportLevel)
+ //{
+ // MessageLogger.LogMessage(ref message, MessageLoggingSource.TransportSend);
+ //}
+
+ return new ValueTask();
+ }
+
+ internal override bool IsCharSetSupported(string charSet) => TextEncoderDefaults.TryGetEncoding(charSet, out _);
+
+ public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
+ {
+ return ReadMessageAsync(stream, maxSizeOfHeaders, contentType).AsTask().GetAwaiter().GetResult();
+ }
+
+ public override void WriteMessage(Message message, Stream stream)
+ {
+ WriteMessageAsync(message, stream).AsTask().GetAwaiter().GetResult();
+ }
+
+ private bool IsJsonContentType(string contentType) => IsContentTypeSupported(contentType, JsonGlobals.ApplicationJsonMediaType, JsonGlobals.ApplicationJsonMediaType) || IsContentTypeSupported(contentType, JsonGlobals.TextJsonMediaType, JsonGlobals.TextJsonMediaType);
+
+ private void ReturnBufferedData(JsonBufferedMessageData messageData)
+ {
+ _bufferedReaderPool.Return(messageData);
+ }
+
+ private void ReturnMessageWriter(JsonBufferedMessageWriter messageWriter)
+ {
+ _bufferedWriterPool.Return(messageWriter);
+ }
+
+ private void ReturnStreamedReader(XmlDictionaryReader xmlReader)
+ {
+ _streamedReaderPool.Return(xmlReader);
+ }
+
+ private void ReturnStreamedWriter(XmlWriter xmlWriter)
+ {
+ xmlWriter.Close();
+ _streamedWriterPool.Return((XmlDictionaryWriter)xmlWriter);
+ }
+
+ private JsonBufferedMessageData TakeBufferedReader()
+ {
+ if (_bufferedReaderPool == null)
+ {
+ lock (ThisLock)
+ {
+ if (_bufferedReaderPool == null)
+ {
+ _bufferedReaderPool = new SynchronizedPool(_maxReadPoolSize);
+ }
+ }
+ }
+
+ JsonBufferedMessageData messageData = _bufferedReaderPool.Take();
+ if (messageData == null)
+ {
+ messageData = new JsonBufferedMessageData(this, MaxPooledXmlReadersPerMessage);
+ }
+
+ return messageData;
+ }
+
+ private JsonBufferedMessageWriter TakeBufferedWriter()
+ {
+ if (_bufferedWriterPool == null)
+ {
+ lock (ThisLock)
+ {
+ if (_bufferedWriterPool == null)
+ {
+ _bufferedWriterPool = new SynchronizedPool(_maxWritePoolSize);
+ }
+ }
+ }
+
+ JsonBufferedMessageWriter messageWriter = _bufferedWriterPool.Take();
+ if (messageWriter == null)
+ {
+ messageWriter = new JsonBufferedMessageWriter(this);
+ }
+
+ return messageWriter;
+ }
+
+ private XmlDictionaryReader TakeStreamedReader(Stream stream, Encoding enc)
+ {
+ if (_streamedReaderPool == null)
+ {
+ lock (ThisLock)
+ {
+ if (_streamedReaderPool == null)
+ {
+ _streamedReaderPool = new SynchronizedPool(_maxReadPoolSize);
+ }
+ }
+ }
+
+ XmlDictionaryReader xmlReader = _streamedReaderPool.Take();
+ if (xmlReader == null)
+ {
+ xmlReader = JsonReaderWriterFactory.CreateJsonReader(stream, enc, _readerQuotas, _onStreamedReaderClose);
+ }
+ else
+ {
+ ((IXmlJsonReaderInitializer)xmlReader).SetInput(stream, enc, _readerQuotas, _onStreamedReaderClose);
+ }
+
+ return xmlReader;
+ }
+
+ private XmlDictionaryWriter TakeStreamedWriter(Stream stream)
+ {
+ if (_streamedWriterPool == null)
+ {
+ lock (ThisLock)
+ {
+ if (_streamedWriterPool == null)
+ {
+ _streamedWriterPool = new SynchronizedPool(_maxWritePoolSize);
+ }
+ }
+ }
+
+ XmlDictionaryWriter xmlWriter = _streamedWriterPool.Take();
+ if (xmlWriter == null)
+ {
+ xmlWriter = JsonReaderWriterFactory.CreateJsonWriter(stream, _writeEncoding, false);
+ }
+ else
+ {
+ ((IXmlJsonWriterInitializer)xmlWriter).SetOutput(stream, _writeEncoding, false);
+ }
+
+ return xmlWriter;
+ }
+
+ internal class JsonBufferedMessageData : BufferedMessageData
+ {
+ private Encoding _encoding;
+ private readonly JsonMessageEncoder _messageEncoder;
+ private readonly OnXmlDictionaryReaderClose _onClose;
+ private readonly Pool _readerPool;
+
+ public JsonBufferedMessageData(JsonMessageEncoder messageEncoder, int maxReaderPoolSize)
+ : base(messageEncoder.RecycledStatePool)
+ {
+ _messageEncoder = messageEncoder;
+ _onClose = new OnXmlDictionaryReaderClose(OnXmlReaderClosed);
+ _readerPool = new Pool(maxReaderPoolSize);
+ }
+
+ public override MessageEncoder MessageEncoder => _messageEncoder;
+
+ public override XmlDictionaryReaderQuotas Quotas => _messageEncoder._bufferedReadReaderQuotas;
+
+ internal Encoding Encoding
+ {
+ set
+ {
+ _encoding = value;
+ }
+ }
+
+ protected override void OnClosed()
+ {
+ _messageEncoder.ReturnBufferedData(this);
+ }
+
+ protected override void ReturnXmlReader(XmlDictionaryReader xmlReader)
+ {
+ if (xmlReader != null)
+ {
+ _readerPool.Return(xmlReader);
+ }
+ }
+
+ protected override XmlDictionaryReader TakeXmlReader()
+ {
+ ArraySegment buffer = Buffer;
+
+ XmlDictionaryReader xmlReader = _readerPool.Take();
+ if (xmlReader == null)
+ {
+ xmlReader = JsonReaderWriterFactory.CreateJsonReader(buffer.Array, buffer.Offset, buffer.Count, _encoding, Quotas, _onClose);
+ }
+ else
+ {
+ ((IXmlJsonReaderInitializer)xmlReader).SetInput(buffer.Array, buffer.Offset, buffer.Count, _encoding, Quotas, _onClose);
+ }
+
+ return xmlReader;
+ }
+ }
+
+ internal class JsonBufferedMessageWriter : BufferedMessageWriter
+ {
+ private readonly JsonMessageEncoder _messageEncoder;
+ private XmlDictionaryWriter _returnedWriter;
+
+ public JsonBufferedMessageWriter(JsonMessageEncoder messageEncoder)
+ {
+ _messageEncoder = messageEncoder;
+ }
+
+ protected override void OnWriteEndMessage(XmlDictionaryWriter writer)
+ {
+ writer.WriteEndDocument();
+ }
+
+ protected override void OnWriteStartMessage(XmlDictionaryWriter writer)
+ {
+ writer.WriteStartDocument();
+ }
+
+ protected override void ReturnXmlWriter(XmlDictionaryWriter writer)
+ {
+ writer.Close();
+
+ if (_returnedWriter == null)
+ {
+ _returnedWriter = writer;
+ }
+ }
+
+ protected override XmlDictionaryWriter TakeXmlWriter(Stream stream)
+ {
+ XmlDictionaryWriter writer;
+ if (_returnedWriter == null)
+ {
+ writer = JsonReaderWriterFactory.CreateJsonWriter(stream, _messageEncoder._writeEncoding, false);
+ }
+ else
+ {
+ writer = _returnedWriter;
+ ((IXmlJsonWriterInitializer)writer).SetOutput(stream, _messageEncoder._writeEncoding, false);
+ _returnedWriter = null;
+ }
+
+ return writer;
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebBodyFormatMessageProperty.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebBodyFormatMessageProperty.cs
new file mode 100644
index 00000000000..92a5f3a70ae
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebBodyFormatMessageProperty.cs
@@ -0,0 +1,73 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Globalization;
+
+namespace System.ServiceModel.Channels
+{
+ public sealed class WebBodyFormatMessageProperty : IMessageProperty
+ {
+ public const string Name = "WebBodyFormatMessageProperty";
+
+ private static WebBodyFormatMessageProperty s_jsonProperty;
+ private static WebBodyFormatMessageProperty s_xmlProperty;
+ private static WebBodyFormatMessageProperty s_rawProperty;
+
+ public WebBodyFormatMessageProperty(WebContentFormat format)
+ {
+ if (format == WebContentFormat.Default)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.DefaultContentFormatNotAllowedInProperty)));
+ }
+
+ Format = format;
+ }
+
+ public WebContentFormat Format { get; }
+
+ internal static WebBodyFormatMessageProperty JsonProperty
+ {
+ get
+ {
+ if (s_jsonProperty == null)
+ {
+ s_jsonProperty = new WebBodyFormatMessageProperty(WebContentFormat.Json);
+ }
+
+ return s_jsonProperty;
+ }
+ }
+
+ internal static WebBodyFormatMessageProperty XmlProperty
+ {
+ get
+ {
+ if (s_xmlProperty == null)
+ {
+ s_xmlProperty = new WebBodyFormatMessageProperty(WebContentFormat.Xml);
+ }
+
+ return s_xmlProperty;
+ }
+ }
+
+ internal static WebBodyFormatMessageProperty RawProperty
+ {
+ get
+ {
+ if (s_rawProperty == null)
+ {
+ s_rawProperty = new WebBodyFormatMessageProperty(WebContentFormat.Raw);
+ }
+
+ return s_rawProperty;
+ }
+ }
+
+ public IMessageProperty CreateCopy() => this;
+
+ public override string ToString() => string.Format(CultureInfo.InvariantCulture, SR.Format(SR.WebBodyFormatPropertyToString, Format.ToString()));
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentFormat.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentFormat.cs
new file mode 100644
index 00000000000..a670dc3a372
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentFormat.cs
@@ -0,0 +1,14 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace System.ServiceModel.Channels
+{
+ public enum WebContentFormat
+ {
+ Default,
+ Xml,
+ Json,
+ Raw
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentFormatHelper.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentFormatHelper.cs
new file mode 100644
index 00000000000..ba3bd341e05
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentFormatHelper.cs
@@ -0,0 +1,17 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace System.ServiceModel.Channels
+{
+ internal static class WebContentFormatHelper
+ {
+ internal static bool IsDefined(WebContentFormat format)
+ {
+ return (format == WebContentFormat.Default
+ || format == WebContentFormat.Xml
+ || format == WebContentFormat.Json
+ || format == WebContentFormat.Raw);
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentTypeMapper.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentTypeMapper.cs
new file mode 100644
index 00000000000..78657b6a1fd
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebContentTypeMapper.cs
@@ -0,0 +1,11 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace System.ServiceModel.Channels
+{
+ public abstract class WebContentTypeMapper
+ {
+ public abstract WebContentFormat GetMessageFormatForContentType(string contentType);
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebMessageEncoderFactory.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebMessageEncoderFactory.cs
new file mode 100644
index 00000000000..ad6584a37a6
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebMessageEncoderFactory.cs
@@ -0,0 +1,440 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Globalization;
+using System.IO;
+using System.Runtime;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ public class WebMessageEncoderFactory : MessageEncoderFactory
+ {
+ private readonly WebMessageEncoder _messageEncoder;
+
+ public WebMessageEncoderFactory(Encoding writeEncoding, int maxReadPoolSize, int maxWritePoolSize, XmlDictionaryReaderQuotas quotas, WebContentTypeMapper contentTypeMapper, bool javascriptCallbackEnabled)
+ {
+ _messageEncoder = new WebMessageEncoder(writeEncoding, maxReadPoolSize, maxWritePoolSize, quotas, contentTypeMapper, javascriptCallbackEnabled);
+ }
+
+ public override MessageEncoder Encoder => _messageEncoder;
+
+ public override MessageVersion MessageVersion => _messageEncoder.MessageVersion;
+
+ internal static string GetContentType(string mediaType, Encoding encoding)
+ {
+ string charset = TextEncoderDefaults.EncodingToCharSet(encoding);
+ if (!string.IsNullOrEmpty(charset))
+ {
+ return string.Format(CultureInfo.InvariantCulture, "{0}; charset={1}", mediaType, charset);
+ }
+
+ return mediaType;
+ }
+
+ internal class WebMessageEncoder : MessageEncoder
+ {
+ private const string DefaultMediaType = "application/xml";
+ private readonly WebContentTypeMapper _contentTypeMapper;
+ private readonly string _defaultContentType;
+
+ // Double-checked locking pattern requires volatile for read/write synchronization
+ private volatile MessageEncoder _jsonMessageEncoder;
+ private readonly int _maxReadPoolSize;
+ private readonly int _maxWritePoolSize;
+
+ // Double-checked locking pattern requires volatile for read/write synchronization
+ private volatile MessageEncoder _rawMessageEncoder;
+ private readonly XmlDictionaryReaderQuotas _readerQuotas;
+
+ // Double-checked locking pattern requires volatile for read/write synchronization
+ private volatile MessageEncoder _textMessageEncoder;
+ private readonly Encoding _writeEncoding;
+ //bool javascriptCallbackEnabled;
+
+ public WebMessageEncoder(Encoding writeEncoding, int maxReadPoolSize, int maxWritePoolSize, XmlDictionaryReaderQuotas quotas, WebContentTypeMapper contentTypeMapper, bool javascriptCallbackEnabled)
+ {
+ if (writeEncoding == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(writeEncoding));
+ }
+
+ ThisLock = new object();
+
+ TextEncoderDefaults.ValidateEncoding(writeEncoding);
+ _writeEncoding = writeEncoding;
+
+ _maxReadPoolSize = maxReadPoolSize;
+ _maxWritePoolSize = maxWritePoolSize;
+ _contentTypeMapper = contentTypeMapper;
+ //this.javascriptCallbackEnabled = javascriptCallbackEnabled;
+
+ _readerQuotas = new XmlDictionaryReaderQuotas();
+ quotas.CopyTo(_readerQuotas);
+
+ _defaultContentType = GetContentType(DefaultMediaType, writeEncoding);
+ }
+
+ public override string ContentType => _defaultContentType;
+
+ public override string MediaType => DefaultMediaType;
+
+ public override MessageVersion MessageVersion => MessageVersion.None;
+
+ private MessageEncoder JsonMessageEncoder
+ {
+ get
+ {
+ if (_jsonMessageEncoder == null)
+ {
+ lock (ThisLock)
+ {
+ if (_jsonMessageEncoder == null)
+ {
+ _jsonMessageEncoder = new JsonMessageEncoderFactory(_writeEncoding, _maxReadPoolSize, _maxWritePoolSize, _readerQuotas, false).Encoder;
+ }
+ }
+ }
+
+ return _jsonMessageEncoder;
+ }
+ }
+
+ private MessageEncoder RawMessageEncoder
+ {
+ get
+ {
+ if (_rawMessageEncoder == null)
+ {
+ lock (ThisLock)
+ {
+ if (_rawMessageEncoder == null)
+ {
+ _rawMessageEncoder = new ByteStreamMessageEncodingBindingElement(_readerQuotas).CreateMessageEncoderFactory().Encoder;
+ }
+ }
+ }
+
+ return _rawMessageEncoder;
+ }
+ }
+
+ private MessageEncoder TextMessageEncoder
+ {
+ get
+ {
+ if (_textMessageEncoder == null)
+ {
+ lock (ThisLock)
+ {
+ if (_textMessageEncoder == null)
+ {
+ // Carry the configured ReaderQuotas and pool sizes onto the text
+ // encoder (the .NET Framework WebMessageEncoderFactory passes these to
+ // its TextMessageEncoderFactory; the JSON encoder above already does).
+ // Without this, XML replies would silently use default quotas.
+ TextMessageEncodingBindingElement textEncodingElement =
+ new TextMessageEncodingBindingElement(MessageVersion.None, _writeEncoding)
+ {
+ MaxReadPoolSize = _maxReadPoolSize,
+ MaxWritePoolSize = _maxWritePoolSize,
+ };
+ _readerQuotas.CopyTo(textEncodingElement.ReaderQuotas);
+ _textMessageEncoder = textEncodingElement.CreateMessageEncoderFactory().Encoder;
+ }
+ }
+ }
+
+ return _textMessageEncoder;
+ }
+ }
+
+ private object ThisLock { get; }
+
+ public override bool IsContentTypeSupported(string contentType)
+ {
+ if (contentType == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(contentType));
+ }
+
+ if (TryGetContentTypeMapping(contentType, out WebContentFormat messageFormat) &&
+ (messageFormat != WebContentFormat.Default))
+ {
+ return true;
+ }
+
+ return RawMessageEncoder.IsContentTypeSupported(contentType) ||
+ JsonMessageEncoder.IsContentTypeSupported(contentType) ||
+ TextMessageEncoder.IsContentTypeSupported(contentType);
+ }
+
+ public override Message ReadMessage(ArraySegment buffer, BufferManager bufferManager, string contentType)
+ {
+ if (bufferManager == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(bufferManager)));
+ }
+
+ WebContentFormat format = GetFormatForContentType(contentType);
+ Message message;
+
+ switch (format)
+ {
+ case WebContentFormat.Json:
+ message = JsonMessageEncoder.ReadMessage(buffer, bufferManager, contentType);
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.JsonProperty);
+ break;
+ case WebContentFormat.Xml:
+ message = TextMessageEncoder.ReadMessage(buffer, bufferManager, contentType);
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.XmlProperty);
+ break;
+ case WebContentFormat.Raw:
+ message = RawMessageEncoder.ReadMessage(buffer, bufferManager, contentType);
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.RawProperty);
+ break;
+ default:
+ throw Fx.AssertAndThrow("This should never get hit because GetFormatForContentType shouldn't return a WebContentFormat other than Json, Xml, and Raw");
+ }
+
+ return message;
+ }
+
+ public override async ValueTask ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType)
+ {
+ if (stream == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(stream)));
+ }
+
+ WebContentFormat format = GetFormatForContentType(contentType);
+ Message message;
+ switch (format)
+ {
+ case WebContentFormat.Json:
+ message = await JsonMessageEncoder.ReadMessageAsync(stream, maxSizeOfHeaders, contentType);
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.JsonProperty);
+ break;
+ case WebContentFormat.Xml:
+ message = await TextMessageEncoder.ReadMessageAsync(stream, maxSizeOfHeaders, contentType);
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.XmlProperty);
+ break;
+ case WebContentFormat.Raw:
+ message = await RawMessageEncoder.ReadMessageAsync(stream, maxSizeOfHeaders, contentType);
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.RawProperty);
+ break;
+ default:
+ throw Fx.AssertAndThrow("This should never get hit because GetFormatForContentType shouldn't return a WebContentFormat other than Json, Xml, and Raw");
+ }
+ return message;
+ }
+
+ public override ArraySegment WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
+ {
+ if (message == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(message)));
+ }
+
+ if (bufferManager == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(bufferManager)), message);
+ }
+
+ if (maxMessageSize < 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(maxMessageSize), maxMessageSize,
+ SR.Format(SR.ValueMustBeNonNegative)), message);
+ }
+
+ if (messageOffset < 0 || messageOffset > maxMessageSize)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(messageOffset), messageOffset,
+ SR.Format(SR.JsonValueMustBeInRange, 0, maxMessageSize)), message);
+ }
+
+ ThrowIfMismatchedMessageVersion(message);
+
+ WebContentFormat messageFormat = ExtractFormatFromMessage(message);
+ //JavascriptCallbackResponseMessageProperty javascriptResponseMessageProperty;
+ switch (messageFormat)
+ {
+ case WebContentFormat.Json:
+ return JsonMessageEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);
+ case WebContentFormat.Xml:
+ //if (message.Properties.TryGetValue(JavascriptCallbackResponseMessageProperty.Name, out javascriptResponseMessageProperty) &&
+ // javascriptResponseMessageProperty != null &&
+ // !String.IsNullOrEmpty(javascriptResponseMessageProperty.CallbackFunctionName))
+ //{
+ // throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.JavascriptCallbackNotsupported), message);
+ //}
+ return TextMessageEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);
+ case WebContentFormat.Raw:
+ //if (message.Properties.TryGetValue(JavascriptCallbackResponseMessageProperty.Name, out javascriptResponseMessageProperty) &&
+ // javascriptResponseMessageProperty != null &&
+ // !String.IsNullOrEmpty(javascriptResponseMessageProperty.CallbackFunctionName))
+ //{
+ // throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.JavascriptCallbackNotsupported), message);
+ //}
+ return RawMessageEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);
+ default:
+ throw Fx.AssertAndThrow("This should never get hit because GetFormatForContentType shouldn't return a WebContentFormat other than Json, Xml, and Raw");
+ }
+ }
+
+ public override async ValueTask WriteMessageAsync(Message message, Stream stream)
+ {
+ if (message == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(message)));
+ }
+
+ if (stream == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("stream"), message);
+ }
+
+ ThrowIfMismatchedMessageVersion(message);
+
+ WebContentFormat messageFormat = ExtractFormatFromMessage(message);
+ //JavascriptCallbackResponseMessageProperty javascriptResponseMessageProperty;
+ switch (messageFormat)
+ {
+ case WebContentFormat.Json:
+ await JsonMessageEncoder.WriteMessageAsync(message, stream);
+ break;
+ case WebContentFormat.Xml:
+ //if (message.Properties.TryGetValue(JavascriptCallbackResponseMessageProperty.Name, out javascriptResponseMessageProperty) &&
+ // javascriptResponseMessageProperty != null &&
+ // !string.IsNullOrEmpty(javascriptResponseMessageProperty.CallbackFunctionName))
+ //{
+ // throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.JavascriptCallbackNotsupported), message);
+ //}
+ await TextMessageEncoder.WriteMessageAsync(message, stream);
+ break;
+ case WebContentFormat.Raw:
+ //if (message.Properties.TryGetValue(JavascriptCallbackResponseMessageProperty.Name, out javascriptResponseMessageProperty) &&
+ // javascriptResponseMessageProperty != null &&
+ // !string.IsNullOrEmpty(javascriptResponseMessageProperty.CallbackFunctionName))
+ //{
+ // throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.JavascriptCallbackNotsupported), message);
+ //}
+ await RawMessageEncoder.WriteMessageAsync(message, stream);
+ break;
+ default:
+ throw Fx.AssertAndThrow("This should never get hit because GetFormatForContentType shouldn't return a WebContentFormat other than Json, Xml, and Raw");
+ }
+ }
+
+ internal override bool IsCharSetSupported(string charSet) => TextEncoderDefaults.TryGetEncoding(charSet, out _);
+
+ public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
+ {
+ return ReadMessageAsync(stream, maxSizeOfHeaders, contentType).AsTask().GetAwaiter().GetResult();
+ }
+
+ public override void WriteMessage(Message message, Stream stream)
+ {
+ WriteMessageAsync(message, stream).AsTask().GetAwaiter().GetResult();
+ }
+
+ private WebContentFormat ExtractFormatFromMessage(Message message)
+ {
+ message.Properties.TryGetValue(WebBodyFormatMessageProperty.Name, out object messageFormatProperty);
+ if (messageFormatProperty == null)
+ {
+ return WebContentFormat.Xml;
+ }
+
+ if ((!(messageFormatProperty is WebBodyFormatMessageProperty typedMessageFormatProperty)) ||
+ (typedMessageFormatProperty.Format == WebContentFormat.Default))
+ {
+ return WebContentFormat.Xml;
+ }
+
+ return typedMessageFormatProperty.Format;
+ }
+
+ private WebContentFormat GetFormatForContentType(string contentType)
+ {
+ if (TryGetContentTypeMapping(contentType, out WebContentFormat messageFormat) &&
+ (messageFormat != WebContentFormat.Default))
+ {
+ //if (DiagnosticUtility.ShouldTraceInformation)
+ //{
+ // if (string.IsNullOrEmpty(contentType))
+ // {
+ // contentType = "";
+ // }
+ // TraceUtility.TraceEvent(TraceEventType.Information,
+ // TraceCode.RequestFormatSelectedFromContentTypeMapper,
+ // SR.GetString(SR.TraceCodeRequestFormatSelectedFromContentTypeMapper, messageFormat.ToString(), contentType));
+ //}
+ return messageFormat;
+ }
+
+ // Don't pass on null content types to IsContentTypeSupported methods -- they might throw.
+ // If null content type isn't already mapped, return the default format of Raw.
+
+ if (contentType == null)
+ {
+ messageFormat = WebContentFormat.Raw;
+ }
+ else if (JsonMessageEncoder.IsContentTypeSupported(contentType))
+ {
+ messageFormat = WebContentFormat.Json;
+ }
+ else if (TextMessageEncoder.IsContentTypeSupported(contentType))
+ {
+ messageFormat = WebContentFormat.Xml;
+ }
+ else
+ {
+ messageFormat = WebContentFormat.Raw;
+ }
+
+ //if (DiagnosticUtility.ShouldTraceInformation)
+ //{
+ // TraceUtility.TraceEvent(TraceEventType.Information,
+ // TraceCode.RequestFormatSelectedByEncoderDefaults,
+ // SR.GetString(SR.TraceCodeRequestFormatSelectedByEncoderDefaults, messageFormat.ToString(), contentType));
+ //}
+
+ return messageFormat;
+ }
+
+ private bool TryGetContentTypeMapping(string contentType, out WebContentFormat format)
+ {
+ if (_contentTypeMapper == null)
+ {
+ format = WebContentFormat.Default;
+ return false;
+ }
+
+ try
+ {
+ format = _contentTypeMapper.GetMessageFormatForContentType(contentType);
+ if (!WebContentFormatHelper.IsDefined(format))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.UnknownWebEncodingFormat, contentType, format)));
+ }
+ return true;
+ }
+ catch (Exception e)
+ {
+ if (Fx.IsFatal(e))
+ {
+ throw;
+ }
+
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CommunicationException(
+ SR.Format(SR.ErrorEncounteredInContentTypeMapper), e));
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebMessageEncodingBindingElement.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebMessageEncodingBindingElement.cs
new file mode 100644
index 00000000000..33b3b4d2078
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Channels/WebMessageEncodingBindingElement.cs
@@ -0,0 +1,186 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Channels
+{
+ public sealed class WebMessageEncodingBindingElement : MessageEncodingBindingElement//, IWsdlExportExtension
+ {
+ private int _maxReadPoolSize;
+ private int _maxWritePoolSize;
+ private Encoding _writeEncoding;
+
+ public WebMessageEncodingBindingElement() : this(TextEncoderDefaults.Encoding)
+ {
+ }
+
+ public WebMessageEncodingBindingElement(Encoding writeEncoding)
+ {
+ if (writeEncoding == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(writeEncoding));
+ }
+
+ TextEncoderDefaults.ValidateEncoding(writeEncoding);
+ _maxReadPoolSize = EncoderDefaults.MaxReadPoolSize;
+ _maxWritePoolSize = EncoderDefaults.MaxWritePoolSize;
+ ReaderQuotas = new XmlDictionaryReaderQuotas();
+ EncoderDefaults.ReaderQuotas.CopyTo(ReaderQuotas);
+ _writeEncoding = writeEncoding;
+ }
+
+ private WebMessageEncodingBindingElement(WebMessageEncodingBindingElement elementToBeCloned)
+ : base(elementToBeCloned)
+ {
+ _maxReadPoolSize = elementToBeCloned._maxReadPoolSize;
+ _maxWritePoolSize = elementToBeCloned._maxWritePoolSize;
+ ReaderQuotas = new XmlDictionaryReaderQuotas();
+ elementToBeCloned.ReaderQuotas.CopyTo(ReaderQuotas);
+ _writeEncoding = elementToBeCloned._writeEncoding;
+ ContentTypeMapper = elementToBeCloned.ContentTypeMapper;
+ CrossDomainScriptAccessEnabled = elementToBeCloned.CrossDomainScriptAccessEnabled;
+ }
+
+ public WebContentTypeMapper ContentTypeMapper { get; set; }
+
+ public int MaxReadPoolSize
+ {
+ get
+ {
+ return _maxReadPoolSize;
+ }
+ set
+ {
+ if (value <= 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(value), value,
+ SR.Format(SR.ValueMustBePositive)));
+ }
+
+ _maxReadPoolSize = value;
+ }
+ }
+
+ public int MaxWritePoolSize
+ {
+ get
+ {
+ return _maxWritePoolSize;
+ }
+ set
+ {
+ if (value <= 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(value), value,
+ SR.Format(SR.ValueMustBePositive)));
+ }
+
+ _maxWritePoolSize = value;
+ }
+ }
+
+ public override MessageVersion MessageVersion
+ {
+ get
+ {
+ return MessageVersion.None;
+ }
+ set
+ {
+ if (value == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(value));
+ }
+
+ if (value != MessageVersion.None)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(nameof(value), SR.Format(SR.JsonOnlySupportsMessageVersionNone));
+ }
+ }
+ }
+
+ public XmlDictionaryReaderQuotas ReaderQuotas { get; }
+
+ public Encoding WriteEncoding
+ {
+ get
+ {
+ return _writeEncoding;
+ }
+ set
+ {
+ if (value == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(value));
+ }
+
+ TextEncoderDefaults.ValidateEncoding(value);
+ _writeEncoding = value;
+ }
+ }
+
+ public bool CrossDomainScriptAccessEnabled
+ {
+ get;
+ set;
+ }
+
+ public override BindingElement Clone()
+ {
+ return new WebMessageEncodingBindingElement(this);
+ }
+
+ public override IChannelFactory BuildChannelFactory(BindingContext context)
+ {
+ return InternalBuildChannelFactory(context);
+ }
+
+ public override bool CanBuildChannelFactory(BindingContext context)
+ {
+ return InternalCanBuildChannelFactory(context);
+ }
+
+ public override MessageEncoderFactory CreateMessageEncoderFactory()
+ {
+ return new WebMessageEncoderFactory(WriteEncoding, MaxReadPoolSize, MaxWritePoolSize, ReaderQuotas, ContentTypeMapper, CrossDomainScriptAccessEnabled);
+ }
+
+ public override T GetProperty(BindingContext context)
+ {
+ if (context == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(context));
+ }
+ if (typeof(T) == typeof(XmlDictionaryReaderQuotas))
+ {
+ return (T)(object)ReaderQuotas;
+ }
+ else
+ {
+ return base.GetProperty(context);
+ }
+ }
+
+ //void IWsdlExportExtension.ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
+ //{
+ //}
+
+ //void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
+ //{
+ // if (context == null)
+ // {
+ // throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
+ // }
+
+ // SoapHelper.SetSoapVersion(context, exporter, this.MessageVersion.Envelope);
+ //}
+
+ internal override bool CheckEncodingVersion(EnvelopeVersion version) => MessageVersion.Envelope == version;
+
+ internal override bool IsMatch(BindingElement b) => false;
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/DataContractHelpers.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/DataContractHelpers.cs
new file mode 100644
index 00000000000..e5e32856a85
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/DataContractHelpers.cs
@@ -0,0 +1,39 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace System.ServiceModel
+{
+ internal static class DataContractHelpers
+ {
+ private static readonly Type s_typeOfIQueryable = typeof(IQueryable);
+ private static readonly Type s_typeOfIQueryableGeneric = typeof(IQueryable<>);
+ private static readonly Type s_typeOfIEnumerable = typeof(IEnumerable);
+ private static readonly Type s_typeOfIEnumerableGeneric = typeof(IEnumerable<>);
+
+ internal static Type GetSubstituteDataContractType(Type type, out bool isQueryable)
+ {
+ if (type == s_typeOfIQueryable)
+ {
+ isQueryable = true;
+ return s_typeOfIEnumerable;
+ }
+
+ if (type.GetTypeInfo().IsGenericType &&
+ type.GetGenericTypeDefinition() == s_typeOfIQueryableGeneric)
+ {
+ isQueryable = true;
+ return s_typeOfIEnumerableGeneric.MakeGenericType(type.GetGenericArguments());
+ }
+
+ isQueryable = false;
+ return type;
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Description/DataContractJsonSerializerOperationBehavior.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Description/DataContractJsonSerializerOperationBehavior.cs
new file mode 100644
index 00000000000..d2e77b7a809
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Description/DataContractJsonSerializerOperationBehavior.cs
@@ -0,0 +1,49 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Json;
+using System.Xml;
+
+namespace System.ServiceModel.Description
+{
+ internal class DataContractJsonSerializerOperationBehavior : DataContractSerializerOperationBehavior
+ {
+ private readonly bool _alwaysEmitTypeInformation;
+
+ public DataContractJsonSerializerOperationBehavior(OperationDescription description, int maxItemsInObjectGraph, bool ignoreExtensionDataObject, bool alwaysEmitTypeInformation)
+ : base(description)
+ {
+ MaxItemsInObjectGraph = maxItemsInObjectGraph;
+ IgnoreExtensionDataObject = ignoreExtensionDataObject;
+ _alwaysEmitTypeInformation = alwaysEmitTypeInformation;
+ }
+
+ public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList knownTypes)
+ {
+ return new DataContractJsonSerializer(type, new DataContractJsonSerializerSettings
+ {
+ RootName = name,
+ KnownTypes = knownTypes,
+ MaxItemsInObjectGraph = MaxItemsInObjectGraph,
+ IgnoreExtensionDataObject = IgnoreExtensionDataObject,
+ EmitTypeInformation = _alwaysEmitTypeInformation ? EmitTypeInformation.Always : EmitTypeInformation.AsNeeded
+ });
+ }
+
+ public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList knownTypes)
+ {
+ return new DataContractJsonSerializer(type, new DataContractJsonSerializerSettings
+ {
+ RootName = name.Value,
+ KnownTypes = knownTypes,
+ MaxItemsInObjectGraph = MaxItemsInObjectGraph,
+ IgnoreExtensionDataObject = IgnoreExtensionDataObject,
+ EmitTypeInformation = _alwaysEmitTypeInformation ? EmitTypeInformation.Always : EmitTypeInformation.AsNeeded
+ });
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Description/WebHttpBehavior.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Description/WebHttpBehavior.cs
new file mode 100644
index 00000000000..2e1a4419194
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Description/WebHttpBehavior.cs
@@ -0,0 +1,1016 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Dispatcher;
+using System.ServiceModel.Web;
+
+namespace System.ServiceModel.Description
+{
+ public class WebHttpBehavior : IEndpointBehavior
+ {
+ internal const string GET = "GET";
+ internal const string POST = "POST";
+ internal const string WildcardAction = "*";
+ internal const string WildcardMethod = "*";
+ internal static readonly string s_defaultStreamContentType = "application/octet-stream";
+ internal static readonly string s_defaultCallbackParameterName = "callback";
+ private WebMessageBodyStyle _defaultBodyStyle;
+ private WebMessageFormat _defaultOutgoingReplyFormat;
+ private WebMessageFormat _defaultOutgoingRequestFormat;
+ private string _contractNamespace;
+ private readonly UnwrappedTypesXmlSerializerManager _xmlSerializerManager;
+
+ public WebHttpBehavior()
+ {
+ _defaultOutgoingRequestFormat = WebMessageFormat.Xml;
+ _defaultOutgoingReplyFormat = WebMessageFormat.Xml;
+ _defaultBodyStyle = WebMessageBodyStyle.Bare;
+ _xmlSerializerManager = new UnwrappedTypesXmlSerializerManager();
+ }
+
+ internal delegate void Effect();
+
+ public virtual WebMessageBodyStyle DefaultBodyStyle
+ {
+ get { return _defaultBodyStyle; }
+ set
+ {
+ if (!WebMessageBodyStyleHelper.IsDefined(value))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(value)));
+ }
+
+ _defaultBodyStyle = value;
+ }
+ }
+
+ public virtual WebMessageFormat DefaultOutgoingRequestFormat
+ {
+ get
+ {
+ return _defaultOutgoingRequestFormat;
+ }
+ set
+ {
+ if (!WebMessageFormatHelper.IsDefined(value))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(value)));
+ }
+
+ _defaultOutgoingRequestFormat = value;
+ }
+ }
+
+ public virtual WebMessageFormat DefaultOutgoingResponseFormat
+ {
+ get
+ {
+ return _defaultOutgoingReplyFormat;
+ }
+ set
+ {
+ if (!WebMessageFormatHelper.IsDefined(value))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(value)));
+ }
+
+ _defaultOutgoingReplyFormat = value;
+ }
+ }
+
+ public virtual bool HelpEnabled { get; set; }
+
+ public virtual bool AutomaticFormatSelectionEnabled { get; set; }
+
+ public virtual bool FaultExceptionEnabled { get; set; }
+
+ internal Uri HelpUri { get; set; }
+
+ public virtual void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
+ {
+ // do nothing
+ }
+
+ public virtual void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
+ {
+ if (endpoint == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(endpoint));
+ }
+
+ if (clientRuntime == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(clientRuntime));
+ }
+
+ WebMessageEncodingBindingElement webEncodingBindingElement = endpoint.Binding.CreateBindingElements().Find();
+ if (webEncodingBindingElement != null && webEncodingBindingElement.CrossDomainScriptAccessEnabled)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.CrossDomainJavascriptNotsupported));
+ }
+
+ _contractNamespace = endpoint.Contract.Namespace;
+
+ foreach (OperationDescription od in endpoint.Contract.Operations)
+ {
+ if (clientRuntime.Operations.Contains(od.Name))
+ {
+ ClientOperation cop = clientRuntime.Operations[od.Name];
+ IClientMessageFormatter requestClient = GetRequestClientFormatter(od, endpoint);
+ IClientMessageFormatter replyClient = GetReplyClientFormatter(od, endpoint);
+ cop.Formatter = new CompositeClientFormatter(requestClient, replyClient);
+ cop.SerializeRequest = true;
+ cop.DeserializeReply = od.Messages.Count > 1 && !IsUntypedMessage(od.Messages[1]);
+ }
+ }
+ AddClientErrorInspector(endpoint, clientRuntime);
+ }
+
+ public virtual void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
+ {
+ // dotnet/wcf is a client-only library. The dispatch-side wiring (UriTemplateDispatchFormatter,
+ // WebHttpDispatchOperationSelector, WebErrorHandler, FormatSelectingMessageInspector,
+ // HelpPage, HttpUnhandledOperationInvoker, MultiplexingDispatchMessageFormatter,
+ // CompositeDispatchFormatter, WebFaultFormatter, PrefixEndpointAddressMessageFilter,
+ // MatchAllMessageFilter, WebHttpServiceModelCompat) is not part of this port. Use
+ // CoreWCF.WebHttp on the server side.
+ if (endpoint == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(endpoint));
+ }
+
+ if (endpointDispatcher == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(endpointDispatcher));
+ }
+
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ new NotSupportedException(SR.WebHttpServerSideOperationSelectorNotSupported));
+ }
+
+ public virtual void Validate(ServiceEndpoint endpoint)
+ {
+ if (endpoint == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(endpoint));
+ }
+
+ ValidateNoMessageHeadersPresent(endpoint);
+ ValidateBinding(endpoint);
+ ValidateContract(endpoint);
+ }
+
+ private void ValidateNoMessageHeadersPresent(ServiceEndpoint endpoint)
+ {
+ if (endpoint == null || endpoint.Address == null)
+ {
+ return;
+ }
+
+ EndpointAddress address = endpoint.Address;
+ if (address.Headers.Count > 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.WebHttpServiceEndpointCannotHaveMessageHeaders, address)));
+ }
+ }
+
+ protected virtual void ValidateBinding(ServiceEndpoint endpoint)
+ {
+ ValidateIsWebHttpBinding(endpoint, GetType().ToString());
+ }
+
+ internal static string GetWebMethod(OperationDescription od)
+ {
+ WebGetAttribute wga = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ WebInvokeAttribute wia = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ EnsureOk(wga, wia, od);
+ if (wga != null)
+ {
+ return GET;
+ }
+ else if (wia != null)
+ {
+ return wia.Method ?? POST;
+ }
+ else
+ {
+ return POST;
+ }
+ }
+
+ internal static string GetWebUriTemplate(OperationDescription od)
+ {
+ // return exactly what is on the attribute
+ WebGetAttribute wga = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ WebInvokeAttribute wia = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ EnsureOk(wga, wia, od);
+ if (wga != null)
+ {
+ return wga.UriTemplate;
+ }
+ else if (wia != null)
+ {
+ return wia.UriTemplate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ internal static string GetDescription(OperationDescription od)
+ {
+ object[] attributes = null;
+ if (od.SyncMethod != null)
+ {
+ attributes = od.SyncMethod.GetCustomAttributes(typeof(DescriptionAttribute), true);
+ }
+ else if (od.BeginMethod != null)
+ {
+ attributes = od.BeginMethod.GetCustomAttributes(typeof(DescriptionAttribute), true);
+ }
+ else if (od.TaskMethod != null)
+ {
+ attributes = od.TaskMethod.GetCustomAttributes(typeof(DescriptionAttribute), true);
+ }
+
+ if (attributes != null && attributes.Length > 0)
+ {
+ return ((DescriptionAttribute)attributes[0]).Description;
+ }
+ else
+ {
+ return string.Empty;
+ }
+ }
+
+ internal static bool IsTypedMessage(MessageDescription message) => message != null && message.MessageType != null;
+
+ internal static bool IsUntypedMessage(MessageDescription message)
+ {
+ if (message == null)
+ {
+ return false;
+ }
+
+ return (message.Body.ReturnValue != null && message.Body.Parts.Count == 0 && message.Body.ReturnValue.Type == typeof(Message)) ||
+ (message.Body.ReturnValue == null && message.Body.Parts.Count == 1 && message.Body.Parts[0].Type == typeof(Message));
+ }
+
+ internal static MessageDescription MakeDummyMessageDescription(MessageDirection direction)
+ {
+ MessageDescription messageDescription = new MessageDescription("urn:dummyAction", direction);
+ return messageDescription;
+ }
+
+ internal static bool SupportsJsonFormat(OperationDescription od)
+ {
+ // if the type is XmlSerializable, then we cannot create a json serializer for it
+ DataContractSerializerOperationBehavior dcsob = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ return (dcsob != null);
+ }
+
+ internal static void ValidateIsWebHttpBinding(ServiceEndpoint serviceEndpoint, string behaviorName)
+ {
+ Binding binding = serviceEndpoint.Binding;
+ if (binding.Scheme != "http" && binding.Scheme != "https")
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.WCFBindingCannotBeUsedWithUriOperationSelectorBehaviorBadScheme,
+ serviceEndpoint.Contract.Name, behaviorName)));
+ }
+
+ if (binding.MessageVersion != MessageVersion.None)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.WCFBindingCannotBeUsedWithUriOperationSelectorBehaviorBadMessageVersion,
+ serviceEndpoint.Address.Uri.AbsoluteUri, behaviorName)));
+ }
+
+ TransportBindingElement transportBindingElement = binding.CreateBindingElements().Find();
+ if (transportBindingElement != null && !transportBindingElement.ManualAddressing)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.ManualAddressingCannotBeFalseWithTransportBindingElement,
+ serviceEndpoint.Address.Uri.AbsoluteUri, behaviorName, transportBindingElement.GetType().Name)));
+ }
+ }
+
+ internal WebMessageBodyStyle GetBodyStyle(OperationDescription od)
+ {
+ WebGetAttribute wga = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ WebInvokeAttribute wia = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ EnsureOk(wga, wia, od);
+ if (wga != null)
+ {
+ return wga.GetBodyStyleOrDefault(DefaultBodyStyle);
+ }
+ else if (wia != null)
+ {
+ return wia.GetBodyStyleOrDefault(DefaultBodyStyle);
+ }
+ else
+ {
+ return DefaultBodyStyle;
+ }
+ }
+
+ protected virtual void AddServerErrorHandlers(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
+ {
+ // Server-side only. WebErrorHandler is not ported (use CoreWCF.WebHttp on the server).
+ }
+
+ // GetOperationSelector removed - server-side only (WebHttpDispatchOperationSelector is not ported).
+
+ protected virtual QueryStringConverter GetQueryStringConverter(OperationDescription operationDescription) => new QueryStringConverter();
+
+ internal virtual bool UseBareReplyFormatter(WebMessageBodyStyle style, OperationDescription operationDescription, WebMessageFormat responseFormat, out Type parameterType)
+ {
+ parameterType = null;
+
+ return IsBareResponse(style) && TryGetNonMessageParameterType(operationDescription.Messages[1], operationDescription, false, out parameterType);
+ }
+
+ // ---- Client-side formatters (ported from .NET Framework System.ServiceModel.Web reference source) ----
+
+ protected virtual IClientMessageFormatter GetReplyClientFormatter(OperationDescription operationDescription, ServiceEndpoint endpoint)
+ {
+ if (operationDescription.Messages.Count < 2)
+ {
+ return null;
+ }
+ ValidateBodyParameters(operationDescription, false);
+ Type type;
+ if (TryGetStreamParameterType(operationDescription.Messages[1], operationDescription, false, out type))
+ {
+ return new HttpStreamFormatter(operationDescription);
+ }
+ if (IsUntypedMessage(operationDescription.Messages[1]))
+ {
+ return new MessagePassthroughFormatter();
+ }
+ WebMessageBodyStyle style = GetBodyStyle(operationDescription);
+ Type parameterType;
+ WebMessageFormat responseFormat = GetResponseFormat(operationDescription);
+ if (UseBareReplyFormatter(style, operationDescription, responseFormat, out parameterType))
+ {
+ return SingleBodyParameterMessageFormatter.CreateXmlAndJsonClientFormatter(operationDescription, parameterType, false, _xmlSerializerManager, responseFormat == WebMessageFormat.Json);
+ }
+ else
+ {
+ MessageDescription temp = operationDescription.Messages[0];
+ operationDescription.Messages[0] = MakeDummyMessageDescription(MessageDirection.Input);
+ IClientMessageFormatter result = GetDefaultXmlAndJsonClientFormatter(operationDescription, !IsBareResponse(style), responseFormat == WebMessageFormat.Json);
+ operationDescription.Messages[0] = temp;
+ return result;
+ }
+ }
+
+ protected virtual IClientMessageFormatter GetRequestClientFormatter(OperationDescription operationDescription, ServiceEndpoint endpoint)
+ {
+ WebMessageFormat requestFormat = GetRequestFormat(operationDescription);
+ bool useJson = (requestFormat == WebMessageFormat.Json);
+ WebMessageEncodingBindingElement webEncoding = useJson
+ ? endpoint.Binding.CreateBindingElements().Find()
+ : null;
+ IClientMessageFormatter innerFormatter = null;
+
+ if (endpoint.Address == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.EndpointAddressCannotBeNull)));
+ }
+
+ // Throw-away formatter just to get path/query mapping counts before the message description is mutated below.
+ UriTemplateClientFormatter throwAway = new UriTemplateClientFormatter(operationDescription, null, GetQueryStringConverter(operationDescription), endpoint.Address.Uri, false, endpoint.Contract.Name);
+ int numUriVariables = throwAway._pathMapping.Count + throwAway._queryMapping.Count;
+ bool isStream = false;
+
+ HideReplyMessage(operationDescription, delegate ()
+ {
+ WebMessageBodyStyle style = GetBodyStyle(operationDescription);
+ bool isUntypedWhenUriParamsNotConsidered = false;
+ Effect doBodyFormatter = delegate ()
+ {
+ if (numUriVariables != 0)
+ {
+ EnsureNotUntypedMessageNorMessageContract(operationDescription);
+ }
+ ValidateBodyParameters(operationDescription, true);
+ IClientMessageFormatter baseFormatter;
+ Type parameterType;
+ if (TryGetStreamParameterType(operationDescription.Messages[0], operationDescription, true, out parameterType))
+ {
+ isStream = true;
+ baseFormatter = new HttpStreamFormatter(operationDescription);
+ }
+ else if (UseBareRequestFormatter(style, operationDescription, out parameterType))
+ {
+ baseFormatter = SingleBodyParameterMessageFormatter.CreateClientFormatter(operationDescription, parameterType, true, useJson, _xmlSerializerManager);
+ }
+ else
+ {
+ baseFormatter = GetDefaultClientFormatter(operationDescription, useJson, !IsBareRequest(style));
+ }
+ innerFormatter = baseFormatter;
+ isUntypedWhenUriParamsNotConsidered = IsUntypedMessage(operationDescription.Messages[0]);
+ };
+
+ if (numUriVariables == 0)
+ {
+ if (IsUntypedMessage(operationDescription.Messages[0]))
+ {
+ ValidateBodyParameters(operationDescription, true);
+ innerFormatter = new MessagePassthroughFormatter();
+ isUntypedWhenUriParamsNotConsidered = true;
+ }
+ else if (IsTypedMessage(operationDescription.Messages[0]))
+ {
+ ValidateBodyParameters(operationDescription, true);
+ innerFormatter = GetDefaultClientFormatter(operationDescription, useJson, !IsBareRequest(style));
+ }
+ else
+ {
+ doBodyFormatter();
+ }
+ }
+ else
+ {
+ HideRequestUriTemplateParameters(operationDescription, throwAway._pathMapping, throwAway._queryMapping, delegate ()
+ {
+ CloneMessageDescriptionsBeforeActing(operationDescription, delegate ()
+ {
+ doBodyFormatter();
+ });
+ });
+ }
+ innerFormatter = new UriTemplateClientFormatter(operationDescription, innerFormatter, GetQueryStringConverter(operationDescription), endpoint.Address.Uri, isUntypedWhenUriParamsNotConsidered, endpoint.Contract.Name);
+ });
+
+ string defaultContentType = GetDefaultContentType(isStream, useJson, webEncoding);
+ if (!string.IsNullOrEmpty(defaultContentType))
+ {
+ innerFormatter = new ContentTypeSettingClientMessageFormatter(defaultContentType, innerFormatter);
+ }
+ return innerFormatter;
+ }
+
+ internal IClientMessageFormatter GetDefaultClientFormatter(OperationDescription od, bool useJson, bool isWrapped)
+ {
+ DataContractSerializerOperationBehavior dcsob = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ if (useJson)
+ {
+ if (dcsob == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.JsonFormatRequiresDataContract, od.Name, od.DeclaringContract.Name, od.DeclaringContract.Namespace)));
+ }
+ return CreateDataContractJsonSerializerOperationFormatter(od, dcsob, isWrapped);
+ }
+ else
+ {
+ ClientRuntime clientRuntime = new ClientRuntime("name", "");
+ ClientOperation cop = new ClientOperation(clientRuntime, "dummyClient", "urn:dummy");
+ cop.Formatter = null;
+
+ if (dcsob != null)
+ {
+ (dcsob as IOperationBehavior).ApplyClientBehavior(od, cop);
+ return cop.Formatter;
+ }
+ XmlSerializerOperationBehavior xsob = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ if (xsob != null)
+ {
+ xsob = new XmlSerializerOperationBehavior(od, xsob.XmlSerializerFormatAttribute);
+ (xsob as IOperationBehavior).ApplyClientBehavior(od, cop);
+ return cop.Formatter;
+ }
+ }
+ return null;
+ }
+
+ private IClientMessageFormatter GetDefaultXmlAndJsonClientFormatter(OperationDescription od, bool isWrapped, bool preferJson)
+ {
+ // The .NET Framework version wraps an XML and a JSON formatter in a
+ // DemultiplexingClientMessageFormatter that switches on the response
+ // Content-Type. That demultiplexer is not ported; instead we honour the
+ // operation's statically-declared [WebGet]/[WebInvoke] ResponseFormat, the
+ // same way the bare-reply path (CreateXmlAndJsonClientFormatter) does.
+ bool useJson = preferJson && SupportsJsonFormat(od);
+ return GetDefaultClientFormatter(od, useJson, isWrapped);
+ }
+
+ protected virtual void AddClientErrorInspector(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
+ {
+ if (!FaultExceptionEnabled)
+ {
+ clientRuntime.ClientMessageInspectors.Add(new WebFaultClientMessageInspector());
+ }
+ }
+
+ private string GetDefaultContentType(bool isStream, bool useJson, WebMessageEncodingBindingElement webEncoding)
+ {
+ if (isStream)
+ {
+ return s_defaultStreamContentType;
+ }
+ else if (useJson)
+ {
+ return JsonMessageEncoderFactory.GetContentType(webEncoding);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private static void CloneMessageDescriptionsBeforeActing(OperationDescription operationDescription, Effect effect)
+ {
+ MessageDescription originalRequest = operationDescription.Messages[0];
+ bool thereIsAReply = operationDescription.Messages.Count > 1;
+ MessageDescription originalReply = thereIsAReply ? operationDescription.Messages[1] : null;
+ operationDescription.Messages[0] = originalRequest.Clone();
+ if (thereIsAReply)
+ {
+ operationDescription.Messages[1] = originalReply.Clone();
+ }
+
+ effect();
+ operationDescription.Messages[0] = originalRequest;
+ if (thereIsAReply)
+ {
+ operationDescription.Messages[1] = originalReply;
+ }
+ }
+
+ internal virtual bool UseBareRequestFormatter(WebMessageBodyStyle style, OperationDescription operationDescription, out Type parameterType)
+ {
+ parameterType = null;
+
+ return IsBareRequest(style) && TryGetNonMessageParameterType(operationDescription.Messages[0], operationDescription, true, out parameterType);
+ }
+
+ private static Collection CloneParts(MessageDescription md)
+ {
+ MessagePartDescriptionCollection bodyParameters = md.Body.Parts;
+ Collection bodyParametersClone = new Collection();
+ for (int i = 0; i < bodyParameters.Count; ++i)
+ {
+ MessagePartDescription copy = bodyParameters[i].Clone();
+ bodyParametersClone.Add(copy);
+ }
+
+ return bodyParametersClone;
+ }
+
+ private static void EnsureNotUntypedMessageNorMessageContract(OperationDescription operationDescription)
+ {
+ // Called when there are UriTemplate parameters. UT does not compose with Message
+ // or MessageContract because the SOAP and REST programming models must be uniform here.
+ bool isUnadornedWebGet = false;
+ if (GetWebMethod(operationDescription) == GET && GetWebUriTemplate(operationDescription) == null)
+ {
+ isUnadornedWebGet = true;
+ }
+
+ if (IsTypedMessage(operationDescription.Messages[0]))
+ {
+ if (isUnadornedWebGet)
+ {
+ // WebGet will give you UriTemplate parameters by default.
+ // We need a special error message for this case to prevent confusion.
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.GETCannotHaveMCParameter, operationDescription.Name, operationDescription.DeclaringContract.Name, operationDescription.Messages[0].MessageType.Name)));
+ }
+ else
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(
+ SR.UTParamsDoNotComposeWithMessageContract, operationDescription.Name, operationDescription.DeclaringContract.Name)));
+ }
+ }
+
+ if (IsUntypedMessage(operationDescription.Messages[0]))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(
+ SR.UTParamsDoNotComposeWithMessage, operationDescription.Name, operationDescription.DeclaringContract.Name)));
+ }
+ }
+
+ private static void EnsureOk(WebGetAttribute wga, WebInvokeAttribute wia, OperationDescription od)
+ {
+ if (wga != null && wia != null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.MultipleWebAttributes, od.Name, od.DeclaringContract.Name)));
+ }
+ }
+
+ private static void HideReplyMessage(OperationDescription operationDescription, Effect effect)
+ {
+ MessageDescription temp = null;
+ if (operationDescription.Messages.Count > 1)
+ {
+ temp = operationDescription.Messages[1];
+ operationDescription.Messages[1] = MakeDummyMessageDescription(MessageDirection.Output);
+ }
+
+ effect();
+ if (operationDescription.Messages.Count > 1)
+ {
+ operationDescription.Messages[1] = temp;
+ }
+ }
+
+ // HideRequestUriTemplateParameters(OperationDescription, UriTemplateDispatchFormatter, Effect)
+ // removed - server-side only (UriTemplateDispatchFormatter is not ported).
+
+ private static void HideRequestUriTemplateParameters(OperationDescription operationDescription, Dictionary pathMapping, Dictionary> queryMapping, Effect effect)
+ {
+ // mutate description to hide UriTemplate parameters
+ Collection originalParts = CloneParts(operationDescription.Messages[0]);
+ Collection parts = CloneParts(operationDescription.Messages[0]);
+ operationDescription.Messages[0].Body.Parts.Clear();
+ int newIndex = 0;
+ for (int i = 0; i < parts.Count; ++i)
+ {
+ if (!pathMapping.ContainsKey(i) && !queryMapping.ContainsKey(i))
+ {
+ operationDescription.Messages[0].Body.Parts.Add(parts[i]);
+ parts[i].Index = newIndex++;
+ }
+ }
+
+ effect();
+ // unmutate description
+ operationDescription.Messages[0].Body.Parts.Clear();
+ for (int i = 0; i < originalParts.Count; ++i)
+ {
+ operationDescription.Messages[0].Body.Parts.Add(originalParts[i]);
+ }
+ }
+
+ private static bool IsBareRequest(WebMessageBodyStyle style) => style == WebMessageBodyStyle.Bare || style == WebMessageBodyStyle.WrappedResponse;
+
+ private static bool IsBareResponse(WebMessageBodyStyle style) => style == WebMessageBodyStyle.Bare || style == WebMessageBodyStyle.WrappedRequest;
+
+ internal static bool TryGetNonMessageParameterType(MessageDescription message, OperationDescription declaringOperation, bool isRequest, out Type type)
+ {
+ type = null;
+ if (message == null)
+ {
+ return true;
+ }
+
+ if (IsTypedMessage(message) || IsUntypedMessage(message))
+ {
+ return false;
+ }
+
+ if (isRequest)
+ {
+ if (message.Body.Parts.Count > 1)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.AtMostOneRequestBodyParameterAllowedForUnwrappedMessages, declaringOperation.Name, declaringOperation.DeclaringContract.Name)));
+ }
+
+ if (message.Body.Parts.Count == 1 && message.Body.Parts[0].Type != typeof(void))
+ {
+ type = message.Body.Parts[0].Type;
+ }
+
+ return true;
+ }
+ else
+ {
+ if (message.Body.Parts.Count > 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.OnlyReturnValueBodyParameterAllowedForUnwrappedMessages, declaringOperation.Name, declaringOperation.DeclaringContract.Name)));
+ }
+
+ if (message.Body.ReturnValue != null && message.Body.ReturnValue.Type != typeof(void))
+ {
+ type = message.Body.ReturnValue.Type;
+ }
+
+ return true;
+ }
+ }
+
+ private static bool TryGetStreamParameterType(MessageDescription message, OperationDescription declaringOperation, bool isRequest, out Type type)
+ {
+ type = null;
+ if (message == null || IsTypedMessage(message) || IsUntypedMessage(message))
+ {
+ return false;
+ }
+
+ if (isRequest)
+ {
+ bool hasStream = false;
+ for (int i = 0; i < message.Body.Parts.Count; ++i)
+ {
+ if (typeof(Stream) == message.Body.Parts[i].Type)
+ {
+ type = message.Body.Parts[i].Type;
+ hasStream = true;
+ break;
+ }
+
+ }
+
+ if (hasStream && message.Body.Parts.Count > 1)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.AtMostOneRequestBodyParameterAllowedForStream, declaringOperation.Name, declaringOperation.DeclaringContract.Name)));
+ }
+
+ return hasStream;
+ }
+ else
+ {
+ // validate that the stream is not an out or ref param
+ for (int i = 0; i < message.Body.Parts.Count; ++i)
+ {
+ if (typeof(Stream) == message.Body.Parts[i].Type)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.NoOutOrRefStreamParametersAllowed, message.Body.Parts[i].Name, declaringOperation.Name, declaringOperation.DeclaringContract.Name)));
+ }
+ }
+
+ if (message.Body.ReturnValue != null && typeof(Stream) == message.Body.ReturnValue.Type)
+ {
+ // validate that there are no out or ref params
+ if (message.Body.Parts.Count > 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.NoOutOrRefParametersAllowedWithStreamResult, declaringOperation.Name, declaringOperation.DeclaringContract.Name)));
+ }
+ type = message.Body.ReturnValue.Type;
+ return true;
+ }
+
+ else
+ {
+ return false;
+ }
+ }
+ }
+
+ private static void ValidateAtMostOneStreamParameter(OperationDescription operation, bool request)
+ {
+ Type dummy;
+ if (request)
+ {
+ TryGetStreamParameterType(operation.Messages[0], operation, true, out dummy);
+ }
+ else
+ {
+ if (operation.Messages.Count > 1)
+ {
+ TryGetStreamParameterType(operation.Messages[1], operation, false, out dummy);
+ }
+ }
+ }
+
+ internal virtual DataContractJsonSerializerOperationFormatter CreateDataContractJsonSerializerOperationFormatter(OperationDescription od, DataContractSerializerOperationBehavior dcsob, bool isWrapped)
+ {
+ //return new DataContractJsonSerializerOperationFormatter(od, dcsob.MaxItemsInObjectGraph, dcsob.IgnoreExtensionDataObject, isWrapped, false, JavascriptCallbackParameterName);
+
+ OperationDescription clonedOperation = new OperationDescription(od.Name, od.DeclaringContract);
+ foreach (MessageDescription message in od.Messages)
+ {
+ MessageDescription clonedMessage = message.Clone();
+ if (IsValidReturnValue(clonedMessage.Body.ReturnValue))
+ {
+ if (clonedMessage.Body.Parts.Count == 0)
+ {
+ if (clonedMessage.Body.ReturnValue.Type == typeof(Stream))
+ {
+ clonedMessage.Body.WrapperName = JsonGlobals.RootString;
+ clonedMessage.Body.WrapperNamespace = string.Empty;
+ }
+ }
+ }
+ else
+ {
+ if (clonedMessage.Body.Parts.Count == 1)
+ {
+ if (clonedMessage.Body.Parts[0].Type == typeof(Stream))
+ {
+ clonedMessage.Body.WrapperName = JsonGlobals.RootString;
+ clonedMessage.Body.WrapperNamespace = string.Empty;
+ }
+ }
+ }
+
+ clonedOperation.Messages.Add(clonedMessage);
+ }
+
+ return new DataContractJsonSerializerOperationFormatter(clonedOperation, dcsob.MaxItemsInObjectGraph, dcsob.IgnoreExtensionDataObject, isWrapped, false, null);
+ }
+
+ private static MessagePartDescription GetStreamPart(MessageDescription messageDescription)
+ {
+ if (IsValidReturnValue(messageDescription.Body.ReturnValue))
+ {
+ if (messageDescription.Body.Parts.Count == 0)
+ {
+ if (messageDescription.Body.ReturnValue.Type == typeof(Stream))
+ {
+ return messageDescription.Body.ReturnValue;
+ }
+ }
+ }
+ else
+ {
+ if (messageDescription.Body.Parts.Count == 1)
+ {
+ if (messageDescription.Body.Parts[0].Type == typeof(Stream))
+ {
+ return messageDescription.Body.Parts[0];
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static bool IsValidReturnValue(MessagePartDescription returnValue) => (returnValue != null) && (returnValue.Type != typeof(void));
+
+ internal WebMessageFormat GetRequestFormat(OperationDescription od)
+ {
+ WebGetAttribute wga = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ WebInvokeAttribute wia = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ EnsureOk(wga, wia, od);
+ if (wga != null)
+ {
+ return wga.IsRequestFormatSetExplicitly ? wga.RequestFormat : DefaultOutgoingRequestFormat;
+ }
+ else if (wia != null)
+ {
+ return wia.IsRequestFormatSetExplicitly ? wia.RequestFormat : DefaultOutgoingRequestFormat;
+ }
+ else
+ {
+ return DefaultOutgoingRequestFormat;
+ }
+ }
+
+ internal WebMessageFormat GetResponseFormat(OperationDescription od)
+ {
+ WebGetAttribute wga = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ WebInvokeAttribute wia = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ EnsureOk(wga, wia, od);
+ if (wga != null)
+ {
+ return wga.IsResponseFormatSetExplicitly ? wga.ResponseFormat : DefaultOutgoingResponseFormat;
+ }
+ else if (wia != null)
+ {
+ return wia.IsResponseFormatSetExplicitly ? wia.ResponseFormat : DefaultOutgoingResponseFormat;
+ }
+ else
+ {
+ return DefaultOutgoingResponseFormat;
+ }
+ }
+
+ private void ValidateBodyParameters(OperationDescription operation, bool request)
+ {
+ string method = GetWebMethod(operation);
+ if (request)
+ {
+ ValidateGETHasNoBody(operation, method);
+ }
+
+ // validate that if bare is chosen for request/response, then at most 1 parameter is possible
+ ValidateBodyStyle(operation, request);
+ // validate if the request or response body is a stream, no other body parameters
+ // can be specified
+ ValidateAtMostOneStreamParameter(operation, request);
+ }
+
+ private void ValidateBodyStyle(OperationDescription operation, bool request)
+ {
+ WebMessageBodyStyle style = GetBodyStyle(operation);
+ Type dummy;
+ if (request && IsBareRequest(style))
+ {
+ TryGetNonMessageParameterType(operation.Messages[0], operation, true, out dummy);
+ }
+
+ if (!request && operation.Messages.Count > 1 && IsBareResponse(style))
+ {
+ TryGetNonMessageParameterType(operation.Messages[1], operation, false, out dummy);
+ }
+ }
+
+ private void ValidateGETHasNoBody(OperationDescription operation, string method)
+ {
+ if (method == GET)
+ {
+ if (!IsUntypedMessage(operation.Messages[0]) && operation.Messages[0].Body.Parts.Count != 0)
+ {
+ if (!IsTypedMessage(operation.Messages[0]))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.GETCannotHaveBody, operation.Name, operation.DeclaringContract.Name, operation.Messages[0].Body.Parts[0].Name)));
+ }
+ else
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.GETCannotHaveMCParameter, operation.Name, operation.DeclaringContract.Name, operation.Messages[0].MessageType.Name)));
+ }
+ }
+ }
+ }
+
+ private void ValidateContract(ServiceEndpoint endpoint)
+ {
+ foreach (OperationDescription od in endpoint.Contract.Operations)
+ {
+ ValidateNoOperationHasEncodedXmlSerializer(od);
+ ValidateNoMessageContractHeaders(od.Messages[0], od.Name, endpoint.Contract.Name);
+ ValidateNoBareMessageContractWithMultipleParts(od.Messages[0], od.Name, endpoint.Contract.Name);
+ ValidateNoMessageContractWithStream(od.Messages[0], od.Name, endpoint.Contract.Name);
+ if (od.Messages.Count > 1)
+ {
+ ValidateNoMessageContractHeaders(od.Messages[1], od.Name, endpoint.Contract.Name);
+ ValidateNoBareMessageContractWithMultipleParts(od.Messages[1], od.Name, endpoint.Contract.Name);
+ ValidateNoMessageContractWithStream(od.Messages[1], od.Name, endpoint.Contract.Name);
+ }
+ }
+ }
+
+ internal static bool IsXmlSerializerFaultFormat(OperationDescription operationDescription)
+ {
+ XmlSerializerOperationBehavior xsob = ((KeyedByTypeCollection)operationDescription.OperationBehaviors).Find();
+
+ return (xsob != null && xsob.XmlSerializerFormatAttribute.SupportFaults);
+ }
+
+ private void ValidateNoMessageContractWithStream(MessageDescription md, string opName, string contractName)
+ {
+ if (IsTypedMessage(md))
+ {
+ foreach (MessagePartDescription description in md.Body.Parts)
+ {
+ if (description.Type == typeof(Stream))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ new InvalidOperationException(SR.Format(SR.StreamBodyMemberNotSupported, GetType().ToString(), contractName, opName, md.MessageType.ToString(), description.Name)));
+ }
+ }
+ }
+ }
+
+ private void ValidateNoOperationHasEncodedXmlSerializer(OperationDescription od)
+ {
+ XmlSerializerOperationBehavior xsob = ((KeyedByTypeCollection)od.OperationBehaviors).Find();
+ if (xsob != null && (xsob.XmlSerializerFormatAttribute.Style == OperationFormatStyle.Rpc || xsob.XmlSerializerFormatAttribute.Use == OperationFormatUse.Encoded))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.RpcEncodedNotSupportedForNoneMessageVersion, od.Name, od.DeclaringContract.Name, od.DeclaringContract.Namespace)));
+ }
+ }
+
+ private void ValidateNoBareMessageContractWithMultipleParts(MessageDescription md, string opName, string contractName)
+ {
+ if (IsTypedMessage(md) && md.Body.WrapperName == null)
+ {
+ if (md.Body.Parts.Count > 1)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.InvalidMessageContractWithoutWrapperName, opName, contractName, md.MessageType)));
+ }
+
+ if (md.Body.Parts.Count == 1 && md.Body.Parts[0].Multiple)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.MCAtMostOneRequestBodyParameterAllowedForUnwrappedMessages, opName, contractName, md.MessageType)));
+ }
+ }
+ }
+
+ private void ValidateNoMessageContractHeaders(MessageDescription md, string opName, string contractName)
+ {
+ if (md.Headers.Count != 0)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.InvalidMethodWithSOAPHeaders, opName, contractName)));
+ }
+ }
+
+ internal class MessagePassthroughFormatter : IClientMessageFormatter
+ {
+ public object DeserializeReply(Message message, object[] parameters) => message;
+
+ public Message SerializeRequest(MessageVersion messageVersion, object[] parameters) => parameters[0] as Message;
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/CompositeClientFormatter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/CompositeClientFormatter.cs
new file mode 100644
index 00000000000..8520a3a8754
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/CompositeClientFormatter.cs
@@ -0,0 +1,30 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.ServiceModel.Channels;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class CompositeClientFormatter : IClientMessageFormatter
+ {
+ private IClientMessageFormatter _reply;
+ private IClientMessageFormatter _request;
+
+ public CompositeClientFormatter(IClientMessageFormatter request, IClientMessageFormatter reply)
+ {
+ _request = request;
+ _reply = reply;
+ }
+
+ public object DeserializeReply(Message message, object[] parameters)
+ {
+ return _reply.DeserializeReply(message, parameters);
+ }
+
+ public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)
+ {
+ return _request.SerializeRequest(messageVersion, parameters);
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/ContentTypeSettingClientMessageFormatter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/ContentTypeSettingClientMessageFormatter.cs
new file mode 100644
index 00000000000..791878ab042
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/ContentTypeSettingClientMessageFormatter.cs
@@ -0,0 +1,78 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Net;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Web;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class ContentTypeSettingClientMessageFormatter : IClientMessageFormatter
+ {
+ private IClientMessageFormatter _innerFormatter;
+ private string _outgoingContentType;
+
+ public ContentTypeSettingClientMessageFormatter(string outgoingContentType, IClientMessageFormatter innerFormatter)
+ {
+ if (outgoingContentType == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(outgoingContentType));
+ }
+ if (innerFormatter == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(innerFormatter));
+ }
+ _outgoingContentType = outgoingContentType;
+ _innerFormatter = innerFormatter;
+ }
+
+ public object DeserializeReply(Message message, object[] parameters)
+ {
+ return _innerFormatter.DeserializeReply(message, parameters);
+ }
+
+ public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)
+ {
+ Message message = _innerFormatter.SerializeRequest(messageVersion, parameters);
+ if (message != null)
+ {
+ AddRequestContentTypeProperty(message, _outgoingContentType);
+ }
+ return message;
+ }
+
+ private static void AddRequestContentTypeProperty(Message message, string contentType)
+ {
+ if (message == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(message));
+ }
+ if (contentType == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(contentType));
+ }
+ // dotnet/wcf's WebOperationContext (client subset) does not expose OutgoingRequest
+ // (server-side OutgoingResponse is what we have). Fall through to the message-property
+ // path which is the canonical way to set request content-type on outgoing client messages.
+ {
+ object prop;
+ message.Properties.TryGetValue(HttpRequestMessageProperty.Name, out prop);
+ HttpRequestMessageProperty httpProperty;
+ if (prop != null)
+ {
+ httpProperty = (HttpRequestMessageProperty)prop;
+ }
+ else
+ {
+ httpProperty = new HttpRequestMessageProperty();
+ message.Properties.Add(HttpRequestMessageProperty.Name, httpProperty);
+ }
+ if (string.IsNullOrEmpty(httpProperty.Headers[HttpRequestHeader.ContentType]))
+ {
+ httpProperty.Headers[HttpRequestHeader.ContentType] = contentType;
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/DataContractJsonSerializerOperationFormatter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/DataContractJsonSerializerOperationFormatter.cs
new file mode 100644
index 00000000000..9958c552af9
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/DataContractJsonSerializerOperationFormatter.cs
@@ -0,0 +1,667 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Json;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.Xml;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class DataContractJsonSerializerOperationFormatter : DataContractSerializerOperationFormatter
+ {
+ private readonly bool _isBareMessageContractReply;
+ private readonly bool _isBareMessageContractRequest;
+ // isWrapped is true when the user has explicitly chosen the response or request format to be Wrapped (allowed only in WebHttpBehavior)
+ private readonly bool _isWrapped;
+
+ private static readonly DataContractFormatAttribute s_defaultDataContractFormatAttribute = new DataContractFormatAttribute();
+
+ public DataContractJsonSerializerOperationFormatter(OperationDescription description, int maxItemsInObjectGraph, bool ignoreExtensionDataObject, bool isWrapped, bool useAspNetAjaxJson, string callbackParameterName)
+ : base(description, s_defaultDataContractFormatAttribute, new DataContractJsonSerializerOperationBehavior(description, maxItemsInObjectGraph, ignoreExtensionDataObject, useAspNetAjaxJson))
+ {
+ if (requestMessageInfo != null)
+ {
+ if (requestMessageInfo.WrapperName == null)
+ {
+ _isBareMessageContractRequest = true;
+ }
+ else
+ {
+ requestMessageInfo.WrapperName = JsonGlobals.RootDictionaryString;
+ requestMessageInfo.WrapperNamespace = XmlDictionaryString.Empty;
+ }
+ }
+
+ if (replyMessageInfo != null)
+ {
+ if (replyMessageInfo.WrapperName == null)
+ {
+ _isBareMessageContractReply = true;
+ }
+ else
+ {
+ if (useAspNetAjaxJson)
+ {
+ replyMessageInfo.WrapperName = JsonGlobals.DDictionaryString;
+ }
+ else
+ {
+ replyMessageInfo.WrapperName = JsonGlobals.RootDictionaryString;
+ }
+ replyMessageInfo.WrapperNamespace = XmlDictionaryString.Empty;
+ }
+ }
+
+ _isWrapped = isWrapped;
+ }
+
+ internal static bool IsJsonLocalName(XmlDictionaryReader reader, string elementName)
+ {
+ if (reader.IsStartElement(JsonGlobals.ItemDictionaryString, JsonGlobals.ItemDictionaryString))
+ {
+ if (reader.MoveToAttribute(JsonGlobals.ItemString))
+ {
+ return (reader.Value == elementName);
+ }
+ }
+
+ return false;
+ }
+
+ internal static bool IsStartElement(XmlDictionaryReader reader, string elementName)
+ {
+ if (reader.IsStartElement(elementName))
+ {
+ return true;
+ }
+
+ return IsJsonLocalName(reader, elementName);
+ }
+
+ internal static bool IsStartElement(XmlDictionaryReader reader, XmlDictionaryString elementName, XmlDictionaryString elementNamespace)
+ {
+ if (reader.IsStartElement(elementName, elementNamespace))
+ {
+ return true;
+ }
+
+ return IsJsonLocalName(reader, (elementName == null) ? null : elementName.Value);
+ }
+
+ protected override void AddHeadersToMessage(Message message, MessageDescription messageDescription, object[] parameters, bool isRequest)
+ {
+ if (message != null)
+ {
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.JsonProperty);
+ }
+
+ base.AddHeadersToMessage(message, messageDescription, parameters, isRequest);
+ }
+
+ protected override object DeserializeBody(XmlDictionaryReader reader, MessageVersion version, string action, MessageDescription messageDescription, object[] parameters, bool isRequest)
+ {
+ if (reader == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(reader)));
+ }
+
+ if (parameters == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(parameters)));
+ }
+
+ if (reader.EOF)
+ {
+ return null;
+ }
+
+ if ((isRequest && _isBareMessageContractRequest) || (!isRequest && _isBareMessageContractReply))
+ {
+ return DeserializeBareMessageContract(reader, parameters, isRequest);
+ }
+
+ object returnValue = null;
+
+ if (isRequest || _isWrapped)
+ {
+ ValidateTypeObjectAttribute(reader, isRequest);
+ returnValue = DeserializeBodyCore(reader, parameters, isRequest);
+ }
+ else
+ {
+ if (replyMessageInfo.ReturnPart != null)
+ {
+ PartInfo part = replyMessageInfo.ReturnPart;
+ DataContractJsonSerializer serializer = part.Serializer as DataContractJsonSerializer;
+
+ serializer = RecreateDataContractJsonSerializer(serializer, part.ContractType, JsonGlobals.RootString);
+ VerifyIsStartElement(reader, JsonGlobals.RootString);
+
+ if (serializer.IsStartObject(reader))
+ {
+ try
+ {
+ returnValue = part.ReadObject(reader, serializer);
+ }
+ catch (InvalidOperationException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameter, part.Description.Namespace, part.Description.Name), e));
+ }
+ catch (InvalidDataContractException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameter, part.Description.Namespace, part.Description.Name), e));
+ }
+ catch (FormatException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ OperationFormatter.CreateDeserializationFailedFault(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameterMore,
+ part.Description.Namespace, part.Description.Name, e.Message),
+ e));
+ }
+ catch (SerializationException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ OperationFormatter.CreateDeserializationFailedFault(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameterMore,
+ part.Description.Namespace, part.Description.Name, e.Message),
+ e));
+ }
+ }
+ }
+ else if (replyMessageInfo.BodyParts != null)
+ {
+ ValidateTypeObjectAttribute(reader, isRequest);
+ returnValue = DeserializeBodyCore(reader, parameters, isRequest);
+ }
+
+ while (reader.IsStartElement())
+ {
+ TraceAndSkipElement(reader);
+ }
+ }
+
+ return returnValue;
+ }
+
+ protected override void GetHeadersFromMessage(Message message, MessageDescription messageDescription, object[] parameters, bool isRequest)
+ {
+ if (message != null)
+ {
+ message.Properties.TryGetValue(WebBodyFormatMessageProperty.Name, out object prop);
+ WebBodyFormatMessageProperty formatProperty = (prop as WebBodyFormatMessageProperty);
+ if (formatProperty == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.MessageFormatPropertyNotFound2, OperationName)));
+ }
+ if (formatProperty.Format != WebContentFormat.Json)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.InvalidHttpMessageFormat3, OperationName, formatProperty.Format, WebContentFormat.Json)));
+ }
+ }
+
+ base.GetHeadersFromMessage(message, messageDescription, parameters, isRequest);
+ }
+
+ protected override void SerializeBody(XmlDictionaryWriter writer, MessageVersion version, string action, MessageDescription messageDescription, object returnValue, object[] parameters, bool isRequest)
+ {
+ if ((isRequest && _isBareMessageContractRequest) || (!isRequest && _isBareMessageContractReply))
+ {
+ SerializeBareMessageContract(writer, parameters, isRequest);
+ }
+ else
+ {
+ if (isRequest || _isWrapped)
+ {
+ SerializeBody(writer, returnValue, parameters, isRequest);
+ }
+ else
+ {
+ if (replyMessageInfo.ReturnPart != null)
+ {
+ DataContractJsonSerializer serializer = replyMessageInfo.ReturnPart.Serializer as DataContractJsonSerializer;
+ serializer = RecreateDataContractJsonSerializer(serializer, replyMessageInfo.ReturnPart.ContractType, JsonGlobals.RootString);
+
+ try
+ {
+ serializer.WriteObject(writer, returnValue);
+ }
+ catch (SerializationException sx)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CommunicationException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorSerializingParameter, replyMessageInfo.ReturnPart.Description.Namespace, replyMessageInfo.ReturnPart.Description.Name, sx.Message), sx));
+ }
+ }
+ else if (replyMessageInfo.BodyParts != null)
+ {
+ SerializeBody(writer, returnValue, parameters, isRequest);
+ }
+ }
+ }
+ }
+
+ private static DataContractJsonSerializer RecreateDataContractJsonSerializer(DataContractJsonSerializer serializer, Type type, string newRootName)
+ {
+ DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings
+ {
+ RootName = newRootName,
+ KnownTypes = serializer.KnownTypes,
+ MaxItemsInObjectGraph = serializer.MaxItemsInObjectGraph,
+ IgnoreExtensionDataObject = serializer.IgnoreExtensionDataObject,
+ EmitTypeInformation = serializer.EmitTypeInformation,
+ DateTimeFormat = serializer.DateTimeFormat,
+ UseSimpleDictionaryFormat = serializer.UseSimpleDictionaryFormat
+ };
+
+ return new DataContractJsonSerializer(type, settings);
+ }
+
+ private object DeserializeBareMessageContract(XmlDictionaryReader reader, object[] parameters, bool isRequest)
+ {
+ MessageInfo messageInfo;
+ if (isRequest)
+ {
+ messageInfo = requestMessageInfo;
+ }
+ else
+ {
+ messageInfo = replyMessageInfo;
+ }
+
+ if (messageInfo.BodyParts.Length > 0)
+ {
+ PartInfo part = messageInfo.BodyParts[0];
+ DataContractJsonSerializer serializer = part.Serializer as DataContractJsonSerializer;
+ serializer = RecreateDataContractJsonSerializer(serializer, part.ContractType, JsonGlobals.RootString);
+
+ while (reader.IsStartElement())
+ {
+ if (serializer.IsStartObject(reader))
+ {
+ try
+ {
+ parameters[part.Description.Index] = part.ReadObject(reader, serializer);
+ break;
+ }
+ catch (InvalidOperationException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameter, part.Description.Namespace, part.Description.Name), e));
+ }
+ catch (InvalidDataContractException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameter, part.Description.Namespace, part.Description.Name), e));
+ }
+ catch (FormatException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ OperationFormatter.CreateDeserializationFailedFault(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameterMore,
+ part.Description.Namespace, part.Description.Name, e.Message),
+ e));
+ }
+ catch (SerializationException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ OperationFormatter.CreateDeserializationFailedFault(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameterMore,
+ part.Description.Namespace, part.Description.Name, e.Message),
+ e));
+ }
+ }
+ else
+ {
+ TraceAndSkipElement(reader);
+ }
+ }
+ while (reader.IsStartElement())
+ {
+ TraceAndSkipElement(reader);
+ }
+ }
+
+ return null;
+ }
+
+ private object DeserializeBodyCore(XmlDictionaryReader reader, object[] parameters, bool isRequest)
+ {
+ MessageInfo messageInfo;
+ if (isRequest)
+ {
+ messageInfo = requestMessageInfo;
+ }
+ else
+ {
+ messageInfo = replyMessageInfo;
+ }
+
+ if (messageInfo.WrapperName != null)
+ {
+ VerifyIsStartElement(reader, messageInfo.WrapperName, messageInfo.WrapperNamespace);
+ bool isEmptyElement = reader.IsEmptyElement;
+ reader.Read();
+ if (isEmptyElement)
+ {
+ return null;
+ }
+ }
+
+ object returnValue = null;
+ DeserializeParameters(reader, messageInfo.BodyParts, parameters, messageInfo.ReturnPart, ref returnValue);
+ if (messageInfo.WrapperName != null)
+ {
+ reader.ReadEndElement();
+ }
+
+ return returnValue;
+ }
+
+ private object DeserializeParameter(XmlDictionaryReader reader, PartInfo part)
+ {
+ if (part.Description.Multiple)
+ {
+ ArrayList items = new ArrayList();
+ while (part.Serializer.IsStartObject(reader))
+ {
+ items.Add(DeserializeParameterPart(reader, part));
+ }
+
+ return items.ToArray(part.Description.Type);
+ }
+
+ return DeserializeParameterPart(reader, part);
+ }
+
+ private object DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part)
+ {
+ object val;
+ try
+ {
+ val = part.ReadObject(reader);
+ }
+ catch (InvalidOperationException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameter, part.Description.Namespace, part.Description.Name), e));
+ }
+ catch (InvalidDataContractException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameter, part.Description.Namespace, part.Description.Name), e));
+ }
+ catch (FormatException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ OperationFormatter.CreateDeserializationFailedFault(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameterMore,
+ part.Description.Namespace, part.Description.Name, e.Message),
+ e));
+ }
+ catch (SerializationException e)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ OperationFormatter.CreateDeserializationFailedFault(
+ SR.Format(SR.SFxInvalidMessageBodyErrorDeserializingParameterMore,
+ part.Description.Namespace, part.Description.Name, e.Message),
+ e));
+ }
+
+ return val;
+ }
+
+ private void DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, object[] parameters, PartInfo returnInfo, ref object returnValue)
+ {
+ bool[] setParameters = new bool[parameters.Length];
+ bool hasReadReturnValue = false;
+ int currentIndex = 0;
+
+ while (reader.IsStartElement())
+ {
+ bool hasReadParameter = false;
+
+ for (int i = 0, index = currentIndex; i < parts.Length; i++, index = (index + 1) % parts.Length)
+ {
+ PartInfo part = parts[index];
+ if (part.Serializer.IsStartObject(reader))
+ {
+ currentIndex = i;
+ parameters[part.Description.Index] = DeserializeParameter(reader, part);
+ setParameters[part.Description.Index] = true;
+ hasReadParameter = true;
+ }
+ }
+
+ if (!hasReadParameter)
+ {
+ if ((returnInfo != null) && !hasReadReturnValue && returnInfo.Serializer.IsStartObject(reader))
+ {
+ returnValue = DeserializeParameter(reader, returnInfo);
+ hasReadReturnValue = true;
+ }
+ else
+ {
+ TraceAndSkipElement(reader);
+ }
+ }
+ }
+
+ for (int i = 0; i < parameters.Length; i++)
+ {
+ if (!setParameters[i])
+ {
+ parameters[i] = null;
+ }
+ }
+ }
+
+ private void SerializeBareMessageContract(XmlDictionaryWriter writer, object[] parameters, bool isRequest)
+ {
+ if (writer == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(writer)));
+ }
+
+ if (parameters == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(parameters)));
+ }
+
+ MessageInfo messageInfo;
+ if (isRequest)
+ {
+ messageInfo = requestMessageInfo;
+ }
+ else
+ {
+ messageInfo = replyMessageInfo;
+ }
+
+ if (messageInfo.BodyParts.Length > 0)
+ {
+ PartInfo part = messageInfo.BodyParts[0];
+ DataContractJsonSerializer serializer = part.Serializer as DataContractJsonSerializer;
+ serializer = RecreateDataContractJsonSerializer(serializer, part.ContractType, JsonGlobals.RootString);
+
+ object graph = parameters[part.Description.Index];
+ try
+ {
+ serializer.WriteObject(writer, graph);
+ }
+ catch (SerializationException sx)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CommunicationException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorSerializingParameter, part.Description.Namespace, part.Description.Name, sx.Message), sx));
+ }
+ }
+ }
+
+ private void SerializeBody(XmlDictionaryWriter writer, object returnValue, object[] parameters, bool isRequest)
+ {
+ if (writer == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(writer)));
+ }
+
+ if (parameters == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(parameters)));
+ }
+
+ MessageInfo messageInfo;
+ if (isRequest)
+ {
+ messageInfo = requestMessageInfo;
+ }
+ else
+ {
+ messageInfo = replyMessageInfo;
+ }
+
+ if (messageInfo.WrapperName != null)
+ {
+ writer.WriteStartElement(messageInfo.WrapperName, messageInfo.WrapperNamespace);
+ writer.WriteAttributeString(JsonGlobals.TypeString, JsonGlobals.ObjectString);
+ }
+
+ if (messageInfo.ReturnPart != null)
+ {
+ SerializeParameter(writer, messageInfo.ReturnPart, returnValue);
+ }
+
+ SerializeParameters(writer, messageInfo.BodyParts, parameters);
+
+ if (messageInfo.WrapperName != null)
+ {
+ writer.WriteEndElement();
+ }
+ }
+
+ private void SerializeParameter(XmlDictionaryWriter writer, PartInfo part, object graph)
+ {
+ if (part.Description.Multiple)
+ {
+ if (graph != null)
+ {
+ foreach (object item in (IEnumerable)graph)
+ {
+ SerializeParameterPart(writer, part, item);
+ }
+ }
+ }
+ else
+ {
+ SerializeParameterPart(writer, part, graph);
+ }
+ }
+
+ private void SerializeParameterPart(XmlDictionaryWriter writer, PartInfo part, object graph)
+ {
+ try
+ {
+ part.Serializer.WriteObject(writer, graph);
+ }
+ catch (SerializationException sx)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CommunicationException(
+ SR.Format(SR.SFxInvalidMessageBodyErrorSerializingParameter, part.Description.Namespace, part.Description.Name, sx.Message), sx));
+ }
+ }
+
+ private void SerializeParameters(XmlDictionaryWriter writer, PartInfo[] parts, object[] parameters)
+ {
+ for (int i = 0; i < parts.Length; i++)
+ {
+ PartInfo part = parts[i];
+ object graph = parameters[part.Description.Index];
+ SerializeParameter(writer, part, graph);
+ }
+ }
+
+ private void ValidateTypeObjectAttribute(XmlDictionaryReader reader, bool isRequest)
+ {
+ MessageInfo messageInfo = isRequest ? requestMessageInfo : replyMessageInfo;
+ if (messageInfo.WrapperName != null)
+ {
+ if (!IsStartElement(reader, messageInfo.WrapperName, messageInfo.WrapperNamespace))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SerializationException(SR.Format(SR.SFxInvalidMessageBody, messageInfo.WrapperName, messageInfo.WrapperNamespace, reader.NodeType, reader.Name, reader.NamespaceURI)));
+ }
+
+ string typeAttribute = reader.GetAttribute(JsonGlobals.TypeString);
+ if (!typeAttribute.Equals(JsonGlobals.ObjectString, StringComparison.Ordinal))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
+ new SerializationException(SR.Format(SR.JsonFormatterExpectedAttributeObject, typeAttribute)));
+ }
+ }
+ }
+
+ private void VerifyIsStartElement(XmlDictionaryReader reader, string elementName)
+ {
+ bool foundElement = false;
+ while (reader.IsStartElement())
+ {
+ if (IsStartElement(reader, elementName))
+ {
+ foundElement = true;
+ break;
+ }
+ else
+ {
+ TraceAndSkipElement(reader);
+ }
+ }
+
+ if (!foundElement)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SerializationException(SR.Format(SR.SFxInvalidMessageBody, elementName, string.Empty, reader.NodeType, reader.Name, reader.NamespaceURI)));
+ }
+ }
+
+ private void VerifyIsStartElement(XmlDictionaryReader reader, XmlDictionaryString elementName, XmlDictionaryString elementNamespace)
+ {
+ bool foundElement = false;
+ while (reader.IsStartElement())
+ {
+ if (IsStartElement(reader, elementName, elementNamespace))
+ {
+ foundElement = true;
+ break;
+ }
+ else
+ {
+ TraceAndSkipElement(reader);
+ }
+ }
+
+ if (!foundElement)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SerializationException(SR.Format(SR.SFxInvalidMessageBody, elementName, elementNamespace, reader.NodeType, reader.Name, reader.NamespaceURI)));
+ }
+ }
+
+ private void WriteVoidReturn(XmlDictionaryWriter writer)
+ {
+ writer.WriteStartElement(JsonGlobals.DString);
+ writer.WriteAttributeString(JsonGlobals.TypeString, JsonGlobals.NullString);
+ writer.WriteEndElement();
+ }
+
+ private static void TraceAndSkipElement(XmlReader xmlReader)
+ {
+ //if (DiagnosticUtility.ShouldTraceVerbose)
+ //{
+ // TraceUtility.TraceEvent(TraceEventType.Verbose, TraceCode.ElementIgnored, SR.SFxTraceCodeElementIgnored, new StringTraceRecord("Element", xmlReader.NamespaceURI + ":" + xmlReader.LocalName));
+ //}
+ xmlReader.Skip();
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/HttpStreamFormatter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/HttpStreamFormatter.cs
new file mode 100644
index 00000000000..c0dad9fcb0a
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/HttpStreamFormatter.cs
@@ -0,0 +1,93 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.IO;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class HttpStreamFormatter : IClientMessageFormatter
+ {
+ private readonly string _contractName;
+ private readonly string _contractNs;
+ private readonly string _operationName;
+
+ public HttpStreamFormatter(OperationDescription operation)
+ {
+ if (operation == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(operation));
+ }
+
+ _operationName = operation.Name;
+ _contractName = operation.DeclaringContract.Name;
+ _contractNs = operation.DeclaringContract.Namespace;
+ }
+
+ public object DeserializeReply(Message message, object[] parameters)
+ {
+ return GetStreamFromMessage(message, false);
+ }
+
+ public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)
+ {
+ Message message = CreateMessageFromStream(parameters[0]);
+ if (parameters[0] == null)
+ {
+ SingleBodyParameterMessageFormatter.SuppressRequestEntityBody(message);
+ }
+ return message;
+ }
+
+ internal static bool IsEmptyMessage(Message message) => message.IsEmpty;
+
+ private Message CreateMessageFromStream(object data)
+ {
+ Message result;
+ if (data == null)
+ {
+ result = Message.CreateMessage(MessageVersion.None, (string)null);
+ }
+ else
+ {
+ if (!(data is Stream streamData))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.ParameterIsNotStreamType, data.GetType(), _operationName, _contractName, _contractNs)));
+ }
+
+ result = ByteStreamMessage.CreateMessage(streamData);
+ result.Properties[WebBodyFormatMessageProperty.Name] = WebBodyFormatMessageProperty.RawProperty;
+ }
+
+ return result;
+ }
+
+ private Stream GetStreamFromMessage(Message message, bool isRequest)
+ {
+ message.Properties.TryGetValue(WebBodyFormatMessageProperty.Name, out object prop);
+ WebBodyFormatMessageProperty formatProperty = (prop as WebBodyFormatMessageProperty);
+ if (formatProperty == null)
+ {
+ // GET and DELETE do not go through the encoder
+ if (IsEmptyMessage(message))
+ {
+ return new MemoryStream();
+ }
+ else
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.Format(SR.MessageFormatPropertyNotFound, _operationName, _contractName, _contractNs)));
+ }
+ }
+
+ if (formatProperty.Format != WebContentFormat.Raw)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.Format(SR.InvalidHttpMessageFormat, _operationName, _contractName, _contractNs, formatProperty.Format, WebContentFormat.Raw)));
+ }
+
+ return new StreamFormatter.MessageBodyStream(message, null, null, ByteStreamMessageUtility.StreamElementName, string.Empty, isRequest);
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/JsonFormatMapping.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/JsonFormatMapping.cs
new file mode 100644
index 00000000000..b588050cd72
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/JsonFormatMapping.cs
@@ -0,0 +1,47 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Web;
+using System.Text;
+using System.Xml;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class JsonFormatMapping : MultiplexingFormatMapping
+ {
+ public static readonly WebContentFormat WebContentFormat = WebContentFormat.Json;
+
+ private static readonly string s_defaultMediaType = JsonGlobals.ApplicationJsonMediaType;
+ private static readonly Dictionary s_encoders = new Dictionary();
+ private static readonly object s_thisLock = new object();
+
+ public JsonFormatMapping(Encoding writeEncoding, WebContentTypeMapper contentTypeMapper)
+ : base(writeEncoding, contentTypeMapper)
+ { }
+
+ public override WebContentFormat ContentFormat => WebContentFormat;
+
+ public override WebMessageFormat MessageFormat => WebMessageFormat.Json;
+
+ public override string DefaultMediaType => s_defaultMediaType;
+
+ protected override MessageEncoder Encoder
+ {
+ get
+ {
+ lock (s_thisLock)
+ {
+ if (!s_encoders.ContainsKey(_writeEncoding))
+ {
+ s_encoders[_writeEncoding] = new JsonMessageEncoderFactory(_writeEncoding, 0, 0, new XmlDictionaryReaderQuotas(), false).Encoder;
+ }
+ }
+
+ return s_encoders[_writeEncoding];
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/MultiplexingFormatMapping.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/MultiplexingFormatMapping.cs
new file mode 100644
index 00000000000..20c0190d0c8
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/MultiplexingFormatMapping.cs
@@ -0,0 +1,89 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Net.Mime;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Web;
+using System.Text;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal abstract class MultiplexingFormatMapping
+ {
+ protected Encoding _writeEncoding;
+ protected string _writeCharset;
+ protected WebContentTypeMapper _contentTypeMapper;
+ private ContentType _defaultContentType;
+
+ public abstract WebMessageFormat MessageFormat { get; }
+
+ public abstract WebContentFormat ContentFormat { get; }
+
+ public abstract string DefaultMediaType { get; }
+
+ protected abstract MessageEncoder Encoder { get; }
+
+ public ContentType DefaultContentType
+ {
+ get
+ {
+ if (_defaultContentType == null)
+ {
+ _defaultContentType = new ContentType(DefaultMediaType) { CharSet = _writeCharset };
+ }
+
+ return _defaultContentType;
+ }
+ }
+
+ public MultiplexingFormatMapping(Encoding writeEncoding, WebContentTypeMapper contentTypeMapper)
+ {
+ if (writeEncoding == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(writeEncoding));
+ }
+
+ _writeEncoding = writeEncoding;
+ _writeCharset = TextEncoderDefaults.EncodingToCharSet(writeEncoding);
+ _contentTypeMapper = contentTypeMapper;
+ }
+
+ public bool CanFormatResponse(ContentType acceptHeaderElement, bool matchCharset, out ContentType contentType)
+ {
+ if (acceptHeaderElement == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(acceptHeaderElement));
+ }
+
+ // Scrub the content type so that it is only mediaType and the charset
+ string charset = acceptHeaderElement.CharSet;
+ contentType = new ContentType(acceptHeaderElement.MediaType);
+ contentType.CharSet = DefaultContentType.CharSet;
+ string contentTypeStr = contentType.ToString();
+
+ if (matchCharset &&
+ !string.IsNullOrEmpty(charset) &&
+ !string.Equals(charset, DefaultContentType.CharSet, StringComparison.OrdinalIgnoreCase))
+ {
+ return false;
+ }
+
+ if (_contentTypeMapper != null &&
+ _contentTypeMapper.GetMessageFormatForContentType(contentType.MediaType) == ContentFormat)
+ {
+ return true;
+ }
+
+ if (Encoder.IsContentTypeSupported(contentTypeStr) &&
+ (charset == null || contentType.CharSet == DefaultContentType.CharSet))
+ {
+ return true;
+ }
+
+ contentType = null;
+ return false;
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/NameValueCache.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/NameValueCache.cs
new file mode 100644
index 00000000000..ac4393fac2b
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/NameValueCache.cs
@@ -0,0 +1,57 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class NameValueCache
+ {
+ // The NameValueCache implements a structure that uses a dictionary to map objects to
+ // indices of an array of cache entries. This allows us to store the cache entries in
+ // the order in which they were added to the cache, and yet still lookup any cache entry.
+ // The eviction policy of the cache is to evict the least-recently-added cache entry.
+ // Using a pointer to the next available cache entry in the array, we can always be sure
+ // that the given entry is the oldest entry.
+ private readonly Hashtable _cache;
+ private readonly string[] _currentKeys;
+ private int _nextAvailableCacheIndex;
+ internal const int MaxNumberofEntriesInCache = 16;
+
+ public NameValueCache()
+ : this(MaxNumberofEntriesInCache)
+ {
+ }
+
+ public NameValueCache(int maxCacheEntries)
+ {
+ _cache = new Hashtable();
+ _currentKeys = new string[maxCacheEntries];
+ }
+
+ public T Lookup(string key)
+ {
+ return (T)_cache[key];
+ }
+
+ public void AddOrUpdate(string key, T value)
+ {
+ lock (_cache)
+ {
+ if (!_cache.ContainsKey(key))
+ {
+ if (!string.IsNullOrEmpty(_currentKeys[_nextAvailableCacheIndex]))
+ {
+ _cache.Remove(_currentKeys[_nextAvailableCacheIndex]);
+ }
+
+ _currentKeys[_nextAvailableCacheIndex] = key;
+ _nextAvailableCacheIndex = ++_nextAvailableCacheIndex % _currentKeys.Length;
+ }
+
+ _cache[key] = value;
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/QueryStringConverter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/QueryStringConverter.cs
new file mode 100644
index 00000000000..dc7d5e167cd
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/QueryStringConverter.cs
@@ -0,0 +1,320 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections;
+using System.Collections.Frozen;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Globalization;
+using System.Reflection;
+using System.Runtime;
+using System.Runtime.InteropServices;
+using System.Xml;
+
+namespace System.ServiceModel.Dispatcher
+{
+ public class QueryStringConverter
+ {
+ // The set of types the converter supports out of the box never changes, so it is a single
+ // shared FrozenSet rather than a per-instance Hashtable (fast, allocation-free lookups).
+ private static readonly System.Collections.Frozen.FrozenSet s_defaultSupportedQueryStringTypes =
+ new[]
+ {
+ typeof(byte), typeof(sbyte), typeof(short), typeof(int), typeof(long),
+ typeof(ushort), typeof(uint), typeof(ulong), typeof(float), typeof(double),
+ typeof(bool), typeof(char), typeof(decimal), typeof(string), typeof(object),
+ typeof(DateTime), typeof(TimeSpan), typeof(byte[]), typeof(Guid), typeof(Uri),
+ typeof(DateTimeOffset),
+ }.ToFrozenSet();
+
+ // the cache does not have a quota since it is per endpoint and is
+ // bounded by the number of types in the contract at the endpoint
+ private readonly Hashtable _typeConverterCache;
+
+ public QueryStringConverter()
+ {
+ _typeConverterCache = new Hashtable();
+ }
+
+ public virtual bool CanConvert(Type type)
+ {
+ if (s_defaultSupportedQueryStringTypes.Contains(type))
+ {
+ return true;
+ }
+
+ // otherwise check if its an enum
+ if (typeof(Enum).IsAssignableFrom(type))
+ {
+ return true;
+ }
+
+ // check if there's a typeconverter defined on the type
+ return (GetStringConverter(type) != null);
+ }
+
+ public virtual object ConvertStringToValue(string parameter, Type parameterType)
+ {
+ if (parameterType == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(parameterType));
+ }
+
+ switch (Type.GetTypeCode(parameterType))
+ {
+ case TypeCode.Byte:
+ return parameter == null ? default : XmlConvert.ToByte(parameter);
+ case TypeCode.SByte:
+ return parameter == null ? default : XmlConvert.ToSByte(parameter);
+ case TypeCode.Int16:
+ return parameter == null ? default : XmlConvert.ToInt16(parameter);
+ case TypeCode.Int32:
+ {
+ if (typeof(Enum).IsAssignableFrom(parameterType))
+ {
+ return Enum.Parse(parameterType, parameter, true);
+ }
+ else
+ {
+ return parameter == null ? default : XmlConvert.ToInt32(parameter);
+ }
+ }
+ case TypeCode.Int64:
+ return parameter == null ? default : XmlConvert.ToInt64(parameter);
+ case TypeCode.UInt16:
+ return parameter == null ? default : XmlConvert.ToUInt16(parameter);
+ case TypeCode.UInt32:
+ return parameter == null ? default : XmlConvert.ToUInt32(parameter);
+ case TypeCode.UInt64:
+ return parameter == null ? default : XmlConvert.ToUInt64(parameter);
+ case TypeCode.Single:
+ return parameter == null ? default : XmlConvert.ToSingle(parameter);
+ case TypeCode.Double:
+ return parameter == null ? default : XmlConvert.ToDouble(parameter);
+ case TypeCode.Char:
+ return parameter == null ? default : XmlConvert.ToChar(parameter);
+ case TypeCode.Decimal:
+ return parameter == null ? default : XmlConvert.ToDecimal(parameter);
+ case TypeCode.Boolean:
+ return parameter == null ? default : Convert.ToBoolean(parameter, CultureInfo.InvariantCulture);
+ case TypeCode.String:
+ return parameter;
+ case TypeCode.DateTime:
+ return parameter == null ? default : DateTime.Parse(parameter, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
+ default:
+ {
+ if (parameterType == typeof(TimeSpan))
+ {
+ // support the XML as well as default way of representing timespans
+ TimeSpan result;
+ if (!TimeSpan.TryParse(parameter, out result))
+ {
+ result = parameter == null ? default : XmlConvert.ToTimeSpan(parameter);
+ }
+ return result;
+ }
+ else if (parameterType == typeof(Guid))
+ {
+ return parameter == null ? default : XmlConvert.ToGuid(parameter);
+ }
+ else if (parameterType == typeof(DateTimeOffset))
+ {
+ return (parameter == null) ? default : DateTimeOffset.Parse(parameter, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind | DateTimeStyles.AllowWhiteSpaces);
+ }
+ else if (parameterType == typeof(byte[]))
+ {
+ return (!string.IsNullOrEmpty(parameter)) ? Convert.FromBase64String(parameter) : new byte[] { };
+ }
+ else if (parameterType == typeof(Uri))
+ {
+ return (!string.IsNullOrEmpty(parameter)) ? new Uri(parameter, UriKind.RelativeOrAbsolute) : null;
+ }
+ else if (parameterType == typeof(object))
+ {
+ return parameter;
+ }
+ else
+ {
+ TypeConverter stringConverter = GetStringConverter(parameterType);
+ if (stringConverter == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(
+ SR.Format(
+ SR.TypeNotSupportedByQueryStringConverter,
+ parameterType.ToString(), GetType().Name)));
+ }
+
+ return stringConverter.ConvertFromInvariantString(parameter);
+ }
+ }
+ }
+ }
+
+ public virtual string ConvertValueToString(object parameter, Type parameterType)
+ {
+ if (parameterType == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(parameterType));
+ }
+
+ if (parameterType.IsValueType && parameter == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(parameter));
+ }
+
+ switch (Type.GetTypeCode(parameterType))
+ {
+ case TypeCode.Byte:
+ return XmlConvert.ToString((byte)parameter);
+ case TypeCode.SByte:
+ return XmlConvert.ToString((sbyte)parameter);
+ case TypeCode.Int16:
+ return XmlConvert.ToString((short)parameter);
+ case TypeCode.Int32:
+ {
+ if (typeof(Enum).IsAssignableFrom(parameterType))
+ {
+ return Enum.Format(parameterType, parameter, "G");
+ }
+ else
+ {
+ return XmlConvert.ToString((int)parameter);
+ }
+ }
+ case TypeCode.Int64:
+ return XmlConvert.ToString((long)parameter);
+ case TypeCode.UInt16:
+ return XmlConvert.ToString((ushort)parameter);
+ case TypeCode.UInt32:
+ return XmlConvert.ToString((uint)parameter);
+ case TypeCode.UInt64:
+ return XmlConvert.ToString((ulong)parameter);
+ case TypeCode.Single:
+ return XmlConvert.ToString((float)parameter);
+ case TypeCode.Double:
+ return XmlConvert.ToString((double)parameter);
+ case TypeCode.Char:
+ return XmlConvert.ToString((char)parameter);
+ case TypeCode.Decimal:
+ return XmlConvert.ToString((decimal)parameter);
+ case TypeCode.Boolean:
+ return XmlConvert.ToString((bool)parameter);
+ case TypeCode.String:
+ return (string)parameter;
+ case TypeCode.DateTime:
+ return XmlConvert.ToString((DateTime)parameter, XmlDateTimeSerializationMode.RoundtripKind);
+ default:
+ {
+ if (parameterType == typeof(TimeSpan))
+ {
+ return XmlConvert.ToString((TimeSpan)parameter);
+ }
+ else if (parameterType == typeof(Guid))
+ {
+ return XmlConvert.ToString((Guid)parameter);
+ }
+ else if (parameterType == typeof(DateTimeOffset))
+ {
+ return XmlConvert.ToString((DateTimeOffset)parameter);
+ }
+ else if (parameterType == typeof(byte[]))
+ {
+ return (parameter != null) ? Convert.ToBase64String((byte[])parameter, Base64FormattingOptions.None) : null;
+ }
+ else if (parameterType == typeof(Uri) || parameterType == typeof(object))
+ {
+ // URI or object
+ return (parameter != null) ? Convert.ToString(parameter, CultureInfo.InvariantCulture) : null;
+ }
+ else
+ {
+ TypeConverter stringConverter = GetStringConverter(parameterType);
+ if (stringConverter == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(
+ SR.Format(
+ SR.TypeNotSupportedByQueryStringConverter,
+ parameterType.ToString(), GetType().Name)));
+ }
+ else
+ {
+ return stringConverter.ConvertToInvariantString(parameter);
+ }
+ }
+ }
+ }
+ }
+
+ // hash table is safe for multiple readers single writer
+ private TypeConverter GetStringConverter(Type parameterType)
+ {
+ if (_typeConverterCache.ContainsKey(parameterType))
+ {
+ return (TypeConverter)_typeConverterCache[parameterType];
+ }
+
+ if (parameterType.GetCustomAttributes(typeof(TypeConverterAttribute), true) is TypeConverterAttribute[] typeConverterAttrs)
+ {
+ foreach (TypeConverterAttribute converterAttr in typeConverterAttrs)
+ {
+ Type converterType = Type.GetType(converterAttr.ConverterTypeName, false, true);
+ if (converterType != null)
+ {
+ TypeConverter converter = null;
+ Exception handledException = null;
+ try
+ {
+ converter = (TypeConverter)Activator.CreateInstance(converterType);
+ }
+ catch (TargetInvocationException e)
+ {
+ handledException = e;
+ }
+ catch (MemberAccessException e)
+ {
+ handledException = e;
+ }
+ catch (TypeLoadException e)
+ {
+ handledException = e;
+ }
+ catch (COMException e)
+ {
+ handledException = e;
+ }
+ catch (InvalidComObjectException e)
+ {
+ handledException = e;
+ }
+ finally
+ {
+ if (handledException != null)
+ {
+ if (Fx.IsFatal(handledException))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(handledException);
+ }
+ DiagnosticUtility.TraceHandledException(handledException, TraceEventType.Warning);
+ }
+ }
+
+ if (converter == null)
+ {
+ continue;
+ }
+
+ if (converter.CanConvertTo(typeof(string)) && converter.CanConvertFrom(typeof(string)))
+ {
+ _typeConverterCache.Add(parameterType, converter);
+ return converter;
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterDataContractMessageFormatter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterDataContractMessageFormatter.cs
new file mode 100644
index 00000000000..863510d1d10
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterDataContractMessageFormatter.cs
@@ -0,0 +1,245 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Json;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class SingleBodyParameterDataContractMessageFormatter : SingleBodyParameterMessageFormatter
+ {
+ private static readonly Type s_typeOfNullable = typeof(Nullable<>);
+ private static readonly Type[] s_collectionDataContractInterfaces = new Type[] { typeof(IEnumerable), typeof(IList), typeof(ICollection), typeof(IDictionary) };
+ private static readonly Type[] s_genericCollectionDataContractInterfaces = new Type[] { typeof(IEnumerable<>), typeof(IList<>), typeof(ICollection<>), typeof(IDictionary<,>) };
+ private XmlObjectSerializer _cachedOutputSerializer;
+ private Type _cachedOutputSerializerType;
+ private readonly bool _ignoreExtensionData;
+ private XmlObjectSerializer[] _inputSerializers;
+ private readonly IList _knownTypes;
+ private readonly int _maxItemsInObjectGraph;
+ private readonly Type _parameterDataContractType;
+ private readonly object _thisLock;
+ private readonly bool _useJsonFormat;
+ private readonly bool _isParameterCollectionInterfaceDataContract;
+ private readonly bool _isQueryable;
+
+ public SingleBodyParameterDataContractMessageFormatter(OperationDescription operation, Type parameterType, bool isRequestFormatter, bool useJsonFormat, DataContractSerializerOperationBehavior dcsob)
+ : base(operation, isRequestFormatter, "DataContractSerializer")
+ {
+ if (operation == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(operation));
+ }
+
+ if (parameterType == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(parameterType));
+ }
+
+ if (dcsob == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(dcsob));
+ }
+
+ _parameterDataContractType = DataContractHelpers.GetSubstituteDataContractType(parameterType, out _isQueryable);
+ _isParameterCollectionInterfaceDataContract = IsTypeCollectionInterface(_parameterDataContractType);
+ List tmp = new List();
+ if (operation.KnownTypes != null)
+ {
+ foreach (Type knownType in operation.KnownTypes)
+ {
+ tmp.Add(knownType);
+ }
+ }
+
+ Type nullableType = UnwrapNullableType(_parameterDataContractType);
+ if (nullableType != _parameterDataContractType)
+ {
+ tmp.Add(nullableType);
+ }
+
+ _ignoreExtensionData = dcsob.IgnoreExtensionDataObject;
+ _maxItemsInObjectGraph = dcsob.MaxItemsInObjectGraph;
+ _knownTypes = tmp.AsReadOnly();
+ ValidateType(_parameterDataContractType, _knownTypes);
+
+ _useJsonFormat = useJsonFormat;
+ CreateInputSerializers(_parameterDataContractType);
+
+ _thisLock = new object();
+ }
+
+ internal static Type UnwrapNullableType(Type type)
+ {
+ while (type.IsGenericType && type.GetGenericTypeDefinition() == s_typeOfNullable)
+ {
+ type = type.GetGenericArguments()[0];
+ }
+
+ return type;
+ }
+
+ // The logic of this method should be kept the same as
+ // System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo.ReadObject
+ protected override object ReadObject(Message message)
+ {
+ object val = base.ReadObject(message);
+ if (_isQueryable && val != null)
+ {
+ return Queryable.AsQueryable((IEnumerable)val);
+ }
+
+ return val;
+ }
+
+ protected override void AttachMessageProperties(Message message, bool isRequest)
+ {
+ if (_useJsonFormat)
+ {
+ message.Properties.Add(WebBodyFormatMessageProperty.Name, WebBodyFormatMessageProperty.JsonProperty);
+ }
+ }
+
+ protected override XmlObjectSerializer[] GetInputSerializers()
+ {
+ return _inputSerializers;
+ }
+
+ protected override XmlObjectSerializer GetOutputSerializer(Type type)
+ {
+ lock (_thisLock)
+ {
+ // if we already have a serializer for this type reuse it
+ if (_cachedOutputSerializerType != type)
+ {
+ Type typeForSerializer;
+ if (_isParameterCollectionInterfaceDataContract)
+ {
+ // if the parameterType is a collection interface, ensure the type implements it
+ if (!_parameterDataContractType.IsAssignableFrom(type))
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SerializationException(SR.Format(SR.TypeIsNotParameterTypeAndIsNotPresentInKnownTypes, type, OperationName, ContractName, _parameterDataContractType)));
+ }
+ typeForSerializer = _parameterDataContractType;
+ }
+ else
+ {
+ typeForSerializer = GetTypeForSerializer(type, _parameterDataContractType, _knownTypes);
+ }
+ _cachedOutputSerializer = CreateSerializer(typeForSerializer);
+ _cachedOutputSerializerType = type;
+ }
+
+ return _cachedOutputSerializer;
+ }
+ }
+
+ private static bool IsTypeCollectionInterface(Type parameterType)
+ {
+ if (parameterType.IsGenericType && parameterType.IsInterface)
+ {
+ Type genericTypeDef = parameterType.GetGenericTypeDefinition();
+ foreach (Type type in s_genericCollectionDataContractInterfaces)
+ {
+ if (genericTypeDef == type)
+ {
+ return true;
+ }
+ }
+ }
+
+ foreach (Type type in s_collectionDataContractInterfaces)
+ {
+ if (parameterType == type)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ protected override void ValidateMessageFormatProperty(Message message)
+ {
+ if (_useJsonFormat)
+ {
+ // useJsonFormat is always false in the green bits
+ message.Properties.TryGetValue(WebBodyFormatMessageProperty.Name, out object prop);
+ WebBodyFormatMessageProperty formatProperty = (prop as WebBodyFormatMessageProperty);
+ if (formatProperty == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.Format(SR.MessageFormatPropertyNotFound, OperationName, ContractName, ContractNs)));
+ }
+ if (formatProperty.Format != WebContentFormat.Json)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.Format(SR.InvalidHttpMessageFormat, OperationName, ContractName, ContractNs, formatProperty.Format, WebContentFormat.Json)));
+ }
+ }
+ else
+ {
+ base.ValidateMessageFormatProperty(message);
+ }
+ }
+
+ private static void ValidateType(Type parameterType, IEnumerable knownTypes)
+ {
+ XsdDataContractExporter dataContractExporter = new XsdDataContractExporter();
+ if (knownTypes != null)
+ {
+ ExportOptions options = new ExportOptions();
+
+ foreach (Type knownType in knownTypes)
+ {
+ options.KnownTypes.Add(knownType);
+ }
+
+ dataContractExporter.Options = options;
+ }
+
+ dataContractExporter.GetSchemaTypeName(parameterType); // throws if parameterType is not a valid data contract
+ }
+
+ private void CreateInputSerializers(Type type)
+ {
+ List tmp = new List();
+ tmp.Add(CreateSerializer(type));
+ foreach (Type knownType in _knownTypes)
+ {
+ tmp.Add(CreateSerializer(knownType));
+ }
+
+ _inputSerializers = tmp.ToArray();
+ }
+
+ private XmlObjectSerializer CreateSerializer(Type type)
+ {
+ if (_useJsonFormat)
+ {
+ return new DataContractJsonSerializer(type, new DataContractJsonSerializerSettings
+ {
+ KnownTypes = _knownTypes,
+ MaxItemsInObjectGraph = _maxItemsInObjectGraph,
+ IgnoreExtensionDataObject = _ignoreExtensionData,
+ EmitTypeInformation = EmitTypeInformation.AsNeeded
+ });
+ }
+ else
+ {
+ return new DataContractSerializer(type, new DataContractSerializerSettings
+ {
+ KnownTypes = _knownTypes,
+ MaxItemsInObjectGraph = _maxItemsInObjectGraph,
+ IgnoreExtensionDataObject = _ignoreExtensionData,
+ PreserveObjectReferences = false
+ });
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterMessageFormatter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterMessageFormatter.cs
new file mode 100644
index 00000000000..0241a2359af
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterMessageFormatter.cs
@@ -0,0 +1,246 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.ServiceModel.Web;
+using System.Xml;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal abstract class SingleBodyParameterMessageFormatter : IClientMessageFormatter
+ {
+ private readonly bool _isRequestFormatter;
+ private readonly string _serializerType;
+
+ protected SingleBodyParameterMessageFormatter(OperationDescription operation, bool isRequestFormatter, string serializerType)
+ {
+ if (operation == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(operation));
+ }
+
+ ContractName = operation.DeclaringContract.Name;
+ ContractNs = operation.DeclaringContract.Namespace;
+ OperationName = operation.Name;
+ _isRequestFormatter = isRequestFormatter;
+ _serializerType = serializerType;
+ }
+
+ protected string ContractName { get; }
+
+ protected string ContractNs { get; }
+
+ protected string OperationName { get; }
+
+ public static IClientMessageFormatter CreateXmlAndJsonClientFormatter(OperationDescription operation, Type type, bool isRequestFormatter, UnwrappedTypesXmlSerializerManager xmlSerializerManager, bool preferJson = false)
+ {
+ // The .NET Framework implementation builds a DemultiplexingClientMessageFormatter
+ // here that picks XML or JSON based on the actual response Content-Type. That class
+ // has not yet been ported to dotnet/wcf, so for now we honour the static choice
+ // declared on the operation's [WebGet]/[WebInvoke] ResponseFormat attribute.
+ bool useJson = preferJson && WebHttpBehavior.SupportsJsonFormat(operation);
+ return CreateClientFormatter(operation, type, isRequestFormatter, useJson, xmlSerializerManager);
+ }
+
+ public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)
+ {
+ if (!_isRequestFormatter)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.FormatterCannotBeUsedForRequestMessages)));
+ }
+ Message message = Message.CreateMessage(messageVersion, (string)null, CreateBodyWriter(parameters[0]));
+ if (parameters[0] == null)
+ {
+ SuppressRequestEntityBody(message);
+ }
+ AttachMessageProperties(message, true);
+ return message;
+ }
+
+ public object DeserializeReply(Message message, object[] parameters)
+ {
+ if (_isRequestFormatter)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.FormatterCannotBeUsedForReplyMessages)));
+ }
+ return ReadObject(message);
+ }
+
+ internal static IClientMessageFormatter CreateClientFormatter(OperationDescription operation, Type type, bool isRequestFormatter, bool useJson, UnwrappedTypesXmlSerializerManager xmlSerializerManager)
+ {
+ if (type == null)
+ {
+ return new NullMessageFormatter();
+ }
+ else if (useJson)
+ {
+ return CreateJsonFormatter(operation, type, isRequestFormatter);
+ }
+ else
+ {
+ return CreateXmlFormatter(operation, type, isRequestFormatter, xmlSerializerManager);
+ }
+ }
+
+ internal static void SuppressRequestEntityBody(Message message)
+ {
+ object prop;
+ message.Properties.TryGetValue(HttpRequestMessageProperty.Name, out prop);
+ HttpRequestMessageProperty httpProperty = prop as HttpRequestMessageProperty;
+ if (httpProperty == null)
+ {
+ httpProperty = new HttpRequestMessageProperty();
+ message.Properties[HttpRequestMessageProperty.Name] = httpProperty;
+ }
+ httpProperty.SuppressEntityBody = true;
+ }
+
+ protected virtual void AttachMessageProperties(Message message, bool isRequest)
+ {
+ }
+
+ protected abstract XmlObjectSerializer[] GetInputSerializers();
+
+ protected abstract XmlObjectSerializer GetOutputSerializer(Type type);
+
+ protected virtual void ValidateMessageFormatProperty(Message message)
+ {
+ }
+
+ protected Type GetTypeForSerializer(Type type, Type parameterType, IList knownTypes)
+ {
+ if (type == parameterType)
+ {
+ return type;
+ }
+ else if (knownTypes != null)
+ {
+ for (int i = 0; i < knownTypes.Count; ++i)
+ {
+ if (type == knownTypes[i])
+ {
+ return type;
+ }
+ }
+ }
+
+ return parameterType;
+ }
+
+ public static SingleBodyParameterMessageFormatter CreateXmlFormatter(OperationDescription operation, Type type, bool isRequestFormatter, UnwrappedTypesXmlSerializerManager xmlSerializerManager)
+ {
+ DataContractSerializerOperationBehavior dcsob = ((KeyedByTypeCollection)operation.OperationBehaviors).Find();
+ if (dcsob != null)
+ {
+ return new SingleBodyParameterDataContractMessageFormatter(operation, type, isRequestFormatter, false, dcsob);
+ }
+
+ XmlSerializerOperationBehavior xsob = ((KeyedByTypeCollection)operation.OperationBehaviors).Find();
+ if (xsob != null)
+ {
+ return new SingleBodyParameterXmlSerializerMessageFormatter(operation, type, isRequestFormatter, xsob, xmlSerializerManager);
+ }
+
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.Format(SR.OnlyDataContractAndXmlSerializerTypesInUnWrappedMode, operation.Name)));
+ }
+
+ public static SingleBodyParameterMessageFormatter CreateJsonFormatter(OperationDescription operation, Type type, bool isRequestFormatter)
+ {
+ DataContractSerializerOperationBehavior dcsob = ((KeyedByTypeCollection)operation.OperationBehaviors).Find();
+ if (dcsob == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.JsonFormatRequiresDataContract, operation.Name, operation.DeclaringContract.Name, operation.DeclaringContract.Namespace)));
+ }
+
+ return new SingleBodyParameterDataContractMessageFormatter(operation, type, isRequestFormatter, true, dcsob);
+ }
+
+ private BodyWriter CreateBodyWriter(object body)
+ {
+ XmlObjectSerializer serializer;
+ if (body != null)
+ {
+ serializer = GetOutputSerializer(body.GetType());
+ if (serializer == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.Format(SR.CannotSerializeType, body.GetType(), OperationName, ContractName, ContractNs, _serializerType)));
+ }
+ }
+ else
+ {
+ serializer = null;
+ }
+
+ return new SingleParameterBodyWriter(body, serializer);
+ }
+
+ protected virtual object ReadObject(Message message)
+ {
+ if (HttpStreamFormatter.IsEmptyMessage(message))
+ {
+ return null;
+ }
+
+ XmlObjectSerializer[] inputSerializers = GetInputSerializers();
+ XmlDictionaryReader reader = message.GetReaderAtBodyContents();
+ if (inputSerializers != null)
+ {
+ for (int i = 0; i < inputSerializers.Length; ++i)
+ {
+ if (inputSerializers[i].IsStartObject(reader))
+ {
+ return inputSerializers[i].ReadObject(reader, false);
+ }
+ }
+ }
+
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SerializationException(SR.Format(SR.CannotDeserializeBody, reader.LocalName, reader.NamespaceURI, OperationName, ContractName, ContractNs, _serializerType)));
+ }
+
+ internal class NullMessageFormatter : IClientMessageFormatter
+ {
+ public object DeserializeReply(Message message, object[] parameters)
+ {
+ return null;
+ }
+
+ public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)
+ {
+ Message request = Message.CreateMessage(messageVersion, (string)null);
+ SuppressRequestEntityBody(request);
+ return request;
+ }
+ }
+
+ internal class SingleParameterBodyWriter : BodyWriter
+ {
+ private readonly object _body;
+ private readonly XmlObjectSerializer _serializer;
+
+ public SingleParameterBodyWriter(object body, XmlObjectSerializer serializer)
+ : base(false)
+ {
+ if (body != null && serializer == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(serializer));
+ }
+
+ _body = body;
+ _serializer = serializer;
+ }
+
+ protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
+ {
+ if (_body != null)
+ {
+ _serializer.WriteObject(writer, _body);
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterXmlSerializerMessageFormatter.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterXmlSerializerMessageFormatter.cs
new file mode 100644
index 00000000000..21ba19e4159
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/SingleBodyParameterXmlSerializerMessageFormatter.cs
@@ -0,0 +1,117 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.ServiceModel.Description;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class SingleBodyParameterXmlSerializerMessageFormatter : SingleBodyParameterMessageFormatter
+ {
+ private XmlObjectSerializer _cachedOutputSerializer;
+ private Type _cachedOutputSerializerType;
+ private readonly List _knownTypes;
+ private readonly Type _parameterType;
+ private readonly UnwrappedTypesXmlSerializerManager _serializerManager;
+ private XmlObjectSerializer[] _serializers;
+ private readonly object _thisLock;
+ private UnwrappedTypesXmlSerializerManager.TypeSerializerPair[] _typeSerializerPairs;
+
+ public SingleBodyParameterXmlSerializerMessageFormatter(OperationDescription operation, Type parameterType, bool isRequestFormatter, XmlSerializerOperationBehavior xsob, UnwrappedTypesXmlSerializerManager serializerManager)
+ : base(operation, isRequestFormatter, "XmlSerializer")
+ {
+ if (operation == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(operation));
+ }
+
+ if (xsob == null)
+ {
+ throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(xsob));
+ }
+
+ _serializerManager = serializerManager ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(serializerManager));
+ _parameterType = parameterType ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(parameterType));
+ List operationTypes = new List();
+ operationTypes.Add(parameterType);
+ _knownTypes = new List();
+ if (operation.KnownTypes != null)
+ {
+ foreach (Type knownType in operation.KnownTypes)
+ {
+ _knownTypes.Add(knownType);
+ operationTypes.Add(knownType);
+ }
+ }
+
+ Type nullableType = SingleBodyParameterDataContractMessageFormatter.UnwrapNullableType(_parameterType);
+ if (nullableType != _parameterType)
+ {
+ _knownTypes.Add(nullableType);
+ operationTypes.Add(nullableType);
+ }
+
+ _serializerManager.RegisterType(this, operationTypes);
+ _thisLock = new object();
+ }
+
+ protected override XmlObjectSerializer[] GetInputSerializers()
+ {
+ lock (_thisLock)
+ {
+ EnsureSerializers();
+ return _serializers;
+ }
+ }
+
+ protected override XmlObjectSerializer GetOutputSerializer(Type type)
+ {
+ lock (_thisLock)
+ {
+ if (_cachedOutputSerializerType != type)
+ {
+ Type typeForSerializer = GetTypeForSerializer(type, _parameterType, _knownTypes);
+ EnsureSerializers();
+ bool foundSerializer = false;
+ if (_typeSerializerPairs != null)
+ {
+ for (int i = 0; i < _typeSerializerPairs.Length; ++i)
+ {
+ if (typeForSerializer == _typeSerializerPairs[i].Type)
+ {
+ _cachedOutputSerializer = _typeSerializerPairs[i].Serializer;
+ _cachedOutputSerializerType = type;
+ foundSerializer = true;
+ break;
+ }
+ }
+ }
+
+ if (!foundSerializer)
+ {
+ return null;
+ }
+ }
+
+ return _cachedOutputSerializer;
+ }
+ }
+
+ // must be called under a lock
+ private void EnsureSerializers()
+ {
+ if (_typeSerializerPairs == null)
+ {
+ _typeSerializerPairs = _serializerManager.GetOperationSerializers(this);
+ _serializers = new XmlObjectSerializer[_typeSerializerPairs.Length];
+ for (int i = 0; i < _typeSerializerPairs.Length; ++i)
+ {
+ _serializers[i] = _typeSerializerPairs[i].Serializer;
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/UnwrappedTypesXmlSerializerManager.cs b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/UnwrappedTypesXmlSerializerManager.cs
new file mode 100644
index 00000000000..41c13d1c149
--- /dev/null
+++ b/src/System.ServiceModel.Web/src/System/ServiceModel/Dispatcher/UnwrappedTypesXmlSerializerManager.cs
@@ -0,0 +1,160 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Runtime;
+using System.Runtime.Serialization;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace System.ServiceModel.Dispatcher
+{
+ internal class UnwrappedTypesXmlSerializerManager
+ {
+ private readonly Dictionary _allTypes;
+ private readonly XmlReflectionImporter _importer;
+ private readonly Dictionary