Использование веб-службы с WSCF, символы Unicode десериализуются в "??"

Мы используем WSCF (сначала контракт по веб-сервисам) для создания клиентских прокси-серверов для использования другого нашего веб-сервиса. Веб-служба возвращает "специальные" символы, такие как ®, в некоторых полях. Мы видим этих персонажей как "??" (это фактически два знака вопроса, а не проблема рендеринга), когда ответ веб-службы десериализован для объекта. Эта десериализация, кажется, делается под капотом с WSCF.

В обычной "веб-ссылке" - я нашел несколько постов в сети, в которых говорится, что вы можете просто добавить этот метод в свой файл Reference.vb, чтобы облегчить эту проблему.

    Protected Overrides Function GetWebResponse(request As System.Net.WebRequest) As System.Net.WebResponse
        Dim res As System.Net.WebResponse = MyBase.GetWebResponse(request)
        res.Headers.Set("Content-Type", "text-xml; charset=UTF-8")
        Return res
    End Function

Прокси-класс, который WSCF генерирует с помощью заглушек методов, наследуется от System.Web.Services.Protocols.SoapHttpClientProtocol, поэтому я могу разместить этот же метод там. Я очень надеялся, что это решит нашу проблему, но при отладке через вызов веб-службы функция GetWebResponse никогда не вызывается.

"Самое близкое", которое я могу получить, чтобы получить ответ в коде, выглядит следующим образом (это сгенерированный код). Arg - ответ, и десериализация уже испортила "специальные" символы.

    Private Sub Onv2_0OperationCompleted(ByVal arg As Object)
        If (Not (Me.v2_0CompletedEvent) Is Nothing) Then
            Dim invokeArgs As System.Web.Services.Protocols.InvokeCompletedEventArgs = CType(arg, System.Web.Services.Protocols.InvokeCompletedEventArgs)
            RaiseEvent v2_0Completed(Me, New v2_0CompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState))
        End If
    End Sub

Если не считать удаления WSCF (что было бы довольно огромным усилием для этого приложения) - есть ли у кого-нибудь какие-либо предложения о том, как это исправить?

Я убедился, что веб-сервис, который мы потребляем, возвращает символы правильно, используя Fiddler. Я также только что создал ссылку на сервис в тестовом жгуте, и она работает нормально. Если мне придется вернуться к руководству и сказать, что мы должны обновить наши веб-ссылки, чтобы они стали современными сервисными ссылками, пусть будет так, но я надеюсь, что нам не нужно этого делать.

0 ответов

Другие вопросы по тегам