c# - 我可以创建具有属性的 Web 服务吗?

标签 c# web-services properties asmx

我正在尝试围绕尚不可用的 Web 服务测试代码。我正在尝试模拟我自己的版本。根据规范,它将这样调用。

var service = new Service();
service.SD = new ServiceData();
service.SD.ID = "ABC123";
service.SD.Auth = "00000";
string result = service.DoMyThing();

这是我得到的最接近的。

var service = new Service();
service.set_SD(new ServiceData());
service.get_SD().ID = "ABC123";
service.get_SD().Auth = "00000";
service.DoMyThing();

问题出在 SD 属性上。如何编写服务以便 Visual Studio 2008 正确生成 Web 引用?

这是我当前的虚拟网络服务代码。

public class Service : System.Web.Services.WebService
{
    // This doesn't show up in the generated proxy at all
    public static ServiceData SDTest;

    // For extra credit explain why this needs to be static for it to work
    private static ServiceData _sd;
    public ServiceData SD
    {
        [WebMethod(EnableSession = true)]
        get { return _sd; }
        [WebMethod(EnableSession = true)]
        set { _sd = value; }
    }

    [WebMethod]
    public string DoMyThing()
    {
        // Presumably the real service accesses SD in here
        return "";
    }
}

public class ServiceData
{
    public string ID { get; set; }
    public string Auth { get; set; }
}

最佳答案

您的设计有缺陷。 Web 服务并不意味着具有属性。它们应该只公开方法,原因是 HTTP 协议(protocol)是无状态的(Web 服务也假设了这一点),所以公开一个属性没有意义,除非你希望它应用于实例的所有调用者(并且仍然,甚至在那种情况下,暴露它是没有意义的)。

相反,您想要做的是让 DoMyThing 方法获取 ServiceData 的实例(如果需要)并对其进行操作,返回适当的结果集。

如果您确实需要公开服务的属性,您可以使用 GetProperties 方法(或类似方法),它不带参数并返回包含服务信息的适当数据结构。

关于c# - 我可以创建具有属性的 Web 服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1110737/

相关文章:

c# - List<Object> 对象引用

c# - 是否可以用 Linq 替换这个 foreach 循环?

mysql更新更新表中的所有用户行

python - 构造一个对象,该对象在每次访问时都会更改其状态并且表现得像一个变量

java - 将配置文件转换为 HTML

c# - Entity Framework `AsNoTracking` 不适用于匿名投影

c# - .NET Core 中的 win/any 运行时是什么意思

java - 如何从另一个@Stateless bean 调用一个@Stateless bean 的方法

c# - 在 aspx.cs 而不是 asmx.cs 中使用 Web 方法有什么区别/优势/劣势吗?

c# - 为什么属性隐藏同名的继承函数?