通过使用代码无法识别的Web服务传递的类型

时间:2012-03-22 16:01:42

标签: vb.net visual-studio-2010 web-services

我正在创建一个传递自定义类型数组的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,在我的调用代码中声明该类。如何告诉编译器这些类型是否相同?任何帮助将非常感谢。谢谢!

2 个答案:

答案 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。