我们使用WSCF(Web Services Contract First)创建客户端代理以使用我们拥有的另一个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(这对于这个应用来说是一个相当大的努力) - 有没有人有任何关于如何解决这个问题的建议?
我已经验证了我们正在使用的Web服务是使用Fiddler正确返回字符。我还在测试工具中创建了一个服务引用,它工作正常。如果我必须回到管理层并说我们需要更新我们的网络参考资料作为现代服务参考,那就这样吧 - 但我希望我们不必这样做。