1

注意:我只是在使用网络服务,我无法控制网络服务代码。

所以在 .net 2.0 中,我引用了 webservice 并在 webservice 命名空间中看到了一个类,比如 foobar。它定义为:

public class foobar : System.Web.Services.Protocols.SoapHttpClientProtocol

但是在 .net 3.5 中,当我添加对同一个 web 服务的引用时,我不再有这个 foobar 类可用。我确实看到了 foobarSoap,它是一个接口,它公开了上面 foobar 类中的所有方法。它定义为:

public interface foobarSoap

但是它不会公开属性(出于显而易见的原因)。

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

4

4 回答 4

1

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

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

您可以在其MSDN Page上获得有关WSDL 工具的更多信息。

于 2008-10-21T23:52:10.210 回答
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; }
}
于 2008-10-22T01:37:03.570 回答
0

我刚刚创建了一个示例项目,并使用 Add Service Reference 菜单为该服务创建了一个 Web 代理:

http://www.xmlme.com/WSShakespeare.asmx

Visual Studio 2008 基于 WSDL 生成一个接口和一个代理类。例如,我有一个实现 ShakespeareSoap 接口的类 ShakespeareSoapClient。

它似乎工作正常。我是不是错过了什么。

于 2008-10-22T01:51:18.080 回答
0

当我从 2005 年升级到 2008 年时,我遇到了类似的问题。我认为您缺少什么,当您单击“添加服务参考”时,会出现一个较新的对话框。单击底部的高级按钮,然后在出现的下一个对话框中,单击兼容性部分底部的添加 Web 引用按钮。然后你会得到你最可能习惯的对话框,并且会有标准的 2.0 代理类。

于 2008-12-15T19:46:49.637 回答