我正在尝试围绕尚不可用的 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/