0

我们使用 WSCF(Web 服务合同优先)来创建客户端代理来使用我们拥有的另一个 Web 服务。Web 服务在某些字段中返回“特殊”字符,例如 ®。我们将这些字符视为“??” (实际上是两个问号字符,不是渲染问题)当 Web 服务响应反序列化为对象时。这种反序列化似乎是在 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,因此我可以将相同的方法放在那里。我非常希望这能解决我们的问题,但在通过 Web 服务调用进行调试时,从未调用 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 验证了我们正在使用的 Web 服务正在正确返回字符。我还刚刚在测试工具中创建了对它的服务引用,它工作正常。如果我必须回到管理层并说我们需要将我们的 Web 引用更新为现代服务引用,那就这样吧 - 但我希望我们不必这样做。

4

0 回答 0