gpt4 book ai didi

vb.net - 将对象作为参数传递给方法时,会填充字符串属性,但整数为空

转载 作者:行者123 更新时间:2023-12-04 06:36:26 25 4
gpt4 key购买 nike

我不确定 WCF 的参与是否重要。

我有一个暴露给客户端 asp.net 应用程序的类和方法。类(class)看起来像

<DataContract()> _
Public Class Class1
Private v_string As String
Private v_integer As Integer

Public Sub New()
v_string = ""
v_integer = -1
End Sub

<DataMember()> _
Public Property P_String() As String
Get
Return v_string
End Get
Set(ByVal value As String)
v_string = value
End Set
End Property

<DataMember()> _
Public Property P_Integer() As Integer
Get
Return v_integer
End Get
Set(ByVal value As Integer)
v_integer = value
End Set
End Property
End Class

该方法声明为
<OperationContract()> _
Function GetStuff(ByVal bar As Class1) As String

在客户端代码中,我创建了一个 Class1 实例并设置了 v_string 和 v_integer 的值,但是使用 Wireshark 查看发送到服务器的 xml 时,只有 v_string 的值作为 Class1 的一部分发送。我猜这是因为它认为 v_integer 的值为空/未设置。这是客户端代码的示例。
Dim MyService as New Service1.ServiceClient
Dim test as New Service1.Class1
test.P_integer = 1
test.P_string = "hello"
Dim result as String = MyService.GetStuff(test)

我猜这是一个关于如何传递/使用不同类型的问题,因为 Integer 是一个整数类型而 String 是一个类,但似乎无法弄清楚如何解决这个问题。

最佳答案

WCF 只会传输数据 - 您 不能 通过 WCF 公开“方法”。

WCF 是 序列化消息系统 - 只有序列化数据在客户端和服务器之间传输 - 有 没有其他连接 (没有“远程对象”或类似的东西)正在进行。

但两者都是stringint应该处理没问题....

也许你在这种行为上磕磕绊绊??我也不完全明白你的问题在哪里 - 你期待什么,你看到了什么?您的服务方法在其实现中实际做了什么?

更新:当我和你做同样的事情时,然后使用 WCF Tracing看看发生了什么,这是进入服务的请求:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:8433/Services/GetStuff</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IGetStuffService/GetStuff</Action>
</s:Header>
<s:Body>
<GetStuff xmlns="http://tempuri.org/">
<data xmlns:a="http://schemas.datacontract.org/2004/07/wcf_test"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:P_Integer>5</a:P_Integer>
<a:P_String>Where to go for holidays...</a:P_String>
</data>
</GetStuff>
</s:Body>
</s:Envelope>

那么您没有看到应该在那里的东西是什么??..... 我清楚地看到该 SOAP 消息中的整数和字符串值 - 正如预期的那样。

可能是你没有看到你的值 1因为它隐藏在字节流中的某个地方?尝试指定一些其他值,例如 4711067或其他东西-不会在您的消息中丢失....

要启用 WCF 跟踪,请将这两个部分放入您的 web.configapp.config您的 WCF 服务:
<system.diagnostics>
<sources>
<source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\UserTraces.svclog" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>

(事先确保 C:\logs 目录存在!!),以及
<system.serviceModel>
<diagnostics>
<messageLogging maxMessagesToLog="30000"
logEntireMessage="true" logMalformedMessages="true"
logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="true">
<filters>
<clear/>
</filters>
</messageLogging>
</diagnostics>
</system.serviceModel>

现在你会得到 *.svclog C:\logs 中的文件- 打开 Windows 资源管理器,双击它们,您应该会进入 WCF Trace Viewer用于分析。

关于vb.net - 将对象作为参数传递给方法时,会填充字符串属性,但整数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4820701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com