注意:我只是在使用webservice我无法控制webservice代码。
所以在.net 2.0中,我引用webservice并在webservice名称空间中看到一个类,比如foobar。它被定义为:
public class foobar : System.Web.Services.Protocols.SoapHttpClientProtocol
但在.net 3.5中,当我添加对同一个webservice的引用时,我不再拥有这个foobar类。我确实看到了foobarSoap,它是一个暴露上面foobar类中所有方法的接口。它被定义为:
public interface foobarSoap
然而,它没有暴露属性(出于显而易见的原因)。
我需要访问这些属性。我该怎么做?
答案 0 :(得分:1)
您可以尝试使用网络服务描述语言工具(Wsdl.exe
)生成实际的类文件:
wsdl.exe /language:cs http://www.example.com/FooService.wsdl
答案 1 :(得分:0)
我有一种偷偷摸摸的感觉,即属性不会成为服务定义(WSDL)的一部分,这意味着您可能无法使用它们。如果可能的话,试着说服谁维护服务以将属性公开为实际方法。
您很可能无法访问属性,在这种情况下您可能会运气不好。遗憾。
我将尝试公开一个属性,然后我会在这里报告结果。
编辑:无法使用WCF公开接口属性,它只是无法编译
[ServiceContract]
public interface IFooService
{
[OperationContract] // This is not allowed, it will not compile
string Name { get; set; }
}
编辑:无法使用ASMX Web服务完成。 :(
[WebService(Namespace = "http://tempuri.org/")]
public class FooService : System.Web.Services.WebService
{
[WebMethod] // This is not allowed, it will not compile
string Name { get; set; }
}
答案 2 :(得分:0)
我刚创建了一个示例项目,并使用Add Service Reference菜单为该服务创建了一个Web代理:
http://www.xmlme.com/WSShakespeare.asmx
Visual Studio 2008基于WSDL生成了一个接口和一个代理类。例如,我有一个ShakespeareSoapClient类,它实现了一个ShakespeareSoap接口。
似乎工作正常。我错过了什么。
答案 3 :(得分:0)
当我从2005年升级到2008年时,我遇到了类似的问题。我认为你缺少什么,当你点击“添加服务参考”时,会出现一个更新的对话框。单击底部的“高级”按钮,然后在出现的下一个对话框中,单击兼容性部分底部的“添加Web引用”按钮。然后,您将获得最有可能使用的对话框,并且将具有标准的2.0代理类。