我正在创建一个传递自定义类型数组的XML Web服务。在我的消费代码中,我将代码作为Web引用引用,我给了命名空间MYWS
。现在在代码中我试图将我的Web服务调用的结果分配给我的类型数组,如下所示:
'instance to make a call to my web service
Dim srv As New MYDWS.ServiceNameWSSoapClient
'array to hold the results
Dim arr() As MyClass
'assign the web service call results
arr = srv.myWebMethod()
当我这样做时,编辑抱怨说:
my.namespace.MyClass
的1维数组的值不能 转换为my.namespace.MYWS.MyClass
的1维数组,因为my.namespace.MYSW.MyClass
不是来自my.namespace.MyClass
现在我明白了这个消息,事情就是他们是同一个班级。 Web服务引用该项目中的dll,在我的调用代码中声明该类。如何告诉编译器这些类型是否相同?任何帮助将非常感谢。谢谢!
答案 0 :(得分:2)
结果是您的命名空间不匹配。如果右键单击示例中的MyClass并选择Go To Definition,那么它在哪里?我怀疑你最终可能会在本地定义的课程中。
解决方案是改变
Dim arr() As MyClass
到
Dim arr() As MYWS.MyClass
根据评论中的信息进行更新
使用Web服务的问题是您无法将其强制转换为本地类。
根据您对本地课程的需求,您有几个选择。
如果您只需要方法来处理类中的数据,或者您需要其他属性,则可以在环境中创建一个扩展Web服务创建的类的分部类。例如:
Namespace MYWS
Public Partial Class MyClass
Public Property SomeAdditionalData As String
Public Sub SomeMethod
' Perform some operations on the class members
End Sub
End Class
End Namespace
但是,如果您在类中嵌入了计算或其他工作,则需要使用Web服务类获取数据,然后将该类中的数据复制到本地类中。如果属性具有相同的名称,则可以使用反射来简化此任务。
作为另一种选择,如果您可以控制Web服务,则可以将其更改为WCF服务。这将允许您在通信管道的两端重用完全相同的类代码。
答案 1 :(得分:0)
找到问题的解决方案。在web.config中我发现了这个:
<add key="net.mydom.mydom" value="http://localhost:7452/dir/mysvc.asmx"/>
这是我在注册Web服务时自动输入的内容。我在屏幕上收到了错误消息,但所有编译和运行都没有问题。
当我手动更改为:
<add key="net.mydom" value="http://localhost:7452/dir/mysvc.asmx"/>
错误消息消失了,所有内容都按预期继续运行。
(这只花了我7年的时间才算出来......)
更新:
嗯,不完全修复,但必须接近。过了一会儿,问题回来了,当我转回到:
<add key="net.mydom.mydom" value="http://localhost:7452/dir/mysvc.asmx"/>
它又消失了......肯定会随时回来......
更新
如果我明确添加:
imports net.mydom
到我的代码顶部,消息再次消失(即使我在输入变量时明确使用了完整的net.mydom。