From 167834487840161560f2ea0e33812655e95a5156 Mon Sep 17 00:00:00 2001
From: Biroj Nayak <49173255+birojnayak@users.noreply.github.com>
Date: Fri, 2 Jun 2023 14:01:23 -0700
Subject: [PATCH 1/4] Unix domain socket binding on WCF Client
---
System.ServiceModel.sln | 20 +
.../Infrastructure/ConditionalWcfTest.cs | 5 +
.../UDS/Binding.UDS.IntegrationTests.csproj | 19 +
.../UDS/ServiceContract/EchoService.cs | 16 +
.../UDS/ServiceContract/IEchoService.cs | 22 +
.../Scenarios/Binding/UDS/ServiceHelper.cs | 121 +++
.../Scenarios/Binding/UDS/UDSBindingTests.cs | 300 ++++++
.../StreamSecurityUpgradeInitiatorBase.cs | 2 +-
.../Channels/StreamUpgradeInitiator.cs | 2 +-
.../src/System.ServiceModel.Primitives.csproj | 1 +
.../src/Resources/strings.resx | 207 +++++
.../src/Resources/xlf/strings.cs.xlf | 152 +++
.../src/Resources/xlf/strings.de.xlf | 152 +++
.../src/Resources/xlf/strings.es.xlf | 152 +++
.../src/Resources/xlf/strings.fr.xlf | 152 +++
.../src/Resources/xlf/strings.it.xlf | 152 +++
.../src/Resources/xlf/strings.ja.xlf | 152 +++
.../src/Resources/xlf/strings.ko.xlf | 152 +++
.../src/Resources/xlf/strings.pl.xlf | 152 +++
.../src/Resources/xlf/strings.pt-BR.xlf | 152 +++
.../src/Resources/xlf/strings.ru.xlf | 152 +++
.../src/Resources/xlf/strings.tr.xlf | 152 +++
.../src/Resources/xlf/strings.zh-Hans.xlf | 152 +++
.../src/Resources/xlf/strings.zh-Hant.xlf | 152 +++
...ystem.ServiceModel.UnixDomainSocket.csproj | 43 +
.../Channels/ChannelBindingUtility.cs | 13 +
.../Channels/SocketAwaitableEventArgs.cs | 128 +++
.../ServiceModel/Channels/SocketConnection.cs | 870 ++++++++++++++++++
.../Channels/SslProtocolsHelper.cs | 30 +
.../Channels/TransportDefaults.cs | 38 +
.../UnixDomainSocketChannelFactory.cs | 135 +++
.../UnixDomainSocketConnectionPoolSettings.cs | 127 +++
...UnixDomainSocketTransportBindingElement.cs | 114 +++
.../UnixPosixIdentityBindingElement.cs | 69 ++
...nixPosixIdentitySecurityUpgradeProvider.cs | 112 +++
.../Channels/UnsafeNativeMethods.cs | 24 +
.../src/System/ServiceModel/TimeSpanHelper.cs | 30 +
.../ServiceModel/UnixDomainSocketBinding.cs | 118 +++
.../UnixDomainSocketClientCredentialType.cs | 14 +
...xDomainSocketClientCredentialTypeHelper.cs | 18 +
.../ServiceModel/UnixDomainSocketSecurity.cs | 67 ++
.../UnixDomainSocketSecurityMode.cs | 23 +
.../UnixDomainSocketTransportSecurity.cs | 182 ++++
...DomainSocketTransportBindingElementTest.cs | 25 +
.../UnixDomainSocketBindingTest.cs | 106 +++
.../UnixDomainSocketSecurityTest.cs | 46 +
.../UnixDomainSocketTransportSecurityTest.cs | 42 +
...ServiceModel.UnixDomainSocket.Tests.csproj | 15 +
48 files changed, 5078 insertions(+), 2 deletions(-)
create mode 100644 src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/Binding.UDS.IntegrationTests.csproj
create mode 100644 src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/EchoService.cs
create mode 100644 src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/IEchoService.cs
create mode 100644 src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceHelper.cs
create mode 100644 src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/UDSBindingTests.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/strings.resx
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.cs.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.de.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.es.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.fr.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.it.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ja.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ko.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pl.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pt-BR.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ru.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.tr.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hans.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hant.xlf
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System.ServiceModel.UnixDomainSocket.csproj
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/ChannelBindingUtility.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/SocketAwaitableEventArgs.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/SocketConnection.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/SslProtocolsHelper.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/TransportDefaults.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/UnixDomainSocketChannelFactory.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/UnixDomainSocketConnectionPoolSettings.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/UnixDomainSocketTransportBindingElement.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/UnixPosixIdentityBindingElement.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/UnixPosixIdentitySecurityUpgradeProvider.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/UnsafeNativeMethods.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/TimeSpanHelper.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/UnixDomainSocketBinding.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/UnixDomainSocketClientCredentialType.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/UnixDomainSocketClientCredentialTypeHelper.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/UnixDomainSocketSecurity.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/UnixDomainSocketSecurityMode.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/UnixDomainSocketTransportSecurity.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/tests/Channels/UnixDomainSocketTransportBindingElementTest.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/tests/ServiceModel/UnixDomainSocketBindingTest.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/tests/ServiceModel/UnixDomainSocketSecurityTest.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/tests/ServiceModel/UnixDomainSocketTransportSecurityTest.cs
create mode 100644 src/System.ServiceModel.UnixDomainSocket/tests/System.ServiceModel.UnixDomainSocket.Tests.csproj
diff --git a/System.ServiceModel.sln b/System.ServiceModel.sln
index d950a43a275..64a9fe87fdd 100644
--- a/System.ServiceModel.sln
+++ b/System.ServiceModel.sln
@@ -17,6 +17,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.NetTcp"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.NetTcp.Tests", "src\System.ServiceModel.NetTcp\tests\System.ServiceModel.NetTcp.Tests.csproj", "{95C6CD71-6965-44E1-8F05-01F2F150B1E0}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.UnixDomainSocket.Tests", "src\System.ServiceModel.UnixDomainSocket\tests\System.ServiceModel.UnixDomainSocket.Tests.csproj", "{58918456-A2B2-431F-BB95-BAAD2818BFC7}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binding.Custom.IntegrationTests", "src\System.Private.ServiceModel\tests\Scenarios\Binding\Custom\Binding.Custom.IntegrationTests.csproj", "{D878F354-E120-476A-A90A-9E601A7E7580}"
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}"
@@ -83,6 +85,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.NetFram
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.NetNamedPipe", "src\System.ServiceModel.NetNamedPipe\src\System.ServiceModel.NetNamedPipe.csproj", "{5ECB8887-D7EE-449F-9439-35D0BBBB1E07}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.ServiceModel.UnixDomainSocket", "src\System.ServiceModel.UnixDomainSocket\src\System.ServiceModel.UnixDomainSocket.csproj", "{1664DB18-8451-43C0-8A85-2DD9189C3897}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binding.UDS.IntegrationTests", "src\System.Private.ServiceModel\tests\Scenarios\Binding\UDS\Binding.UDS.IntegrationTests.csproj", "{B7C7D4F1-DE4D-421B-9CE9-C7320A503D58}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -117,6 +123,10 @@ Global
{95C6CD71-6965-44E1-8F05-01F2F150B1E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95C6CD71-6965-44E1-8F05-01F2F150B1E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{95C6CD71-6965-44E1-8F05-01F2F150B1E0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58918456-A2B2-431F-BB95-BAAD2818BFC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58918456-A2B2-431F-BB95-BAAD2818BFC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58918456-A2B2-431F-BB95-BAAD2818BFC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58918456-A2B2-431F-BB95-BAAD2818BFC7}.Release|Any CPU.Build.0 = Release|Any CPU
{D878F354-E120-476A-A90A-9E601A7E7580}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D878F354-E120-476A-A90A-9E601A7E7580}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D878F354-E120-476A-A90A-9E601A7E7580}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -241,6 +251,14 @@ Global
{5ECB8887-D7EE-449F-9439-35D0BBBB1E07}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5ECB8887-D7EE-449F-9439-35D0BBBB1E07}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5ECB8887-D7EE-449F-9439-35D0BBBB1E07}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1664DB18-8451-43C0-8A85-2DD9189C3897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1664DB18-8451-43C0-8A85-2DD9189C3897}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1664DB18-8451-43C0-8A85-2DD9189C3897}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1664DB18-8451-43C0-8A85-2DD9189C3897}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7C7D4F1-DE4D-421B-9CE9-C7320A503D58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7C7D4F1-DE4D-421B-9CE9-C7320A503D58}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7C7D4F1-DE4D-421B-9CE9-C7320A503D58}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7C7D4F1-DE4D-421B-9CE9-C7320A503D58}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -249,6 +267,7 @@ Global
{10C03A32-1B1F-4EF8-8041-92C34DAD221E} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
{7805E0FD-3320-432B-91E1-D7BB7ABB781E} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
{95C6CD71-6965-44E1-8F05-01F2F150B1E0} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
+ {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}
{B38A2272-F260-4303-964C-ACDC9BADEB79} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
@@ -276,6 +295,7 @@ Global
{A3F8C509-AAE7-4391-9272-2221055CC17E} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
{E8E40B62-E737-4768-82C2-039E90ED9A39} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
{88918456-A2B2-431F-BB95-BAAD2818BFC7} = {DFDC71CF-6E65-481D-99D7-C35ED7EF6D4E}
+ {B7C7D4F1-DE4D-421B-9CE9-C7320A503D58} = {D6302510-AB10-4775-BCE9-98FA96FDEB76}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E0638FAC-BA6B-4E18-BAE6-468C3191BE58}
diff --git a/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs b/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs
index db7ba6de4a2..e46570bdc5f 100644
--- a/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs
+++ b/src/System.Private.ServiceModel/tests/Common/Infrastructure/ConditionalWcfTest.cs
@@ -98,6 +98,11 @@ public static bool Is_Windows()
ConditionalTestDetectors.IsWindows);
}
+ public static bool IsNotWindows()
+ {
+ return !Is_Windows();
+ }
+
// Returns 'true' if both the server and the client are domain-joined.
public static bool Domain_Joined()
{
diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/Binding.UDS.IntegrationTests.csproj b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/Binding.UDS.IntegrationTests.csproj
new file mode 100644
index 00000000000..492a0bc98df
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/Binding.UDS.IntegrationTests.csproj
@@ -0,0 +1,19 @@
+
+
+ $(ScenarioTestTargetFrameworks)
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/EchoService.cs b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/EchoService.cs
new file mode 100644
index 00000000000..276117cca5d
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/EchoService.cs
@@ -0,0 +1,16 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using CoreWCF;
+
+namespace Binding.UDS.IntegrationTests.ServiceContract
+{
+ [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
+ public class EchoService : IEchoService
+ {
+ public string Echo(string echo)
+ {
+ return echo;
+ }
+ }
+}
diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/IEchoService.cs b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/IEchoService.cs
new file mode 100644
index 00000000000..580ff0911c7
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceContract/IEchoService.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.ServiceModel;
+
+namespace Binding.UDS.IntegrationTests.ServiceContract
+{
+ internal static partial class Constants
+ {
+ public const string NS = "http://tempuri.org/";
+ public const string TESTSERVICE_NAME = nameof(IEchoService);
+ public const string OPERATION_BASE = NS + TESTSERVICE_NAME + "/";
+ }
+
+ [ServiceContract(Namespace = Constants.NS, Name = Constants.TESTSERVICE_NAME)]
+ public interface IEchoService
+ {
+ [OperationContract(Name = "Echo", Action = Constants.OPERATION_BASE + "Echo",
+ ReplyAction = Constants.OPERATION_BASE + "EchoResponse")]
+ string Echo(string echo);
+ }
+}
diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceHelper.cs b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceHelper.cs
new file mode 100644
index 00000000000..ffc63e61a4b
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/ServiceHelper.cs
@@ -0,0 +1,121 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Security.Cryptography.X509Certificates;
+using System.Threading.Tasks;
+using CoreWCF.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+namespace Binding.UDS.IntegrationTests
+{
+ internal class ServiceHelper
+ {
+ public static IHost CreateWebHostBuilder(string linuxSocketFilepath = "", [CallerMemberName] string callerMethodName = "") where TStartup : class
+ {
+ var startupType = typeof(TStartup);
+ var configureServicesMethod = startupType.GetMethod("ConfigureServices", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[] { typeof(IServiceCollection) });
+ var configureMethod = startupType.GetMethod("Configure", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, new Type[] { typeof(IHost) });
+ var startupInstance = Activator.CreateInstance(startupType);
+ var hostBuilder = Host.CreateDefaultBuilder(Array.Empty());
+ hostBuilder.UseUnixDomainSocket(options =>
+ {
+ options.Listen(new Uri("net.uds://" + linuxSocketFilepath));
+ });
+ if (configureServicesMethod != null)
+ {
+ var configureServiceAction = (Action)configureServicesMethod.CreateDelegate(typeof(Action), startupInstance);
+ hostBuilder.ConfigureServices(configureServiceAction);
+ }
+
+ IHost host = hostBuilder.Build();
+ if (configureMethod != null)
+ {
+ var configureAction = (Action)configureMethod.CreateDelegate(typeof(Action), startupInstance);
+ configureAction(host);
+ }
+
+ return host;
+ }
+
+
+ //only for test, don't use in production code
+ public static X509Certificate2 GetServiceCertificate()
+ {
+ string AspNetHttpsOid = "1.3.6.1.4.1.311.84.1.1";
+ X509Certificate2 foundCert = null;
+ using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
+ {
+ // X509Store.Certificates creates a new instance of X509Certificate2Collection with
+ // each access to the property. The collection needs to be cleaned up correctly so
+ // keeping a single reference to fetched collection.
+ store.Open(OpenFlags.ReadOnly);
+ var certificates = store.Certificates;
+ foreach (var cert in certificates)
+ {
+ foreach (var extension in cert.Extensions)
+ {
+ if (AspNetHttpsOid.Equals(extension.Oid?.Value))
+ {
+ // Always clone certificate instances when you don't own the creation
+ foundCert = new X509Certificate2(cert);
+ break;
+ }
+ }
+
+ if (foundCert != null)
+ {
+ break;
+ }
+ }
+ // Cleanup
+ foreach (var cert in certificates)
+ {
+ cert.Dispose();
+ }
+ }
+
+ if (foundCert == null)
+ {
+ foundCert = ServiceUtilHelper.ClientCertificate;
+ }
+
+ return foundCert;
+ }
+
+ public static void CloseServiceModelObjects(params System.ServiceModel.ICommunicationObject[] objects)
+ {
+ foreach (System.ServiceModel.ICommunicationObject comObj in objects)
+ {
+ try
+ {
+ if (comObj == null)
+ {
+ continue;
+ }
+ // Only want to call Close if it is in the Opened state
+ if (comObj.State == System.ServiceModel.CommunicationState.Opened)
+ {
+ comObj.Close();
+ }
+ // Anything not closed by this point should be aborted
+ if (comObj.State != System.ServiceModel.CommunicationState.Closed)
+ {
+ comObj.Abort();
+ }
+ }
+ catch (TimeoutException)
+ {
+ comObj.Abort();
+ }
+ catch (System.ServiceModel.CommunicationException)
+ {
+ comObj.Abort();
+ }
+ }
+ }
+ }
+}
diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/UDSBindingTests.cs b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/UDSBindingTests.cs
new file mode 100644
index 00000000000..21837176b7f
--- /dev/null
+++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/UDS/UDSBindingTests.cs
@@ -0,0 +1,300 @@
+// 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.Security.Cryptography.X509Certificates;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.ServiceModel.Description;
+using System.Threading.Tasks;
+using Binding.UDS.IntegrationTests;
+using Binding.UDS.IntegrationTests.ServiceContract;
+using CoreWCF.Configuration;
+using Infrastructure.Common;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Xunit;
+
+public partial class Binding_UDSBindingTests : ConditionalWcfTest
+{
+ // Simple echo of a string using NetTcpBinding on both client and server with SecurityMode=None
+ [WcfFact]
+ [OuterLoop]
+ public static void SecurityModeNone_Echo_RoundTrips_String()
+ {
+
+ string testString = new string('a', 3000);
+ IHost host = ServiceHelper.CreateWebHostBuilder(UDS.GetUDSFilePath());
+ using (host)
+ {
+ System.ServiceModel.ChannelFactory factory = null;
+ IEchoService serviceProxy = null;
+ host.Start();
+ try
+ {
+ System.ServiceModel.UnixDomainSocketBinding binding = new UnixDomainSocketBinding(UnixDomainSocketSecurityMode.None);
+ var uriBuilder = new UriBuilder()
+ {
+ Scheme = "net.uds",
+ Path = UDS.GetUDSFilePath()
+ };
+ factory = new System.ServiceModel.ChannelFactory(binding,
+ new System.ServiceModel.EndpointAddress(uriBuilder.ToString()));
+ serviceProxy = factory.CreateChannel();
+ ((IChannel)serviceProxy).Open();
+ string result = serviceProxy.Echo(testString);
+ Assert.Equal(testString, result);
+ ((IChannel)serviceProxy).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ServiceHelper.CloseServiceModelObjects((IChannel)serviceProxy, factory);
+ }
+ }
+ }
+
+ [WcfFact]
+ [OuterLoop]
+ [Condition(nameof(Windows_Authentication_Available),
+ nameof(WindowsOrSelfHosted))]
+ public void WindowsAuth()
+ {
+ string testString = new string('a', 3000);
+ IHost host = ServiceHelper.CreateWebHostBuilder(UDS.GetUDSFilePath());
+ using (host)
+ {
+ System.ServiceModel.ChannelFactory factory = null;
+ IEchoService channel = null;
+ host.Start();
+ try
+ {
+ System.ServiceModel.UnixDomainSocketBinding binding = new UnixDomainSocketBinding(System.ServiceModel.UnixDomainSocketSecurityMode.Transport);
+ binding.Security.Transport.ClientCredentialType = System.ServiceModel.UnixDomainSocketClientCredentialType.Windows;
+
+ var uriBuilder = new UriBuilder()
+ {
+ Scheme = "net.uds",
+ Path = UDS.GetUDSFilePath()
+ };
+ factory = new System.ServiceModel.ChannelFactory(binding,
+ new System.ServiceModel.EndpointAddress(uriBuilder.ToString()));
+ channel = factory.CreateChannel();
+ ((IChannel)channel).Open();
+ string result = channel.Echo(testString);
+ Assert.Equal(testString, result);
+ ((IChannel)channel).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ServiceHelper.CloseServiceModelObjects((IChannel)channel, factory);
+ }
+ }
+ }
+
+ [WcfFact]
+ [Condition(nameof(SSL_Available))]
+ [OuterLoop]
+ private void BasicCertAsTransport()
+ {
+ string testString = new string('a', 3000);
+ IHost host = ServiceHelper.CreateWebHostBuilder(UDS.GetUDSFilePath());
+ using (host)
+ {
+ host.Start();
+ System.ServiceModel.UnixDomainSocketBinding binding = new System.ServiceModel.UnixDomainSocketBinding(System.ServiceModel.UnixDomainSocketSecurityMode.Transport);
+ binding.Security.Transport.ClientCredentialType = System.ServiceModel.UnixDomainSocketClientCredentialType.Certificate;
+ var uriBuilder = new UriBuilder()
+ {
+ Scheme = "net.uds",
+ Path = UDS.GetUDSFilePath()
+ };
+ var cert = ServiceHelper.GetServiceCertificate();
+ var identity = new X509CertificateEndpointIdentity(cert);
+ var factory = new System.ServiceModel.ChannelFactory(binding,
+ new System.ServiceModel.EndpointAddress(new Uri(uriBuilder.ToString()), identity));
+
+ factory.Credentials.ServiceCertificate.SslCertificateAuthentication = new System.ServiceModel.Security.X509ServiceCertificateAuthentication
+ {
+ CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None,
+ RevocationMode = X509RevocationMode.NoCheck
+ };
+
+ ClientCredentials clientCredentials = (ClientCredentials)factory.Endpoint.EndpointBehaviors[typeof(ClientCredentials)];
+ clientCredentials.ClientCertificate.Certificate = cert; // this is a fake cert and we are not doing client cert validation
+ var channel = factory.CreateChannel();
+ try
+ {
+ ((IChannel)channel).Open();
+ string result = channel.Echo(testString);
+ Assert.Equal(testString, result);
+ ((IChannel)channel).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ServiceHelper.CloseServiceModelObjects((IChannel)channel, factory);
+ }
+ }
+ }
+
+ [WcfFact]
+ [OuterLoop]
+ [Condition(nameof(IsNotWindows))]
+ public void BasicIdentityOnlyAuthLinux()
+ {
+ string testString = new string('a', 3000);
+ IHost host = ServiceHelper.CreateWebHostBuilder(UDS.GetUDSFilePath());
+ using (host)
+ {
+ System.ServiceModel.ChannelFactory factory = null;
+ IEchoService channel = null;
+ host.Start();
+ try
+ {
+ System.ServiceModel.UnixDomainSocketBinding binding = new UnixDomainSocketBinding(UnixDomainSocketSecurityMode.TransportCredentialOnly);
+ binding.Security.Transport.ClientCredentialType = System.ServiceModel.UnixDomainSocketClientCredentialType.PosixIdentity;
+
+ factory = new System.ServiceModel.ChannelFactory(binding,
+ new System.ServiceModel.EndpointAddress(new Uri("net.uds://" + UDS.GetUDSFilePath())));
+ channel = factory.CreateChannel();
+ ((IChannel)channel).Open();
+ string result = channel.Echo(testString);
+ Assert.Equal(testString, result);
+ ((IChannel)channel).Close();
+ factory.Close();
+ }
+ finally
+ {
+ ServiceHelper.CloseServiceModelObjects((IChannel)channel, factory);
+ }
+ }
+ }
+
+ public class UDS
+ {
+ public static string GetUDSFilePath()
+ {
+ return Path.Combine(Path.GetTempPath(), "unix1.txt");
+ }
+ }
+
+ public class StartUpForUDS : UDS
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddServiceModelServices();
+ }
+
+ public void Configure(IHost host)
+ {
+ CoreWCF.UnixDomainSocketBinding serverBinding = new CoreWCF.UnixDomainSocketBinding(CoreWCF.SecurityMode.None);
+ host.UseServiceModel(builder =>
+ {
+ builder.AddService();
+ builder.AddServiceEndpoint(serverBinding, "net.uds://" + GetUDSFilePath());
+ });
+ }
+ }
+
+ public class StartupForWindowsAuth : UDS
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddServiceModelServices();
+ }
+
+ public void Configure(IHost host)
+ {
+ host.UseServiceModel(builder =>
+ {
+ builder.AddService();
+ var udsBinding = new CoreWCF.UnixDomainSocketBinding
+ {
+ Security = new CoreWCF.UnixDomainSocketSecurity
+ {
+ Mode = CoreWCF.SecurityMode.Transport,
+ Transport = new CoreWCF.UnixDomainSocketTransportSecurity
+ {
+ ClientCredentialType = CoreWCF.UnixDomainSocketClientCredentialType.Windows,
+ },
+ },
+ };
+
+ builder.AddServiceEndpoint(udsBinding, "net.uds://" + GetUDSFilePath());
+ });
+ }
+ }
+
+ public class StartupForUnixDomainSocketTransportCertificate : UDS
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddServiceModelServices();
+ }
+
+ public void Configure(IHost host)
+ {
+ host.UseServiceModel(builder =>
+ {
+ builder.AddService();
+ var udsBinding = new CoreWCF.UnixDomainSocketBinding
+ {
+ Security = new CoreWCF.UnixDomainSocketSecurity
+ {
+ Mode = CoreWCF.SecurityMode.Transport,
+ Transport = new CoreWCF.UnixDomainSocketTransportSecurity
+ {
+ ClientCredentialType = CoreWCF.UnixDomainSocketClientCredentialType.Certificate,
+ },
+ },
+ };
+
+ builder.AddServiceEndpoint(udsBinding, "net.uds://" + GetUDSFilePath());
+ Action serviceHost = host => ChangeHostBehavior(host);
+ builder.ConfigureServiceHostBase(serviceHost);
+ });
+ }
+
+ public void ChangeHostBehavior(CoreWCF.ServiceHostBase host)
+ {
+ var srvCredentials = host.Credentials;
+ //provide the certificate, here we are getting the default asp.net core default certificate, not recommended for prod workload.
+ srvCredentials.ServiceCertificate.Certificate = ServiceHelper.GetServiceCertificate();
+ srvCredentials.ClientCertificate.Authentication.CertificateValidationMode = CoreWCF.Security.X509CertificateValidationMode.None;
+ }
+ }
+
+ public class StartupForUnixDomainSocketTransportIdentity : UDS
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddServiceModelServices();
+ }
+
+ public void Configure(IHost host)
+ {
+ host.UseServiceModel(builder =>
+ {
+ builder.AddService();
+ var udsBinding = new CoreWCF.UnixDomainSocketBinding
+ {
+ Security = new CoreWCF.UnixDomainSocketSecurity
+ {
+ Mode = CoreWCF.SecurityMode.Transport,
+ Transport = new CoreWCF.UnixDomainSocketTransportSecurity
+ {
+ ClientCredentialType = CoreWCF.UnixDomainSocketClientCredentialType.IdentityOnly,
+ },
+ },
+ };
+
+ builder.AddServiceEndpoint(udsBinding, "net.uds://" + GetUDSFilePath());
+ });
+ }
+ }
+}
diff --git a/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamSecurityUpgradeInitiatorBase.cs b/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamSecurityUpgradeInitiatorBase.cs
index 774b74d375b..11995dc3a5b 100644
--- a/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamSecurityUpgradeInitiatorBase.cs
+++ b/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamSecurityUpgradeInitiatorBase.cs
@@ -42,7 +42,7 @@ public override SecurityMessageProperty GetRemoteSecurity()
return _remoteSecurity;
}
- internal override async Task InitiateUpgradeAsync(Stream stream)
+ public override async Task InitiateUpgradeAsync(Stream stream)
{
if (stream == null)
{
diff --git a/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamUpgradeInitiator.cs b/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamUpgradeInitiator.cs
index 860dce73365..d92e74a06e9 100644
--- a/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamUpgradeInitiator.cs
+++ b/src/System.ServiceModel.NetFramingBase/src/System/ServiceModel/Channels/StreamUpgradeInitiator.cs
@@ -10,7 +10,7 @@ public abstract class StreamUpgradeInitiator
{
protected StreamUpgradeInitiator() { }
public abstract string GetNextUpgrade();
- internal abstract Task InitiateUpgradeAsync(Stream stream);
+ public abstract Task InitiateUpgradeAsync(Stream stream);
internal virtual ValueTask OpenAsync(TimeSpan timeout) => default;
internal virtual ValueTask CloseAsync(TimeSpan timeout) => default;
}
diff --git a/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj b/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj
index ea56407ec80..2a13dae411f 100644
--- a/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj
+++ b/src/System.ServiceModel.Primitives/src/System.ServiceModel.Primitives.csproj
@@ -19,6 +19,7 @@
+
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/strings.resx b/src/System.ServiceModel.UnixDomainSocket/src/Resources/strings.resx
new file mode 100644
index 00000000000..99f43d70532
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/strings.resx
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ ClientCredentialType.None is not valid for the TransportWithMessageCredential security mode. Specify a message credential type or use a different security mode.
+
+
+ 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".
+
+
+ The protection level '{0}' was specified, yet SSL transport security only supports EncryptAndSign.
+
+
+ Timeout must be greater than or equal to TimeSpan.Zero. To disable timeout, specify TimeSpan.MaxValue.
+
+
+ Timeouts larger than Int32.MaxValue TotalMilliseconds (approximately 24 days) cannot be honored. To disable timeout, specify TimeSpan.MaxValue.
+
+
+ The value of this argument must be non-negative.
+
+
+ The specified channel type {0} is not supported by this channel manager.
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+ The socket connection has been disposed.
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+ Insufficient memory avaliable to complete the operation.
+
+
+ Cannot resolve the host name of URI "{0}" using DNS.
+
+
+ No DNS entries exist for host {0}.
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+ No IPEndpoints were found for host {0}.
+
+
+ The socket was aborted because an asynchronous receive from the socket did not complete within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+ The socket connection was aborted because an asynchronous send to the socket did not complete within the allotted timeout of {0}. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+ The value of this argument must be positive.
+
+
+ The remote endpoint of the socket ({0}) did not respond to a close request within the allotted timeout ({1}). It is likely that the remote endpoint is not calling Close after receiving the EOF signal (null) from Receive. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+ A graceful close was attempted on the socket, but the other side ({0}) is still sending data.
+
+
+ Process action '{0}'.
+
+
+ Server '{0}' sent back a fault indicating it is too busy to process the request. Please retry later. Please see the inner exception for fault details.
+
+
+ Server '{0}' sent back a fault indicating it is in the process of shutting down. Please see the inner exception for fault details.
+
+
+ Transfer mode {0} is not supported by {1}.
+
+
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.cs.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.cs.xlf
new file mode 100644
index 00000000000..7676d7c7d28
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.cs.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Zpracujte akci {0}.
+
+
+
+
+ Určený typ kanálu {0} není tímto správcem kanálů podporován.
+
+
+
+
+ Třída ClientCredentialType.None není pro režim zabezpečení TransportWithMessageCredential platný. Určete typ přihlašovacích údajů zprávy nebo použijte jiný režim zabezpečení.
+
+
+
+
+ Neexistují položky DNS hostitele {0}.
+
+
+
+
+ Rozšířená ochrana není na této platformě podporována. Instalujte odpovídající opravu nebo změňte vlastnost ExtendedProtectionPolicy objektu Binding nebo BindingElement na hodnotu s nastavením PolicyEnforcement Never nebo WhenSupported.
+
+
+
+
+ K dokončení operace není dostatek paměti.
+
+
+
+
+ Pro hostitele {0} nebyly nalezeny žádné třídy IPEndpoints.
+
+
+
+
+ Časový limit musí být větší než nula nebo se rovnat hodnotě TimeSpan.Zero. Pokud chcete časový limit zakázat, zadejte hodnotu TimeSpan.MaxValue.
+
+
+
+
+ Časový limit větší než hodnota Int32.MaxValue TotalMilliseconds (přibližně 24 dní) nelze akceptovat. Pokud chcete časový limit zakázat, zadejte hodnotu TimeSpan.MaxValue.
+
+
+
+
+ Server {0} odeslal zpět chybu, která udává, že probíhá jeho vypínání. Podrobné informace o chybě naleznete v popisu vnitřní výjimky.
+
+
+
+
+ Server {0} odeslal zpět chybu, která udává, že je příliš zaneprázdněn a nemůže zpracovat požadavek. Podrobné informace o chybě naleznete v popisu vnitřní výjimky.
+
+
+
+
+ Soket byl přerušen, protože se asynchronní příjem ze soketu nedokončil v rámci přiděleného časového limitu {0}. Čas přidělený této operaci byl pravděpodobně částí delšího časového limitu.
+
+
+
+
+ Připojení soketu bylo přerušeno, protože se asynchronní odeslání do soketu nedokončilo v rámci přiděleného časového limitu {0}. Čas přidělený této operaci byl pravděpodobně částí delšího časového limitu.
+
+
+
+
+ U soketu byl proveden pokus o řádné zavření, ale druhá strana ({0}) stále odesílá data.
+
+
+
+
+ Vzdálený koncový bod soketu ({0}) neodpověděl na požadavek zavření v rámci přiděleného časového limitu ({1}). Je pravděpodobné, že vzdálený koncový bod nevolá zavření po přijetí signálu EOF (null) z parametru Receive. Čas přidělený této operaci byl pravděpodobně částí delšího časového limitu.
+
+
+
+
+ Připojení soketu bylo zrušeno.
+
+
+
+
+ {1} nepodporuje režim přenosu {0}.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ Nelze vyřešit název hostitele identifikátoru URI {0} pomocí služby DNS.
+
+
+
+
+ Byla zadána úroveň zabezpečení {0}, ale zabezpečení přenosu SSL podporuje pouze EncryptAndSign.
+
+
+
+
+ Hodnota tohoto argumentu nesmí být záporná.
+
+
+
+
+ Hodnota tohoto argumentu musí být kladná.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.de.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.de.xlf
new file mode 100644
index 00000000000..0fb81e561ef
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.de.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Aktion "{0}" verarbeiten.
+
+
+
+
+ Der angegebene Kanaltyp {0} wird von diesem Kanal-Manager nicht unterstützt.
+
+
+
+
+ ClientCredentialType.None ist für den TransportWithMessageCredential-Sicherheitsmodus ungültig. Geben Sie einen Anmeldeinformationstyp für Nachrichten an, oder verwenden Sie einen anderen Sicherheitsmodus.
+
+
+
+
+ Für den Host {0} sind keine DNS-Einträge vorhanden.
+
+
+
+
+ Der erweiterte Schutz wird auf dieser Plattform nicht unterstützt. Installieren Sie einen geeigneten Patch, oder ändern Sie ExtendedProtectionPolicy der Bindung oder das BindingElement in einen Wert mit dem PolicyEnforcement-Wert "Never" oder "WhenSupported".
+
+
+
+
+ Es ist nicht ausreichend Arbeitsspeicher verfügbar, um den Vorgang abzuschließen.
+
+
+
+
+ Es wurden keine IPEndpoints für den Host {0} gefunden.
+
+
+
+
+ Das Zeitlimit muss größer oder gleich TimeSpan.Zero sein. Geben Sie den TimeSpan.MaxValue an, um das Zeitlimit zu deaktivieren.
+
+
+
+
+ Zeitlimits, die größer als Int32.MaxValue TotalMilliseconds (ca. 24 Tage) sind, können nicht akzeptiert werden. Geben Sie den TimeSpan.MaxValue an, um das Zeitlimit zu deaktivieren.
+
+
+
+
+ Der Server "{0}" hat einen Fehler zurückgesendet, der darauf hinweist, dass der Server gerade heruntergefahren wird. Detaillierte Fehlerinformationen finden Sie in der inneren Ausnahme.
+
+
+
+
+ Der Server "{0}" hat einen Fehler zurückgesendet, der darauf hinweist, dass er zu ausgelastet ist, um die Anforderung zu verarbeiten. Versuchen Sie es später noch mal. Detaillierte Fehlerinformationen finden Sie in der inneren Ausnahme.
+
+
+
+
+ Der Socket wurde abgebrochen, da ein asynchroner Empfangsvorgang vom Socket nicht innerhalb des zugewiesenen Zeitlimits von {0} abgeschlossen wurde. Der für diesen Vorgang zugewiesene Zeitraum war möglicherweise ein Teil eines längeren Zeitlimits.
+
+
+
+
+ Die Socketverbindung wurde abgebrochen, da ein asynchroner Sendevorgang an den Socket nicht innerhalb des zugewiesenen Zeitlimits von {0} abgeschlossen wurde. Der für diesen Vorgang zugewiesene Zeitraum war möglicherweise ein Teil eines längeren Zeitlimits.
+
+
+
+
+ Es wurde versucht, das Socket ordnungsgemäß zu schließen, aber die andere Seite ({0}) sendet weiterhin Daten.
+
+
+
+
+ Der Remoteendpunkt des Sockets ({0}) hat auf eine Anforderung zum Schließen nicht innerhalb des zugewiesenen Zeitlimits ({1}) geantwortet. Vermutlich ruft der Remoteendpunkt nach dem Empfang des EOF-Signals (NULL) von "Receive" nicht die Close-Methode auf. Der für diesen Vorgang zugewiesene Zeitraum war möglicherweise ein Teil eines längeren Zeitlimits.
+
+
+
+
+ Die Socketverbindung wurde verworfen.
+
+
+
+
+ Der Übertragungsmodus {0} wird von {1} nicht unterstützt.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ Der Hostname von URI "{0}" kann nicht mithilfe von DNS aufgelöst werden.
+
+
+
+
+ Die Schutzebene "{0}" war angegeben, die SSL-Transportsicherheit unterstützt jedoch nur EncryptAndSign.
+
+
+
+
+ Der Wert dieses Arguments darf keine negative Zahl sein.
+
+
+
+
+ Der Wert dieses Arguments muss positiv sein.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.es.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.es.xlf
new file mode 100644
index 00000000000..d82f259155b
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.es.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Procese la acción "{0}".
+
+
+
+
+ Este administrador de canales no admite el tipo de canal especificado {0}.
+
+
+
+
+ ClientCredentialType.None no es válido para el modo de seguridad TransportWithMessageCredential. Especifique un tipo de credencial de mensaje o use otro modo de seguridad.
+
+
+
+
+ No existen entradas DNS para el host {0}.
+
+
+
+
+ La protección extendida no se admite en esta plataforma. Instale la revisión correspondiente o cambie ExtendedProtectionPolicy en Binding o BindingElement por un valor de PolicyEnforcement "Never" o "WhenSupported".
+
+
+
+
+ No hay suficiente memoria disponible para completar la operación.
+
+
+
+
+ No se encontraron elementos IPEndpoints para el host {0}.
+
+
+
+
+ El tiempo de espera debe ser mayor o igual que TimeSpan.Zero. Para deshabilitar el tiempo de espera, especifique TimeSpan.MaxValue.
+
+
+
+
+ No se pueden aceptar valores de tiempo de espera mayores que Int32.MaxValue TotalMilliseconds (aproximadamente 24 días). Para deshabilitar el tiempo de espera, especifique TimeSpan.MaxValue.
+
+
+
+
+ El servidor '{0}' devolvió un error que indica que está en proceso de cerrarse. Consulte la excepción interna para obtener más información del error.
+
+
+
+
+ El servidor "{0}" devolvió un error que indica que está demasiado ocupado para procesar la solicitud. Inténtelo de nuevo más adelante. Consulte la excepción interna para obtener más información del error.
+
+
+
+
+ Se anuló el socket porque una recepción asincrónica del socket no se completó en el tiempo de espera asignado de {0}. El tiempo asignado a esta operación puede haber sido una parte de un tiempo de espera mayor.
+
+
+
+
+ Se anuló la conexión de socket porque un envío asincrónico al socket no se completó en el tiempo de espera asignado de {0}. El tiempo asignado a esta operación puede haber sido una parte de un tiempo de espera mayor.
+
+
+
+
+ Se intentó cerrar correctamente el socket, pero el otro lado ({0}) sigue enviando datos.
+
+
+
+
+ El punto de conexión remoto del socket ({0}) no respondió a una solicitud de cierre en el tiempo de espera asignado ({1}). Es probable que el punto de conexión remoto no llame a Close después de recibir la señal EOF (valor nulo) de Receive. El tiempo asignado a esta operación puede haber sido una parte de un tiempo de espera mayor.
+
+
+
+
+ Se desechó la conexión de socket.
+
+
+
+
+ El modo de transferencia {0} no se admite en {1}.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ No se puede resolver el nombre de host del URI "{0}" con DNS.
+
+
+
+
+ Se especificó el nivel de protección "{0}", pero la seguridad de transporte SSL solo admite EncryptAndSign.
+
+
+
+
+ El valor de este argumento no puede ser negativo.
+
+
+
+
+ El valor de este argumento debe ser positivo.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.fr.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.fr.xlf
new file mode 100644
index 00000000000..779a2b59b9c
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.fr.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Traiter l'action '{0}'.
+
+
+
+
+ Le type de canal {0} spécifié n'est pas pris en charge par ce gestionnaire de canaux.
+
+
+
+
+ ClientCredentialType.None est non valide pour le mode de sécurité TransportWithMessageCredential. Indiquez un type pour les informations d'identification de message ou utilisez un autre mode de sécurité.
+
+
+
+
+ Aucune entrée DNS n'existe pour l'hôte {0}.
+
+
+
+
+ La protection étendue n'est pas prise en charge sur cette plateforme. Installez le correctif approprié ou remplacez le ExtendedProtectionPolicy sur Binding ou BindingElement en par une valeur PolicyEnforcement de "Never" ou "WhenSupported".
+
+
+
+
+ Mémoire disponible insuffisante pour effectuer l'opération.
+
+
+
+
+ IPEndpoints introuvables pour l'hôte {0}.
+
+
+
+
+ Le délai d'expiration doit être supérieur ou égal à TimeSpan.Zero. Pour désactiver le délai d'expiration, spécifiez TimeSpan.MaxValue.
+
+
+
+
+ Les délais d'expiration supérieurs à Int32.MaxValue TotalMilliseconds (soit environ 24 jours) ne peuvent pas être appliqués. Pour désactiver le délai d'expiration, spécifiez TimeSpan.MaxValue.
+
+
+
+
+ Le serveur '{0}' a renvoyé une erreur indiquant qu'il est en cours d'arrêt. Consultez l'exception interne pour obtenir des détails sur l'erreur.
+
+
+
+
+ Le serveur '{0}' a envoyé une erreur indiquant qu'il est trop occupé pour traiter la requête. Réessayez plus tard. Consultez l'exception interne pour obtenir des détails sur l'erreur.
+
+
+
+
+ Le socket a été abandonné, car une réception asynchrone du socket ne s'est pas effectuée dans le délai imparti de {0}. Le temps alloué à cette opération fait peut-être partie d'un délai d'expiration plus long.
+
+
+
+
+ La connexion au socket a été abandonnée, car un envoi asynchrone au socket ne s'est pas effectué dans le délai imparti de {0}. Le temps alloué à cette opération fait peut-être partie d'un délai d'expiration plus long.
+
+
+
+
+ Une fermeture normale a été tentée sur le socket, mais l'autre côté ({0}) envoie toujours des données.
+
+
+
+
+ Le point de terminaison distant du socket ({0}) n'a pas répondu à une demande de fermeture dans le délai imparti ({1}). Il est probable que le point de terminaison distant n'appelle pas Close après avoir reçu le signal EOF (null) de la part de Receive. Le temps alloué à cette opération fait peut-être partie d'un délai d'expiration plus long.
+
+
+
+
+ La connexion au socket a été supprimée.
+
+
+
+
+ Le mode de transfert {0} n'est pas pris en charge par {1}.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ Impossible de résoudre le nom d'hôte de l'URI '{0}' à l'aide de DNS.
+
+
+
+
+ Le niveau de protection '{0}' a été spécifié, mais la sécurité du transport SSL prend uniquement en charge EncryptAndSign.
+
+
+
+
+ La valeur de cet argument doit être non négative.
+
+
+
+
+ La valeur de cet argument doit être positive.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.it.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.it.xlf
new file mode 100644
index 00000000000..6e688a89fe6
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.it.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Elaborazione dell'azione '{0}'.
+
+
+
+
+ Il tipo di canale specificato {0} non è supportato da questo gestore canali.
+
+
+
+
+ L'elemento ClientCredentialType.None non è valido per la modalità di sicurezza TransportWithMessageCredential. Specificare un tipo di credenziali messaggio o usare una modalità di sicurezza diversa.
+
+
+
+
+ Non esiste alcuna voce DNS per l'host {0}.
+
+
+
+
+ La protezione estesa non è supportata in questa piattaforma. Installare la patch appropriata o modificare ExtendedProtectionPolicy in Binding o BindingElement in un valore con PolicyEnforcement impostato sul valore "Never"o "WhenSupported".
+
+
+
+
+ La memoria disponibile non è sufficiente per completare l'operazione.
+
+
+
+
+ Non sono stati trovati elementi IPEndpoint per l'host {0}.
+
+
+
+
+ Il valore del timeout deve essere maggiore o uguale a TimeSpan.Zero. Per disabilitare il timeout, specificare TimeSpan.MaxValue.
+
+
+
+
+ Non è possibile rispettare i timeout in cui il valore di TotalMilliseconds è maggiore di Int32.MaxValue (circa 24 giorni). Per disabilitare il timeout, specificare TimeSpan.MaxValue.
+
+
+
+
+ Il server '{0}' ha restituito un errore che indica che è in fase di arresto. Per ulteriori informazioni sull'errore, vedere l'eccezione interna.
+
+
+
+
+ Il server '{0}' ha restituito un errore che indica che è troppo occupato per elaborare la richiesta. Riprovare più tardi. Per dettagli sull'errore, vedere l'eccezione interna.
+
+
+
+
+ Il socket è stato interrotto perché una ricezione asincrona dal socket non è stata completata entro il timeout allocato pari a {0}. È possibile che il tempo allocato a questa operazione fosse incluso in un timeout più lungo.
+
+
+
+
+ La connessione socket è stata interrotta perché un'operazione di invio asincrono al socket non è stata completata entro il timeout allocato pari a {0}. È possibile che il tempo allocato a questa operazione fosse incluso in un timeout più lungo.
+
+
+
+
+ Si è provato a eseguire la chiusura normale sul socket, ma l'altra parte ({0}) sta ancora inviando dati.
+
+
+
+
+ L'endpoint remoto del socket ({0}) non ha risposto a una richiesta di chiusura entro il timeout allocato pari a ({1}). È probabile che l'endpoint remoto non stia chiamando Close dopo aver ricevuto il segnale EOF (Null) da Receive. È possibile che il tempo allocato a questa operazione fosse incluso in un timeout più lungo.
+
+
+
+
+ La connessione socket è stata eliminata.
+
+
+
+
+ La modalità di trasferimento {0} non è supportata da {1}.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ Impossibile risolvere il nome host dell'URI "{0}" tramite DNS.
+
+
+
+
+ È stato specificato il livello di protezione '{0}', ma la sicurezza del trasporto SSL supporta solo EncryptAndSign.
+
+
+
+
+ Il valore di questo argomento non deve essere negativo.
+
+
+
+
+ Il valore di questo argomento deve essere positivo.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ja.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ja.xlf
new file mode 100644
index 00000000000..f8b912a2909
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ja.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ アクション '{0}' を処理します。
+
+
+
+
+ このチャネル マネージャーでは、指定されたチャネルの型 {0} をサポートしていません。
+
+
+
+
+ ClientCredentialType.None は、TransportWithMessageCredential セキュリティ モードでは無効です。メッセージ資格情報の種類を指定するか、別のセキュリティ モードを使用してください。
+
+
+
+
+ ホスト {0} に対する DNS エントリが存在しません。
+
+
+
+
+ このプラットフォームでは拡張保護はサポートされません。適切な更新プログラムをインストールするか、Binding または BindingElement に対する ExtendedProtectionPolicy を、"Never" または "WhenSupported" の PolicyEnforcement 値を持つ値に変更してください。
+
+
+
+
+ 利用可能なメモリが不足しているため、この操作を完了できません。
+
+
+
+
+ ホスト {0} の IPEndpoint がありませんでした。
+
+
+
+
+ タイムアウトは TimeSpan.Zero 以上の値にする必要があります。タイムアウトを無効にするには、TimeSpan.MaxValue を指定してください。
+
+
+
+
+ Int32.MaxValue TotalMilliseconds (約 24 日) よりも大きな値のタイムアウトは受け付けられません。タイムアウトを無効にするには、TimeSpan.MaxValue を指定してください。
+
+
+
+
+ サーバー '{0}' は、シャットダウンの処理中であることを示すフォールトを返信しました。詳細については、内部例外を参照してください。
+
+
+
+
+ サーバー '{0}' は、ビジー状態のため要求を処理できないことを示すフォールトを送り返しました。後で再試行してください。フォールトの詳細については、内部例外を参照してください。
+
+
+
+
+ 割り当てられたタイムアウト時間 {0} 内にソケットからの非同期受信が完了しなかったため、ソケットは中止されました。この操作に割り当てられた時間は、より長いタイムアウト時間の一部であった可能性があります。
+
+
+
+
+ 割り当てられたタイムアウト時間 {0} 内にソケットへの非同期送信が完了しなかったため、ソケット接続は中止されました。この操作に割り当てられた時間は、より長いタイムアウト時間の一部であった可能性があります。
+
+
+
+
+ ソケットを正常に閉じようとしましたが、相手側 ({0}) がまだデータを送信しています。
+
+
+
+
+ ソケット ({0}) のリモート エンドポイントは、割り当てられたタイムアウト時間内 ({1}) に終了要求に応答しませんでした。この原因としては、リモート エンドポイントが Receive から EOF 信号 (null) を受信した後に Close を呼び出していないことが考えられます。この操作に割り当てられた時間は、より長いタイムアウト時間の一部であった可能性があります。
+
+
+
+
+ ソケット接続は破棄されています。
+
+
+
+
+ 転送モード {0} は {1} でサポートされていません。
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ DNS を使用して URI "{0}" のホスト名を解決できません。
+
+
+
+
+ 保護レベル '{0}' が指定されましたが、SSL トランスポート セキュリティでサポートされるのは EncryptAndSign のみです。
+
+
+
+
+ この引数の値は、負ではない値である必要があります。
+
+
+
+
+ この引数の値は、正の値である必要があります。
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ko.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ko.xlf
new file mode 100644
index 00000000000..d70a7b9ac03
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ko.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ 동작 '{0}'을(를) 처리하세요.
+
+
+
+
+ 지정된 채널 형식 {0}이(가) 이 채널 관리자에서 지원되지 않습니다.
+
+
+
+
+ ClientCredentialType.None은 TransportWithMessageCredential 보안 모드에 사용할 수 없습니다. 메시지 자격 증명 형식을 지정하거나 다른 보안 모드를 사용하세요.
+
+
+
+
+ 호스트 {0}에 대한 DNS 항목이 없습니다.
+
+
+
+
+ 이 플랫폼에서는 확장된 보호가 지원되지 않습니다. 적합한 패치를 설치하거나 Binding 또는 BindingElement의 ExtendedProtectionPolicy를 PolicyEnforcement 값이 "Never" 또는 "WhenSupported"인 값으로 변경하십시오.
+
+
+
+
+ 작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다.
+
+
+
+
+ 호스트 {0}에 대한 IPEndpoints를 찾을 수 없습니다.
+
+
+
+
+ 제한 시간은 TimeSpan.Zero보다 크거나 같아야 합니다. 제한 시간을 사용하지 않도록 설정하려면 TimeSpan.MaxValue를 지정하세요.
+
+
+
+
+ Int32.MaxValue TotalMilliseconds(약 24일)보다 큰 시간 제한은 허용되지 않습니다. 시간 제한을 사용하지 않으려면 TimeSpan.MaxValue를 지정하세요.
+
+
+
+
+ 종료하는 중이라는 것을 나타내는 오류를 '{0}' 서버가 다시 보냈습니다. 자세한 오류 내용은 내부 예외를 참조하십시오.
+
+
+
+
+ 사용 중이어서 요청을 처리할 수 없다는 것을 나타내는 오류를 '{0}' 서버가 다시 보냈습니다. 나중에 다시 시도하세요. 자세한 오류 내용은 내부 예외를 참조하세요.
+
+
+
+
+ 소켓에서의 비동기 수신이 할당된 시간 제한({0}) 내에 완료되지 않았으므로 소켓이 중단되었습니다. 이 작업에 할당된 시간이 보다 긴 시간 제한의 일부일 수 있습니다.
+
+
+
+
+ 소켓으로의 비동기 발신이 할당된 시간 제한({0}) 내에 완료되지 않았으므로 소켓 연결이 중단되었습니다. 이 작업에 할당된 시간이 보다 긴 시간 제한의 일부일 수 있습니다.
+
+
+
+
+ 소켓에서 정상적인 닫기를 시도했지만, 다른 쪽({0})에서 아직 데이터를 보내고 있습니다.
+
+
+
+
+ 소켓({0})의 원격 끝점이 할당된 시간 제한({1}) 내에 닫기 요청에 응답하지 않았습니다. Receive에서 EOF 신호(null)를 받은 후에 원격 끝점이 Close를 호출하지 않는 것으로 보입니다. 이 작업에 할당된 시간이 보다 긴 시간 제한의 일부일 수 있습니다.
+
+
+
+
+ 소켓 연결이 삭제되었습니다.
+
+
+
+
+ 전송 모드 {0}을(를) {1}에서 지원하지 않습니다.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ DNS를 사용하여 URI "{0}"의 호스트 이름을 확인할 수 없습니다.
+
+
+
+
+ 보호 수준 '{0}'이(가) 지정되었지만, SSL 전송 보안은 EncryptAndSign만 지원합니다.
+
+
+
+
+ 이 인수의 값은 음수가 아니어야 합니다.
+
+
+
+
+ 이 인수의 값은 양수여야 합니다.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pl.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pl.xlf
new file mode 100644
index 00000000000..858512bc044
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pl.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Przetwarzaj akcję „{0}”.
+
+
+
+
+ Określony typ kanału {0} jest nieobsługiwany przez tego menedżera kanałów.
+
+
+
+
+ Wartość ClientCredentialType.None jest niepoprawna dla trybu zabezpieczeń TransportWithMessageCredential. Określ typ poświadczeń komunikatu lub użyj innego trybu zabezpieczeń.
+
+
+
+
+ Brak wpisów DNS dla hosta {0}.
+
+
+
+
+ Ochrona rozszerzona jest nieobsługiwana na tej platformie. Zainstaluj odpowiednią poprawkę lub zmień wartość właściwości ExtendedProtectionPolicy obiektu Binding lub BindingElement na właściwość PolicyEnforcement o wartości Never lub WhenSupported.
+
+
+
+
+ Brak wystarczającej ilości pamięci, aby ukończyć operację.
+
+
+
+
+ Nie znaleziono elementów IPEndpoints dla hosta {0}.
+
+
+
+
+ Limit czasu musi być większy lub równy wartości TimeSpan.Zero. Aby wyłączyć limit czasu, określ wartość TimeSpan.MaxValue.
+
+
+
+
+ Limity czasu większe niż Int32.MaxValue TotalMilliseconds (około 24 dni) nie mogą być uwzględniane. Aby wyłączyć limit czasu, określ wartość TimeSpan.MaxValue.
+
+
+
+
+ Serwer „{0}” zwrócił błąd wskazujący, że właśnie trwa jego zamykanie. Szczegółowe informacje o błędzie można znaleźć w wewnętrznym wyjątku.
+
+
+
+
+ Serwer „{0}” zwrócił błąd wskazujący, że jest zbyt obciążony, aby obsłużyć żądanie. Spróbuj ponownie później. Szczegółowe informacje o błędzie można znaleźć w wewnętrznym wyjątku.
+
+
+
+
+ Gniazdo zostało anulowane, ponieważ operacja asynchronicznego odbioru z gniazda nie zakończyła się w ciągu przydzielonego limitu czasu {0}. Czas przydzielony na tę operację mógł być częścią dłuższego limitu czasu.
+
+
+
+
+ Połączenie gniazda zostało anulowane, ponieważ operacja asynchronicznego wysyłania do gniazda nie zakończyła się w ciągu przydzielonego limitu czasu {0}. Czas przydzielony na tę operację mógł być częścią dłuższego limitu czasu.
+
+
+
+
+ Na gnieździe wykonano operację prawidłowego zamknięcia, ale druga strona ({0}) nadal wysyła dane.
+
+
+
+
+ Zdalny punkt końcowy gniazda ({0}) nie odpowiedział na żądanie zamknięcia w ciągu przydzielonego limitu czasu ({1}). Zdalny punkt końcowy prawdopodobnie nie wywołuje metody Close po odebraniu sygnału EOF (null) z metody Receive. Czas przydzielony na tę operację mógł być częścią dłuższego limitu czasu.
+
+
+
+
+ Połączenie gniazda zostało usunięte.
+
+
+
+
+ Tryb transferu {0} nie jest obsługiwany przez element {1}.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ Nie można rozpoznać nazwy hosta o identyfikatorze URI „{0}” za pomocą usługi DNS.
+
+
+
+
+ Określono poziom zabezpieczeń „{0}”, jednak zabezpieczenia transportowe protokołu SSL obsługują tylko metodę EncryptAndSign.
+
+
+
+
+ Wartość tego argumentu nie może być ujemna.
+
+
+
+
+ Wartość tego argumentu musi być dodatnia.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pt-BR.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pt-BR.xlf
new file mode 100644
index 00000000000..165daebcaf3
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.pt-BR.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Processar a ação '{0}'.
+
+
+
+
+ O tipo de canal especificado {0} não tem suporte deste gerenciador de canais.
+
+
+
+
+ ClientCredentialType.None inválido para o modo de segurança TransportWithMessageCredential. Especifique um tipo de credencial de mensagem ou use um modo de segurança diferente.
+
+
+
+
+ Não existem entradas DNS para o host {0}.
+
+
+
+
+ A proteção estendida não é suportada nesta plataforma. Instale o patch apropriado ou altere a ExtendedProtectionPolicy em Binding ou BindingElement para um valor com PolicyEnforcement definido como "Never" ou "WhenSupported".
+
+
+
+
+ Memória insuficiente disponível para concluir a operação.
+
+
+
+
+ Não foi possível encontrar IPEndpoints para o host {0}.
+
+
+
+
+ O tempo limite deve ser maior ou igual a TimeSpan.Zero. Para desabilitar o tempo limite, especifique TimeSpan.MaxValue.
+
+
+
+
+ Os tempos limites maiores que Int32.MaxValue TotalMilliseconds (aproximadamente 24 dias) não podem ser honrados. Para desabilitar o tempo limite, especifique TimeSpan.MaxValue.
+
+
+
+
+ O servidor '{0}' retornou uma falha indicando que ele está desligando. Consulte a exceção interna para obter os detalhes da falha.
+
+
+
+
+ O servidor '{0}' retornou uma falha indicando que ele está muito ocupado para processar a solicitação. Tente novamente mais tarde. Consulte a exceção interna para obter os detalhes da falha.
+
+
+
+
+ O soquete foi anulado porque uma recepção assíncrona do soquete não foi concluída no tempo limite alocado de {0}. O tempo alocado para essa operação pode ter sido uma parte de um tempo limite maior.
+
+
+
+
+ A conexão de soquete foi anulada porque um envio assíncrono para o soquete não foi concluído no tempo limite alocado de {0}. O tempo alocado para essa operação pode ter sido uma parte de um tempo limite maior.
+
+
+
+
+ Tentativa de fechamento normal no soquete, mas o outro lado ({0}) ainda está enviando dados.
+
+
+
+
+ O ponto de extremidade remoto do soquete ({0}) não respondeu a uma solicitação de fechamento no tempo limite alocado ({1}). É provável que o ponto de extremidade remoto não esteja chamando Close após receber o sinal EOF (nulo) de Receive. O tempo alocado para essa operação pode ter sido uma parte de um tempo limite maior.
+
+
+
+
+ A conexão de soquete foi descartada.
+
+
+
+
+ O modo de transferência {0} não tem suporte em {1}.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ Não é possível resolver nome de host de URI "{0}" usando DNS.
+
+
+
+
+ O nível de proteção '{0}' foi especificado, ainda assim a segurança do transporte SSL apenas dá suporte a EncryptAndSign.
+
+
+
+
+ O valor deste argumento não deve ser negativo.
+
+
+
+
+ O valor deste argumento deve ser positivo.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ru.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ru.xlf
new file mode 100644
index 00000000000..7ec68b6e857
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.ru.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ Обработка действия "{0}".
+
+
+
+
+ Указанный тип канала {0} не поддерживается данным диспетчером каналов.
+
+
+
+
+ ClientCredentialType.None недопустим в режиме безопасности TransportWithMessageCredential. Укажите тип учетных данных сообщения или используйте другой режим безопасности.
+
+
+
+
+ Нет никаких записей DNS для узла {0}.
+
+
+
+
+ Расширенная защита на этой платформе не поддерживается. Установите соответствующее обновление или измените политику ExtendedProtectionPolicy на привязке либо элемент BindingElement на значение PolicyEnforcement "Never" или "WhenSupported".
+
+
+
+
+ Недостаточно памяти для завершения операции.
+
+
+
+
+ Для узла {0} точки IPEndpoints не найдены.
+
+
+
+
+ Время ожидания должно быть не менее TimeSpan.Zero. Чтобы отключить время ожидания, укажите TimeSpan.MaxValue.
+
+
+
+
+ Время ожидания, превышающее Int32.MaxValue TotalMilliseconds (приблизительно 24 дня), не учитывается. Чтобы отключить время ожидания, укажите TimeSpan.MaxValue.
+
+
+
+
+ Сервер "{0}" отправил обратно сообщение об ошибке, указывающее, что он находится в процессе отключения. Дополнительные сведения об ошибке см. внутреннее исключение.
+
+
+
+
+ Сервер "{0}" отправил обратно сообщение об ошибке, указывающее, что он перегружен и не может обработать запрос. Повторите попытку позже. Дополнительные сведения об ошибке см. в описании внутреннего исключения.
+
+
+
+
+ Работа сокета была прервана, так как асинхронный прием через сокет не был завершен в течение указанного периода ожидания {0}. Время, выделенное для выполнения этой операции, может быть составной частью более длительного времени ожидания.
+
+
+
+
+ Подключение к сокету прервано, так как асинхронная отправка через сокет не завершилась в течение указанного периода ожидания {0}. Время, выделенное для выполнения этой операции, может быть составной частью более длительного времени ожидания.
+
+
+
+
+ Произведена попытка мягкого закрытия сокета, однако другая сторона ({0}) продолжает отправку данных.
+
+
+
+
+ Удаленная конечная точка сокета ({0}) не ответила на запрос закрытия в течение установленного времени ожидания ({1}). Возможно, удаленная конечная точка не вызывает Close после получения сигнала конца файла EOF (null) от Receive. Время, выделенное для выполнения этой операции, может быть составной частью более длительного времени ожидания.
+
+
+
+
+ Подключение к сокету было ликвидировано.
+
+
+
+
+ {1} не поддерживает режим передачи {0}.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ Не удается разрешить имя узла URI "{0}" с помощью DNS.
+
+
+
+
+ Указан уровень защиты "{0}", однако защита транспорта SSL поддерживает только EncryptAndSign.
+
+
+
+
+ Значение этого аргумента должно быть неотрицательным.
+
+
+
+
+ Значение этого аргумента должно быть положительным.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.tr.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.tr.xlf
new file mode 100644
index 00000000000..78dd48c3ef1
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.tr.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ '{0}' eylemini işleyin.
+
+
+
+
+ Belirtilen kanal türü {0}, bu kanal yöneticisi tarafından desteklenmiyor.
+
+
+
+
+ ClientCredentialType.None, TransportWithMessageCredential güvenlik modu için geçerli değil. Bir ileti kimlik bilgisi türü belirtin ya da farklı bir güvenlik modu kullanın.
+
+
+
+
+ {0} konağı için DNS girdisi yok.
+
+
+
+
+ Genişletilmiş koruma bu platformda desteklenmez. Lütfen uygun düzeltme ekini yükleyin veya Binding veya BindingElement üzerindeki ExtendedProtectionPolicy öğesini, PolicyEnforcement değeri "Never" veya "WhenSupported" olan bir değere değiştirin.
+
+
+
+
+ İşlemi tamamlamak için yetersiz kullanılabilir bellek.
+
+
+
+
+ {0} konağı için IPEndpoints bulunamadı.
+
+
+
+
+ Zaman aşımı değeri, TimeSpan.Zero değerinden büyük ya da ona eşit olmalıdır. Zaman aşımını devre dışı bırakmak için TimeSpan.MaxValue değeri belirtin.
+
+
+
+
+ Int32.MaxValue TotalMilliseconds (yaklaşık 24 gün) değerinden büyük zaman aşımı değerleri dikkate alınmaz. Zaman aşımını devre dışı bırakmak için TimeSpan.MaxValue değeri belirtin.
+
+
+
+
+ '{0}' sunucusu, kapanmakta olduğunu belirten bir hata gönderdi. Hata ayrıntıları için iç özel duruma bakın.
+
+
+
+
+ '{0}' sunucusu bir hata geri göndererek, isteği işleyemeyecek kadar meşgul olduğunu belirtti. Lütfen daha sonra yeniden deneyin. Hata ayrıntıları için iç özel duruma bakın.
+
+
+
+
+ Asenkron bir yuvadan alma işlemi ayrılan {0} zaman aşımı süresi içinde tamamlanamadığından, yuva iptal edildi. Bu işlem için ayrılan süre daha uzun bir zaman aşımı değerinin bir bölümü olabilir.
+
+
+
+
+ Asenkron bir yuvaya gönderme işlemi ayrılan zaman aşımı süresi {0} içinde tamamlanamadığından, yuva bağlantısı iptal edildi. Bu işlem için ayrılan süre daha uzun bir zaman aşımı değerinin bir bölümü olabilir.
+
+
+
+
+ Yuva normal biçimde kapatılmaya çalışıldı, ancak diğer taraf ({0}) hala veri gönderiyor.
+
+
+
+
+ Yuvanın uzak uç noktası ({0}), ayrılan zaman aşımı süresi ({1}) bir kapatma isteğini yanıtlamadı. Büyük olasılıkla, uzak uç nokta Receive işlevinden EOF sinyalini (null) aldıktan sonra Close çağrısı yapmıyor. Bu işlem için ayrılan süre daha uzun bir zaman aşımı değerinin bir bölümü olabilir.
+
+
+
+
+ Yuva bağlantısı atıldı.
+
+
+
+
+ {0} aktarma modu, {1} tarafından desteklenmiyor.
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ DNS kullanılarak URI "{0}" ana bilgisayar adı çözümlenemiyor.
+
+
+
+
+ SSL aktarım güvenliği yalnızca EncryptAndSign özelliğini desteklese de, '{0}' koruma düzeyi belirtildi.
+
+
+
+
+ Bu bağımsız değişkenin değeri negatif olmamalıdır.
+
+
+
+
+ Bu bağımsız değişkenin değeri pozitif olmalıdır.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hans.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hans.xlf
new file mode 100644
index 00000000000..54def095f6c
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hans.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ 处理操作“{0}”。
+
+
+
+
+ 此通道管理器不支持指定的通道类型 {0}。
+
+
+
+
+ ClientCredentialType.None 对于 TransportWithMessageCredential 安全模式无效。请指定消息凭据类型或使用其他安全模式。
+
+
+
+
+ 主机 {0} 不存在 DNS 条目。
+
+
+
+
+ 此平台上不支持扩展保护。请安装适当的修补程序,或者将 Binding 或 BindingElement 上的 ExtendedProtectionPolicy 更改为 PolicyEnforcement 值为“Never”或“WhenSupported”的某个值。
+
+
+
+
+ 可用内存不足,无法完成操作。
+
+
+
+
+ 找不到主机 {0} 的任何 IPEndpoints。
+
+
+
+
+ 超时必须大于或等于 TimeSpan.Zero。要禁用超时,请指定 TimeSpan.MaxValue。
+
+
+
+
+ 无法处理大于 Int32.MaxValue TotalMilliseconds (大约 24 天)的超时。要禁用超时,请指定 TimeSpan.MaxValue。
+
+
+
+
+ 服务器“{0}”发回错误,指示其正在关机。有关错误的详细信息,请参见内部异常。
+
+
+
+
+ 服务器“{0}”发回错误,指示其太忙,无法处理请求。请稍后重试。有关错误的详细信息,请参见内部异常。
+
+
+
+
+ 套接字已中止,因为来自套接字的异步接收在分配的超时 {0} 内未完成。分配给此操作的时间可能比超时长。
+
+
+
+
+ 套接字连接已中止,因为到套接字的异步发送未在分配的超时 {0} 内完成。分配给此操作的时间可能比超时长。
+
+
+
+
+ 已尝试正常关闭套接字,但另一端({0})仍在发送数据。
+
+
+
+
+ 套接字({0})的远程终结点未在分配的超时({1})内响应关闭请求。可能远程终结点在从 Receive 接收 EOF 信号(Null)后未调用 Close。分配给此操作的时间可能比超时长。
+
+
+
+
+ 套接字连接已释放。
+
+
+
+
+ {1} 不支持传输模式 {0}。
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ 无法使用 DNS 解析 URI“{0}”的主机名。
+
+
+
+
+ 指定了保护级别“{0}”,但 SSL 传输安全性仅支持 EncryptAndSign。
+
+
+
+
+ 此参数的值必须为非负。
+
+
+
+
+ 此参数的值必须为正。
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hant.xlf b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hant.xlf
new file mode 100644
index 00000000000..d0eb2f2b4be
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/Resources/xlf/strings.zh-Hant.xlf
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+ 處理動作 '{0}'。
+
+
+
+
+ 此通道管理員不支援指定的通道類型 {0}。
+
+
+
+
+ ClientCredentialType.None 對於 TransportWithMessageCredential 安全性模式無效。請指定訊息認證類型,或使用不同的安全性模式。
+
+
+
+
+ 沒有主機 {0} 的 DNS 項目。
+
+
+
+
+ 這個平台不支援延伸的保護。請安裝適當的修補程式,或者將 Binding 或 BindingElement 上的 ExtendedProtectionPolicy 值變更為 "Never" 或 "WhenSupported" 的 PolicyEnforcement 值。
+
+
+
+
+ 記憶體不足,無法完成作業。
+
+
+
+
+ 找不到主機 {0} 的 IPEndpoints。
+
+
+
+
+ Timeout 必須大於或等於 TimeSpan.Zero。若要停用逾時,請指定 TimeSpan.MaxValue。
+
+
+
+
+ 無法遵循大於 Int32.MaxValue TotalMilliseconds (大約等於 24 天) 的逾時。若要停用逾時,請指定 TimeSpan.MaxValue。
+
+
+
+
+ 伺服器 '{0}' 傳回錯誤,指出正在進行關機。如需錯誤詳細資訊,請參閱內部例外狀況。
+
+
+
+
+ 伺服器 '{0}' 傳回錯誤,指出因過於忙碌,無法處理要求。請稍後重試。請參考內部例外狀況,以取得錯誤詳細資料。
+
+
+
+
+ 通訊端中止,因為來自通訊端的非同步接收未在分配的逾時 {0} 內完成。分配給此作業的時間可能是較長逾時的一部分。
+
+
+
+
+ 通訊端連線中止,因為目標為通訊端的非同步傳送未在分配的逾時 {0} 內完成。分配給此作業的時間可能是較長逾時的一部分。
+
+
+
+
+ 嘗試在通訊端上正常關閉,但另一端 ({0}) 仍在傳送資料。
+
+
+
+
+ 通訊端的遠端端點 ({0}) 未在分配的逾時 ({1}) 內回應關閉要求。這有可能是因為遠端端點從 Receive 接收 EOF 信號 (Null) 之後未呼叫 Close。分配給此作業的時間可能是較長逾時的一部分。
+
+
+
+
+ 已處置通訊端連線。
+
+
+
+
+ {1} 不支援傳輸模式 {0}。
+
+
+
+
+ Could not connect to {0}. UDS error code {1}: {2}.
+
+
+
+
+ Could not connect to {0}. The connection attempt lasted for a time span of {3}. UDS error code {1}: {2}.
+
+
+
+
+ Insufficient winsock resources available to complete socket connection initiation.
+
+
+
+
+ Connecting to via {0} timed out after {1}. Connection attempts were made to {2} of {3} available addresses ({4}). Check the RemoteAddress of your channel and verify that the DNS records for this endpoint correspond to valid IP Addresses. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '{0}'.
+
+
+
+
+ The socket transfer timed out after {0}. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout.
+
+
+
+
+ The socket connection was aborted by your local machine. This could be caused by a channel Abort(), or a transmission error from another thread using this socket.
+
+
+
+
+ A UDS error ({0}: {1}) occurred while transmitting data.
+
+
+
+
+ 無法使用 DNS 解析 URI "{0}" 的主機名稱。
+
+
+
+
+ 已指定保護層級 '{0}',但是 SSL 傳輸安全性只支援 EncryptAndSign。
+
+
+
+
+ 此引數的值必須是非負數。
+
+
+
+
+ 此引數值必須是正數。
+
+
+
+
+
\ No newline at end of file
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/System.ServiceModel.UnixDomainSocket.csproj b/src/System.ServiceModel.UnixDomainSocket/src/System.ServiceModel.UnixDomainSocket.csproj
new file mode 100644
index 00000000000..3a0d87645aa
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/System.ServiceModel.UnixDomainSocket.csproj
@@ -0,0 +1,43 @@
+
+
+ $(WcfAssemblyVersion)
+ Microsoft
+ System.ServiceModel.UnixDomainSocket
+ true
+ true
+ $(NoWarn);NU5131
+ net6.0
+ $(Ship_WcfPackages)
+ Provides the types that permit SOAP messages to be exchanged using Unix domain socket.
+
+
+
+ true
+ FxResources.$(AssemblyName).SR
+ false
+ System.SR
+
+
+
+
+
+ true
+ Common\System\ServiceModel\%(RecursiveDir)%(Filename)%(Extension)
+
+
+ true
+ Common\System\IdentityModel\%(RecursiveDir)%(Filename)%(Extension)
+
+
+ true
+ Common\Internals\%(RecursiveDir)%(Filename)%(Extension)
+
+
+ Common\System\SR.cs
+
+
+
+
+
+
+
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/ChannelBindingUtility.cs b/src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/ChannelBindingUtility.cs
new file mode 100644
index 00000000000..9adf7a18daa
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/ChannelBindingUtility.cs
@@ -0,0 +1,13 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Security.Authentication.ExtendedProtection;
+
+namespace System.ServiceModel.Channels
+{
+ internal static class ChannelBindingUtility
+ {
+ private static readonly ExtendedProtectionPolicy s_disabledPolicy = new ExtendedProtectionPolicy(PolicyEnforcement.Never);
+ public static ExtendedProtectionPolicy DefaultPolicy { get; } = s_disabledPolicy;
+ }
+}
diff --git a/src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/SocketAwaitableEventArgs.cs b/src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/SocketAwaitableEventArgs.cs
new file mode 100644
index 00000000000..6c9e3644690
--- /dev/null
+++ b/src/System.ServiceModel.UnixDomainSocket/src/System/ServiceModel/Channels/SocketAwaitableEventArgs.cs
@@ -0,0 +1,128 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Net.Sockets;
+using System.Threading.Tasks.Sources;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Runtime.InteropServices;
+
+namespace System.ServiceModel.Channels
+{
+ // Copied and modified from https://github.com/dotnet/aspnetcore/blob/7a5d1cc1beda12eebb3fb3aa8ccb8253cf445115/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketAwaitableEventArgs.cs
+
+ // A slimmed down version of https://github.com/dotnet/runtime/blob/82ca681cbac89d813a3ce397e0c665e6c051ed67/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs#L798 that
+ // 1. Doesn't support any custom scheduling other than the PipeScheduler (no sync context, no task scheduler)
+ // 2. Doesn't do ValueTask validation using the token
+ // 3. Doesn't support usage outside of async/await (doesn't try to capture and restore the execution context)
+ // 4. Doesn't use cancellation tokens
+ internal class SocketAwaitableEventArgs : SocketAsyncEventArgs, IValueTaskSource, IValueTaskSource
+ {
+ private static readonly Action