是否可以使用相同的参数定义两个操作合约?我想让相同的端点在post和get上做不同的事情。我的代码在
之下 [OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "MAC/{input}")]
string MAC(string input);
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "MAC/{input}")]
Datalayer.Datacontracts.WebserviceMessage MAC(string input);
答案 0 :(得分:2)
同名? NO。
使用您提到的相同参数是可能的。但不是同名。
服务遵循以文档为中心的范例;所以在设计服务时,我们应该摆脱面向对象的思维。不要考虑多态,重载或覆盖。
服务的元数据必须作为文档共享,甚至是非面向对象的系统/平台(以支持互操作性)。
答案 1 :(得分:-1)
除了SaravananArumugam所说的内容之外 - 你所拥有的代码甚至都没有编译(你不能在同一个界面中使用同名的两个方法,它们的唯一区别就是返回类型)。但是,您可以更改方法名称并继续使用相同的UriTemplate - 您将拥有一个具有相同名称的“虚拟”方法(即,客户端使用的地址将是相同的 - 如下例所示。
还有一件事:您不应该使用[WebInvoke(Method =“GET”)],而是使用[WebGet]。
public class StackOverflow_6548562
{
public class WebserviceMessage
{
public string Data;
}
[ServiceContract]
public interface ITest
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "MAC/{input}")]
string MAC_Get(string input);
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "MAC/{input}")]
WebserviceMessage MAC_Post(string input);
}
public class Service : ITest
{
public string MAC_Get(string input)
{
return input;
}
public WebserviceMessage MAC_Post(string input)
{
return new WebserviceMessage { Data = input };
}
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service/";
WebServiceHost host = new WebServiceHost(typeof(Service), new Uri(baseAddress));
host.Open();
Console.WriteLine("Host opened");
WebClient c = new WebClient();
Console.WriteLine(c.DownloadString(baseAddress + "/MAC/fromGET"));
Console.WriteLine(c.UploadString(baseAddress + "/MAC/frompost", "POST", ""));
Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}