Символ обратной косой черты в строке приводит к тому, что строка оценивается как «ничто» в WCF

#vb.net #wcf

#vb.net #wcf

Вопрос:

У меня есть приложение WCF, написанное на VB.NET это принимает общий Dictionary(Of String, String) в качестве одного из параметров. Когда я передаю пару ключ / значение, которая имеет обратную косую черту в качестве одного из символов в значении, клиент автоматически изменяет все значение на Nothing или в XML он показывает это:

 <Value i:nil="true />
  

Существует ли какой-либо специальный способ избежать обратной косой черты при передаче их в строке в службу WCF? Насколько я знаю, обратная косая черта не является зарезервированным символом в XML.

Комментарии:

1. Для отображения блоков кода перед ними требуется пустая строка. Кстати, добро пожаловать в Stack Overflow.

Ответ №1:

Как вы вызываете свою службу? Я только что попробовал этот сценарий (см. Код ниже), и сервер печатает значения правильно.

 Public Class StackOverflow_6116861_751090
    <ServiceContract()> _
    Public Interface ITest
        <OperationContract()> Sub Process(ByVal dict As Dictionary(Of String, String))
    End Interface

    Public Class Service
        Implements ITest

        Public Sub Process(ByVal dict As System.Collections.Generic.Dictionary(Of String, String)) Implements ITest.Process
            For Each key In dict.Keys
                Console.WriteLine("{0}: {1}", key, dict(key))
            Next
        End Sub
    End Class

    Public Shared Sub Test()
        Dim baseAddress As String = "http://"   Environment.MachineName   ":8000/Service"
        Dim host As ServiceHost = New ServiceHost(GetType(Service), New Uri(baseAddress))
        host.AddServiceEndpoint(GetType(ITest), New BasicHttpBinding(), "")
        host.Open()
        Console.WriteLine("Host opened")

        Dim factory As ChannelFactory(Of ITest) = New ChannelFactory(Of ITest)(New BasicHttpBinding(), New EndpointAddress(baseAddress))
        Dim proxy As ITest = factory.CreateChannel()

        Dim dict As Dictionary(Of String, String) = New Dictionary(Of String, String)
        dict.Add("one", "uno")
        dict.Add("two", "dos")
        dict.Add("three", "tres")
        proxy.Process(dict)
    End Sub
End Class
  

Комментарии:

1. Я нашел источник проблемы. Я вызывал службу из тестового клиента WCF, который автоматически не экранировал символ обратной косой черты, как это сделал бы VB, если бы он вызывал службу. Это отлично работает внутри программы.