.Net webservice,如何访问...?

时间:2008-10-21 23:42:19

标签: .net web-services soap

注意:我只是在使用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

然而,它没有暴露属性(出于显而易见的原因)。

我需要访问这些属性。我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可以尝试使用网络服务描述语言工具Wsdl.exe)生成实际的类文件:

  

wsdl.exe /language:cs http://www.example.com/FooService.wsdl

您可以通过WSDL Tool获取有关MSDN Page的更多信息。

答案 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代理类。